一、UDP协议
UDP协议是一种简单的面向数据报的传输层协议,它不提供差错纠正、队列管理、重复消除、流量控制以及拥塞控制等功能。它只提供最小的差错检测功能,要想保证数据被可靠的投递或正确排序,应用程序必须自己实现这些功能。
因为它是无连接协议,所以它比其他传输层协议使用更少的开销。
UDP的首部如下:
UDP首部共包含8个字节,内容很简单,仅仅包含了源目端口号、报文长度以及校验和这四个元素。其中,长度字段表示的是数据长度和首部长度。
二、UDP校验和
UDP校验和要用到一个伪首部,用到来自IP数据报中的部分字段,伪首部的结构如下:
伪头部的目的是让UDP层验证数据是否已经到达正确目的地(即,该IP没有接受地址错误的数据报,也没有给UDP一个其他传输协议的数据报),它不会被发送出去,只用作校验功能。
注意
- UDP数据报长度可以是奇数个字节,而校验算法只相加16位(2字节),因此如果UDP长度是奇数时,计算校验和会在末尾补零(但不会被发送出去)。
- UDP中的校验和是可选的(强烈建议使用)。因此对于使用UDP的应用层协议,在收到数据时应当先校验校验和。
三、UDP/IP分片
UDP数据报文最大可达2^16=65535
个字节,除去首部还剩下65527
个字节。但是受限于网络中的MTU等设置,过长的UDP数据报文段将会在IP数据报中分片。例如在一个MTU为1500的网络环境中发送一个长度为3000的UDP报文将会以如下形式发送出去:
注意:
- 偏移的单位是8个字节,例如第二片的偏移是185,实际上是第185*8=1480个字节。
此处评论已关闭