计算机网络笔记(三十)——5.2用户数据报协议UDP
5.2.1UDP概述
一、UDP 的定义
用户数据报协议 (User Datagram Protocol, UDP) 是传输层的无连接、不可靠协议。它提供最小化的协议机制,仅支持数据报的简单传输,不保证数据顺序或可靠性。
二、UDP 的核心特点
-
无连接
- 通信前无需建立连接,直接发送数据报。
- 类似“寄信”,无需确认对方是否准备好。
-
不可靠传输
- 不保证数据到达目的地、不保证顺序、无重传机制。
- 若数据丢失或损坏,UDP 不会自动修复。
-
面向报文
- 应用层交给 UDP 的每个报文都会被完整发送(不拆分、不合并)。
- 接收方必须一次性接收整个报文。
-
首部开销小
- UDP 首部仅 8 字节,远小于 TCP 的 20 字节。
-
无拥塞控制
- 无论网络状态如何,UDP 始终以固定速率发送数据。
-
支持单播、多播、广播
- 适合一对多或多对多通信(如视频会议)。
三、UDP 首部格式
- 源端口:发送方端口号(可选,可置0)。
- 目的端口:接收方端口号(必填)。
- 长度:整个 UDP 数据报的长度(首部+数据,单位字节)。
- 校验和:用于检测数据是否损坏(可选,但推荐启用)。
四、UDP 校验和计算
-
伪首部参与校验
包括 IP 首部中的源 IP、目的 IP、协议类型和 UDP 数据长度。
保证 IP 层错误(如错发到其他主机)能被检测到。 -
计算步骤
- 将 UDP 数据报视为 16 位整数序列。
- 将伪首部添加到 UDP 数据报前,计算反码和。
- 将结果的反码存入校验和字段。
五、UDP 通信流程
六、UDP 的适用场景
- 实时应用
- 视频会议、在线直播(容忍部分丢包,追求低延迟)。
- 简单查询/响应
- DNS 查询、SNMP 监控(单次交互,无需连接)。
- 多播/广播通信
- 网络时间协议 (NTP)、路由器发现协议。
七、UDP 与 TCP 对比
特性 | UDP | TCP |
---|---|---|
连接方式 | 无连接 | 面向连接(三次握手) |
可靠性 | 不可靠 | 可靠(确认、重传、有序) |
首部开销 | 8 字节 | 20 字节(无选项) |
传输控制 | 无拥塞控制、无流量控制 | 拥塞控制、滑动窗口 |
数据单位 | 数据报(保留边界) | 字节流(无边界) |
总结
UDP 以“简单高效”为核心,牺牲可靠性换取低延迟,适用于对实时性要求高、能容忍少量数据丢失的场景。
5.2.2UDP的首部格式
UDP(用户数据报协议)首部格式是 固定8字节,由4个字段组成。
1. UDP首部格式图示
2. 首部字段详解
(1) 源端口(Source Port)
- 2字节(16位)
- 作用:发送方的端口号。
- 取值范围:0~65535。
- 可选性:可以为0,表示无需回复(如单播、广播通信)。
(2) 目的端口(Destination Port)
- 2字节(16位)
- 作用:接收方的端口号。
- 关键性:必须正确指定,否则接收方无法将数据交付给应用进程。
(3) 长度(Length)
- 2字节(16位)
- 作用:指示UDP数据报的总长度(首部+数据)。
- 取值范围:最小值是8(仅首部),最大值受IP分片限制(通常≤65535字节)。
(4) 校验和(Checksum)
- 2字节(16位)
- 作用:验证首部和数据的完整性。
- 计算范围:
- 数据报首部 + 数据。
- 伪首部(包含IP层信息):
3. 校验和计算流程
- 在发送方:
- 将校验和字段置0。
- 添加12字节的伪首部到UDP报文前。
- 对伪首部、UDP首部、数据部分计算二进制反码求和。
- 结果取反码填充到校验和字段。
- 在接收方:
- 接收完整数据报。
- 再次计算校验和,若结果为全1(0xFFFF),则数据无误。
4. 与TCP首部对比
特性 | UDP | TCP |
---|---|---|
首部长度 | 固定8字节(无选项) | 可变(20~60字节) |
可靠性保证 | 无 | 有序、可靠传输 |
校验和 | 可选(可置0) | 强制 |
流量控制 | 无 | 滑动窗口机制 |
5. 示例报文分析
十六进制UDP首部示例:06 32 00 45 00 1C E2 17
- 源端口:0x0632 ⇒ 1586(十进制)
- 目的端口:0x0045 ⇒ 69(常用于TFTP协议)
- 长度:0x001C ⇒ 28字节(首部8字节 + 数据20字节)
- 校验和:0xE217(验证是否被篡改)。
问答回顾
-
为何UDP首部没有首部长度字段?
答:UDP首部尺寸固定为8字节,无需单独说明长度。 -
若检验和为0会怎样?
答:在UDP规范中,校验和为0表示禁用校验(非推荐做法)。正常实现需将全0转换为全1(0xFFFF)。