首页/计算机网络/05-transport/UDP协议 🔗 在 Obsidian 中打开
计算机网络 · 05-transport

UDP协议

难度 ★★重要度 ★★ 考查频率 低 计算机网络/传输层
速查
UDP 是一种无连接、不可靠的传输层协议,提供「尽最大努力交付」。首部仅 8 字节面向报文(不拆分不合并),无拥塞控制,可广播/多播,适合实时应用。

核心概念

UDP(User Datagram Protocol)是一种无连接、不可靠的传输层协议,提供「尽最大努力交付」服务。

UDP 的核心特点

特性说明
连接方式无连接,发送前不需要建立连接
可靠性不可靠,不保证交付
面向对象面向报文(保留报文边界)
拥塞控制无拥塞控制
首部开销小,仅 8 字节
通信方式支持一对一、一对多、多对一、多对多
传输效率高(无需建立连接、无确认机制)

面向报文 vs 面向字节流

  • UDP 面向报文:应用层交多长的报文,UDP 就加首部后发送,不拆分不合并。接收方一次交付一个完整报文。
  • TCP 面向字节流:TCP 把数据看作无结构的字节流,可能拆分或合并。

关键定义表格

UDP 首部格式(8 字节)

 0      15 16     31
+--------+--------+
|  源端口  | 目的端口 |  ← 各16位,共4字节
+--------+--------+
|   长度   |  校验和  |  ← 各16位,共4字节
+--------+--------+
|     数据(可选)    |
+------------------+
字段长度说明
源端口16 位可选,不需要时填 0
目的端口16 位必须,交付目标
长度16 位UDP 数据报总长度(首部+数据),最小值为 8
校验和16 位可选(IPv4),必选(IPv6),检测错误

UDP 校验和计算

校验和覆盖范围:伪首部 + UDP 首部 + 数据

伪首部结构(12 字节)

字段长度来源
源 IP 地址32 位IP 层
目的 IP 地址32 位IP 层
全 08 位填充
协议号8 位17(UDP)
UDP 长度16 位UDP 首部的「长度」字段

计算步骤

  1. 将校验和字段置为 0。
  2. 将伪首部、首部、数据按 16 位分组。
  3. 按二进制反码求和(进位回卷)。
  4. 结果取反码,填入校验和字段。

手算示例

示例 1:UDP 数据报长度计算

题目:某应用层数据为 1000 字节,封装为 UDP 数据报,再封装为 IP 数据报,求各层数据长度。

解答

  • 应用层数据:1000 字节
  • UDP 数据报 = 首部(8 字节) + 数据(1000 字节) = 1008 字节
  • IP 数据报 = IP 首部(20 字节) + UDP 数据报(1008 字节) = 1028 字节

示例 2:校验和计算

题目:计算以下数据的 UDP 校验和(简化,仅 16 位数据):0x45670xABCD

解答

  1. 求和:$`0x4567 + 0xABCD = 0xF134`$(无进位)
  2. 取反码:$`~0xF134 = 0x0ECB`$
  3. 校验和 = 0x0ECB

示例 3:伪首部校验和验证

题目:源 $IP=192.168.1.1$,目的 $IP=10.0.0.1$,UDP 长度=16,数据为 0x1234, 0x5678,求校验和。

解答

  1. 伪首部:0xC0A80101 + 0x0A000001 + 0x0011 + 0x0010 = 分段求和
  2. 首部:源端口 + 目的端口 + 长度(16) + 校验和(0)
  3. 数据:0x1234 + 0x5678
  4. 全部按 16 位反码求和,取反填入

常见考法

  1. UDP 首部字段识别:8 字节首部,4 个字段各 16 位。
  2. 校验和计算:伪首部的概念,反码求和。
  3. UDP vs TCP 对比:连接、可靠、开销、应用场景。
  4. 面向报文特性:数据不拆分合并,保留边界。
  5. 适用场景:DNS、DHCP、RIP、SNMP、视频流。

易错点

必记
  1. 混淆首部长度:UDP 首部是 8 字节,不是 20 字节(20 是 TCP)。
  2. 忽略伪首部:校验和计算必须包含伪首部,仅覆盖首部+数据是错的。
  3. 长度字段含义:是整个 UDP 数据报的长度(首部+数据),不是仅数据长度。
  4. 源端口必填:源端口是可选的,不需要时可以填 0。
  5. 认为 UDP 完全不可靠:UDP 本身不可靠,但应用层可以实现可靠传输(如 QUIC)。
  6. 混淆面向报文和面向字节流:UDP 不拆分报文,TCP 按字节流处理。

核心结论

  1. UDP 首部 8 字节:源端口+目的端口+长度+校验和,各 16 位。
  2. 校验和覆盖伪首部:包含 IP 层信息(源/目的 IP),跨层校验。
  3. 面向报文不拆分:应用层给多少,UDP 就发多少。
  4. 无连接无确认:发送前无需握手,无 ACK、超时重传。
  5. 适合实时应用:视频、语音、DNS 查询等对延迟敏感、容忍少量丢包的场景。
  6. UDP 可以广播/多播:支持一对多通信,TCP 只能点对点。

记忆卡片

UDP 首部有多少字节?包含哪些字段?
8 字节,4 个字段:源端口(16)、目的端口(16)、长度(16)、校验和(16)。记忆:$8=4\times2$。
UDP 校验和的计算范围是什么?
覆盖 伪首部 + UDP 首部 + 数据;伪首部含源 IP、目的 IP、全 0、协议号(17)、UDP 长度,共 12 字节,防止 IP 地址被篡改。
UDP 的「面向报文」是什么意思?
应用层交付多长的报文,UDP 就加首部后直接发送,不做拆分和合并;与 TCP「面向字节流」对比。
UDP 长度字段的最小值是多少?为什么?
最小值为 8,因为即使没有数据,UDP 数据报也必须包含 8 字节首部。
列举 5 个使用 UDP 的应用层协议。
DNSDHCPSNMPRIPRTP。口诀:「DNS、DHCP 不啰嗦,SNMP、RIP、RTP 都用 UDP」。

交互动画 · UDP 首部字段

UDP 首部 = 4 × 16 位 = 8 字节(点击字段查看说明) 源端口16 bit 目的端口16 bit 长度16 bit 校验和16 bit
共 4 个字段,每个 16 位,合计 8 字节
示意图:UDP 首部远比 TCP(≥20 字节)精简,这也是其开销小、效率高的原因。
手动模式
应用数据:1000 字节 +8 字节 UDP 首部 源端口 123416 bit 目的端口 5316 bit 长度 100816 bit 校验和 016 bit UDP 数据报 = 8 字节首部 + 1000 字节数据(共 1008 字节) +20 字节 IP 首部 IP 数据报 = 20 字节首部 + 1008 字节 UDP,共 1028 字节 无连接:直接发送,无握手、无确认
UDP 封装:应用 1000B → UDP 1008B → IP 1028B
面向报文:不拆分不合并,一次交付一个完整报文

相关知识点

tcp-reliable-transmission tcp-three-way-handshake transport-layer-and-ports

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。