Skip to content

UDP 协议

考情分析

UDP 在 408 中主要以选择题形式出现,考查 UDP 的特点、首部格式以及与 TCP 的区别。单独出大题的概率不高,但经常作为干扰项出现在 TCP 相关的题目里。

考频:★★★

UDP 的特点

UDP(User Datagram Protocol,用户数据报协议)是传输层的两个核心协议之一。它的设计哲学非常简单——在 IP 数据报服务之上只增加了最基本的功能:复用/分用 和 差错检测。

UDP 有四个核心特点:

1. 无连接

发送数据之前不需要建立连接,减少了开销和延迟。发送方想发就发,不需要像 TCP 那样先三次握手。

2. 不可靠

UDP 尽最大努力交付,不保证数据一定到达,也不保证数据按序到达。没有确认机制、没有重传机制。数据丢了就丢了,UDP 不管。

3. 面向报文

UDP 对应用层交下来的报文,既不拆分也不合并,保留报文的边界。应用层给 UDP 多大的报文,UDP 就原样加个首部发出去。这意味着应用层需要自己选择合适的报文大小——太大了 IP 层要分片,太小了首部开销占比过高。

4. 支持一对一、一对多、多对一、多对多通信

TCP 只能一对一,但 UDP 可以进行广播和多播。

5. 没有拥塞控制

UDP 没有拥塞控制机制,发送方不会因为网络拥塞而降低发送速率。这是一把双刃剑:好处是实时性有保障,坏处是可能加剧网络拥塞。在网络拥塞时,所有 TCP 连接都会自觉降速,但 UDP 流量不受影响,这可能导致 TCP 连接的性能进一步恶化。

UDP 首部格式

UDP 首部非常简洁,只有 8 个字节(对比 TCP 最少 20 字节)。

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          源端口号             |          目的端口号           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            长度               |           校验和              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段长度说明
源端口16 位发送方端口号,可选字段(不需要回复时可填 0)
目的端口16 位接收方端口号
长度16 位UDP 数据报的总长度(首部 + 数据),最小值为 8(仅首部)
校验和16 位检测 UDP 数据报在传输中是否出错,可选字段

一个容易记混的点:UDP 的"长度"字段包含首部在内的整个 UDP 数据报长度,而不仅仅是数据部分的长度。

UDP 校验和计算

UDP 校验和的计算范围不仅包括 UDP 首部和数据,还要加上一个 12 字节的伪首部

伪首部的结构:

字段长度来源
源 IP 地址4 字节IP 首部
目的 IP 地址4 字节IP 首部
全零填充1 字节固定
协议号1 字节UDP = 17
UDP 长度2 字节同 UDP 首部的长度字段

伪首部不会被发送出去,它仅在计算校验和时临时使用。引入伪首部的目的是让 UDP 层能够检验数据报是否被送到了正确的目的地(验证 IP 地址和协议号)。

计算步骤:

  1. 将伪首部、UDP 首部和数据部分按 16 位分组
  2. 如果数据部分长度为奇数字节,末尾填充一个全零字节
  3. 所有 16 位字按二进制反码求和
  4. 将结果取反码,填入校验和字段

UDP 适用场景

虽然 UDP"不可靠",但在很多场景下反而比 TCP 更合适:

应用协议选择 UDP 的原因
DNS 域名解析端口 53查询报文小,一次请求一次响应,不值得建立 TCP 连接
DHCP端口 67/68客户端还没有 IP 地址,需要广播,TCP 无法广播
实时视频/音频RTP实时性要求高,偶尔丢帧可以容忍,重传反而会造成卡顿
SNMP 网络管理端口 161管理报文简短,丢失后重新查询即可

一句话总结选用原则:对实时性要求高、偶尔丢失可容忍、报文较短的场景,优先选 UDP。

UDP 在应用层可靠性

虽然 UDP 本身不提供可靠传输,但应用层可以在 UDP 之上自行实现可靠性机制。几个典型的例子:

TFTP(简单文件传输协议): 基于 UDP,但在应用层实现了自己的确认和重传机制——每发送一个数据块(512 字节),等待对方确认后才发送下一个。

DNS: 如果 UDP 查询超时没有收到响应,客户端会重新发送查询。这就是在应用层处理丢包。

QUIC 协议(HTTP/3.0): 基于 UDP,在传输层之上实现了类似 TCP 的可靠传输、拥塞控制和多路复用。QUIC 选择 UDP 而非 TCP 是因为 TCP 的队头阻塞问题无法在协议栈内部解决,而 UDP 提供了更大的灵活性。

这说明"不可靠"只是 UDP 协议层的特性,不意味着基于 UDP 的应用一定不可靠。选择在哪一层实现可靠性,取决于应用的需求。

交互可视化

加载可视化中...

易错点

1. UDP 校验和是可选的,但 TCP 校验和是必须的

UDP 发送方可以选择不计算校验和(校验和字段填 0),但 TCP 的校验和是强制的。

2. UDP 首部长度是固定的 8 字节

不像 TCP 首部有可变的选项字段。UDP 首部永远是 8 字节,没有例外。

3. "面向报文"的含义

面向报文意味着 UDP 不对报文做任何拆分或合并。一次 sendto() 调用对应一个完整的 UDP 数据报。接收端一次 recvfrom() 也恰好收到一个完整的报文。这和 TCP 的"面向字节流"形成鲜明对比。

4. UDP 的长度字段最小值是 8

即使数据部分为空,长度字段 = 首部长度 = 8 字节。

5. UDP 伪首部的协议号是 17

IPv4 中 TCP 的协议号是 6,UDP 的协议号是 17。校验和计算时伪首部中填的协议号必须正确,否则即使数据没有出错,校验和也会验证失败。

6. UDP 的源端口是可选的

如果发送方不需要接收回复(比如单向数据流),源端口可以填 0。但实际应用中大多数场景都需要回复,所以通常会填一个有效的源端口。

高频考点清单

  • UDP 的四个特点(无连接、不可靠、面向报文、支持多种通信方式)
  • UDP 首部格式(4 个字段各 2 字节,共 8 字节)
  • UDP 校验和计算需要加伪首部(12 字节)
  • 伪首部不实际发送,仅用于校验和计算
  • UDP 适用场景及对应协议/端口号
  • UDP 和 TCP 的核心区别

真题练习

相关真题(6题)

2025Q37选择题2分

NAT 从内网到外网修改源 IP 地址和源端口号

2025Q39选择题2分

UDP 无需建立连接一个 RTT 即可,TCP 需先三次握手再请求

2024Q39选择题2分

UDP 校验和:伪首部+首部+数据按 16 位反码求和再取反

2021Q39选择题2分

UDP/TCP 传输效率:UDP 首部 8B,TCP 首部 20B,计算载荷占比

2018Q39选择题2分

UDP 分用依据目的端口号将数据交给对应进程

2014Q39选择题2分

UDP 协议特点:无连接、不可靠、支持组播