UDP协议
UDP 是一个简单的、面向数据报的传输层协议,无连接协议,简单地把从 TCP/IP 应用 层得到的消息打包到数据报中,UDP 数据报只是在应用层的基础数据上添加一个首部后就 传递给IP 层。由于UDP 没有提供任何类型的内置出错检查或重传能力来提高可靠性,这 种方法称为尽最大努力交付(Best-Effort Delivery)。
UDP数据报格式
UDP 数据报被封装在一个 IP 数据报中,UDP 报文的封装格式如图7- 1所示。 一条 UDP 报文就叫一条用户数据报,封装时直接放入IP 报文数据区中,IP 首部中协议字段值为 17(0x11), 即表示封装的是UDP 数据报。
UDP 数据报首部的格式如图7-2所示。标准的 UDP 首部长度是8字节。
- 端口号:端口号表示发送进程和接收进程。源端口是发送进程的 UDP 端口,如果不需要返回数据,源端口设置为0。 TCP 和 UDP 依据目的端口号分用来自 IP 层的数据。TCP 端口号与UDP 端口号是相互独立的。
- 长度:为UDP 首部和UDP 数据的总字节数,也等于IP 数据报全长减去IP 首部的 长度。这个字段的最小值为8,即UDP 数据报只有首部,没有数据部分。
- 校验和:覆盖UDP 首部和UDP 数据。 UDP 检验和计算方法是把 UDP 数据报(包 括伪首部+首部+UDP 数据)的若干个16位字相加。若 UDP 数据报的长度为奇数字节, 则在最后增加填充字节0;若为偶数字节,则不用加0。
为了计算检验和UDP 设置了一个12字节长的伪首部,包含4字节源 IP 地址、4字节 目的IP地址、1字节填充、1字节协议类型和2字节 UDP 长度。这样计算校验和时求和数据就包含了通信双方的 IP 地址和协议类型,从而使得计算得出的校验和具有了一定的区分度。
UDP 的检验和是可选的,而TCP 的检验和是必需的。
UDP 检验和是简单的16位和。它检测不出交换两个16位的差错,这是因为两个16 位交换后,校验和值仍相等。所以UDP 无法查出来数据换位的错误。