概述
UDP(User Datagram Protocol,用户数据报协议)在 IP 数据报服务之上仅增加了:
- 复用与分用:通过端口号将数据交付给正确的进程
- 差错检测:校验和检测传输差错
UDP 无拥塞控制、无连接管理、无重传机制。
特点
- 无连接:通信前无需建立连接
- 不可靠:不保证数据按序到达、不保证数据到达
- 面向报文:对应用层交下来的报文既不合并也不拆分
- 无拥塞控制:网络拥塞不会降低发送速率
- 首部开销小:仅 8 字节
- 支持一对一、一对多、多对一、多对多通信
UDP 报文格式
UDP 首部仅 8 字节,包含 4 个字段:
| 字段 | 长度 | 说明 |
|---|---|---|
| 源端口 | 2B | 发送方端口(可为 0) |
| 目的端口 | 2B | 接收方端口 |
| 长度 | 2B | UDP 数据报总长度(首部 + 数据),最小 8 |
| 校验和 | 2B | 检测 UDP 数据报在传输中是否有错 |
UDP 校验
伪首部
校验时增加 12 字节的伪首部,包含:
- 源 IP 地址(4B)
- 目的 IP 地址(4B)
- 全 0(1B)
- 协议号 UDP = 17(1B)
- UDP 长度(2B)
伪首部不实际传送,只用于校验计算。
校验过程
- 校验首部和数据部分(与 IP 只校验首部不同)
- 发送方:将数据按 16 位字进行二进制反码运算求和,结果取反写入校验和
- 接收端:将所有 16 位字(含校验和)进行二进制反码运算,结果为全 1 则无错
多路复用与多路分用
- 多路复用:发送端多个进程使用 UDP 发送数据报
- 多路分用:接收端根据目的端口号将数据报交付给正确的进程