UDP 的特点
- 无需建立连接
- 无连接状态
- 首部开销小
- 没有拥塞控制
- 支持一对一、一对多、多对一和多对多的交互通信
- UDP 是面向报文的,收到应用层的报文后添加首部就直接给 IP 层,所以报文长度不能太长,不然会被路由器分片,也不能太短,不然会导致 IP 数据报的首部占比大,效率低
UDP 的首部格式
字段 | 长度 | 描述 |
---|---|---|
源端口 | 16b | 在需要对方回信时使用,不需要可取全 0 |
目的端口 | 16b | 目的端口号 |
长度 | 16b | 最小值是 8(仅有首部) |
检验和 | 16b | 若不想计算检验和则可取全 0 |
若接收方 UDP 发现收到的报文中目的端口号不正确,则丢弃该报文,并由 ICMP 返回“端口不可达”差错报文。
UDP 校验
校验和长度为 2B ,初始情况下全 0
- UDP 的检验要将首部和数据部分一起检验。
- 计算检验和时要添加一个临时的 12B 大小的伪首部,整个一起计算。、
- 数据部分不满足 2B 长度的部分用 0 填充
计算过程:
- 把加上伪首部的整个 UDP 数据报看成若干个 16bit 串
- 然后二进制反码运算求和再取反,也就是先求和再取反,求出来的结果设置为校验和的值
接收方检验:
- 收到数据后,除了检验和字段,其余字段还是按照 16bit 串求和
- 求出来的结果加上检验和,若为全 1,则无误,否则有误
Tip
每次对 16bit 串两两相加时,若产生溢出,则将溢出位回卷,也就是溢出的位从低位加回去。