在运输层中,最为重要的两个协议就是 TCP 和 UDP。相对于 TCP 巨细无遗的处理了各种情况,UDP 只提供了最小的功能,几乎就是在直接使用 IP 协议。UDP 面向报文,只负责将报文传输给对方,不做任何拆分或拼接处理。
特点
UDP 的整体思想就是以牺牲功能(可靠性)为代价,换来更高的效率。
- 没有差错纠正。UDP 仅提供差错检测功能,以最小化额外消耗。
- 不可靠。UDP 协议并不关心对方是否收到数据,没有重传确认等类似机制。因此对于一些需要高速传输数据但对数据丢失有一定容忍度的场景相比 TCP 更为适合。
- 没有拥塞控制。不管网络条件如何,UDP 都不会因此而调整发送速率,虽然会导致丢包但对于一些实时性要求高的场景表现更好。
- 无连接状态。TCP 中序列号等信息需要保存,而 UDP 中无需这些参数,也无需建立连接。
- UDP 支持一对一、一对多、多对一和多对多的通信。
报文段结构
UDP 数据封装于 IP 数据报中。
但是由于 UDP 的特性,首部只需 8 个字节。
其中长度为头部和数据的总长度,以字节为单位。
校验和计算
校验和由发送方计算,接收方校验,以保证在传输过程中没有比特发生改变。UDP 使用的是 Internet 校验和,即将校验和字段设为 0,然后计算 16 位二进制反码和。
这种方式只能对于 16 位整数倍的报文,即偶数倍字节,而 UDP 的长度可以是奇数倍,同时为了确认 UDP 是否发送到正确目的地,所以校验和计算的是带伪头部的字段。
前三行都取自 IP 协议头部,称为 UDP 伪头部,之后就是普通的 UDP 头部。在最后为了保证偶数倍的字节补足 0。