讨论和测试:最大UDP数据报长
注:下面的讨论均针对Ipv4
从理论上,IP包头中有一个字段是标志Ip包的总体长度,共16bit,所有整个Ip包的长度就限制在65535字节,这个长度就包括上层TCP或者UDP的数据和头,以及IP包本身的头和IP包的扩展选项。
现在我们想要得到UDP的最大数据包,则理论上应该65535-UDP头(8字节)-IP包头(20字节)-IP包的扩展选项(假设为0)=65507
当然,这个数据是假设IP支持分片,如果IP不支持分片,那最大的IP报文受MTU限制,例如ethernet上是1500。
下面是我作了一个小测试:
测试环境:
OS:全部为RedHat9.0
测试总结:
1. 为了把客户端和服务器放在同一台机器上时会应该服务器的接收数据(变小)?
2.Windows的测试还未进行,有兴趣的人可以测试一下
3.IP包总长度的实际限制:
1)应用程序可能会受到其程序接口的限制。socket API提供了一个可供应用程序调用的函数,以设置接收和发送缓存的长度。现在大部分支持8192字节的UDP数据报。
2)来自于TCP/IP的内核实现的限制。可能存在一些实现特性(或差错),使IP数据报长度小于65535字节。
评论