只有八个字节的头部
UDP 头部固定 8 字节,只有源端口、目的端口、长度、校验和四个字段,没有任何序列号或控制位。校验和是唯一的质量保障:IPv4 下允许填 0 表示不校验(由发送方决定),IPv6 下则是强制校验。正因为头部如此精简,UDP 才能做到无连接、低开销,代价是所有可靠性都要在上面自己做。
基本信息
| 协议号 | IPv4 与 IPv6 均为 17 |
|---|---|
| 头部长度 | 固定 8 字节 |
| 长度字段 | 包含头部与数据的字节数,最小为 8,上限 65535 |
| 校验和 | 覆盖伪头部(源与目的地址、协议号、长度)与整个数据报 |
| v4 与 v6 差异 | IPv4 允许校验和为 0 表示不校验,IPv6 强制要求校验 |
字段读法
| 字段 | 长度 | 说明 |
|---|---|---|
| 源端口 | 16 位 | 无应答场景可为 0 |
| 目的端口 | 16 位 | 必填,接收方据此交付 |
| 长度 | 16 位 | 头部加数据的字节数,最小 8 |
| 校验和 | 16 位 | 覆盖伪头部,IPv4 可置 0 表示不校验 |
抓包观察
抓包观察
tcpdump -nn -vvv 'udp port 53' -c 3 # 观察长度与校验和字段
# 攻击检测常用:超大 UDP 包与分片组合
tcpdump -nn 'udp and ip[2:2] > 1400' -c 5
ss -uanp | head # 查看本机 UDP 监听与连接典型使用场景
- 排查 DNS 响应被截断:UDP 长度上限与 EDNS0 缓冲区大小直接相关
- 分析放大器攻击:小请求大响应是 UDP 被滥用放大的根本原因
- 判断服务是否真的收到包:校验和错误会在内核层被静默丢弃,应用日志里什么都没
- 计算分片行为:单包超过路径 MTU 会被 IP 分片,一片丢失整包作废
UDP 长度字段最大 65535,超过就要应用层分片:不要指望 IP 分片兜底,因为只要丢失其中一片,整个数据报都会被丢弃并需要重传全部内容。
IPv4 下校验和置 0 曾是合法优化,但会让损坏数据静默进入应用;NAT 设备通常会强制重算校验和,这也是「本机测试正常、过 NAT 后异常」的常见成因之一。