⽹络编程之UDP中⼀个包的⼤⼩最⼤能多⼤
网络编程之delphi
读书笔记:
结论1:局域⽹环境下,建议将UDP数据控制在1472
字节以下
⼀定要知道
因为链路层的传输单元(MTU)是1500字节,1500字节中并不包含链路层的⾸尾18个字节。1500字节是链路层的数据区。 udp数据包就是放在这个数据区中,
⽹络层是数据链路层的上层,所以,⽹络层IP数据报长度就是1500字节。这1500字节包含了IP数据报⾸部+IP数据报的数据区。 1500-
20=1480,这1480的长度专门存放TCP传来的数据报: TCP或者UDP数据报。
由上可知,UDP数据报的长度为1480字节(含有报头),⽽UDP⾸部占有8个字节,故UDP的数据区长度为1472字节(1480-8=1472).
注意,上⾯这些都是理论数据。
丢包或者重组
因为UDP不保证数据的可靠性。那么,当传给UDP数据区的长度⼤于1472时,此时,IP数据报的长度已经⼤于1500字节。这时,IP层就需要将这个数据包分⽚发送并在接收端重组。但是,如果分⽚传输的过程中出现丢包,怎么处理?⽐如,IP层需要将⼀个2000字节的数据包分为两个包A和B发出,接收端没有收到B仅收到A。那么,IP层将会丢弃整个数据包,当然也就不会有重组了。
结论2:Internet编程时,建议将UDP数据控制在548
字节以下
⽹络中的设备繁多,可能设定的传输控制单元(MTU)的⼤⼩也不尽相同。这样,同⼀段数据经历不同的设备,设备需要做很多繁琐的⼯作。
根据Internet的协议,MTU设置576字节。实际中,我们应该尽量控制UDP数据报中的数据区的长度为548(576-8(⾸部长度)=548)字节以下。
unix⽹络编程第⼀卷⾥说:ipv4协议规定ip层的最⼩重组缓冲区⼤⼩为576!所以,建议udp包不要超过这个⼤⼩,⽽不是因为internet的标准MTU是576!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。