首页/网络/协议速查/UDP 头部与校验和
TCP 与 UDP54 条

UDP 头部与校验和

UDP 头只有 4 个字段:源端口、目的端口、长度、校验和;IPv4 中校验和可为 0(不校验),IPv6 中强制校验。

协议速查网络更新于 2026-10-13

只有八个字节的头部

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 后异常」的常见成因之一。

易错点

  • 把 UDP 长度字段当成数据长度:它包含 8 字节头部,算载荷时要减去 8,计算错误会导致解析越界
  • 依赖 UDP 校验和做强校验:IPv4 下发送方可以合法地填 0,接收端不能假定一定有校验
  • 忽视分片带来的失效放大:单片丢失导致整包重传,QUIC 与 DNS over UDP 都因此格外关注包大小
  • 以为应用没收到包就是被网络丢了:校验和错误会在内核层直接丢弃,抓包与内核计数才能区分是链路还是数据损坏

数据来源与参考

  • RFC 768
  • RFC 8200 §8.1(UDP 校验和)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌