我一直在编写一个程序,该程序在 UDP 之上使用停止和等待协议来通过 LAN 和 WAN 发送数据包。我最近测试了我的程序,发现数据包越大(接近 64k 字节),丢包率越高。直观上这是有道理的,但实际原因是什么?
UDP 数据包大于MTU size承载它们的网络的信息将自动分割成多个数据包,然后由接收者重新组装。如果这些多个子数据包中的任何一个被丢弃,那么接收器也会丢弃其余的子数据包。
例如,如果您发送一个 63k UDP 数据包,并且它通过以太网传输,它将被分成 47 个以上较小的“片段”数据包(因为以太网的 MTU 是 1500 字节,但其中一些用于 UDP 标头等,因此 UDP 数据包中可用的用户数据空间量小于该值)。仅当 47 个以上的片段数据包全部顺利通过时,接收方才会“看到”该 UDP 数据包。如果只有其中一个片段数据包被丢弃,整个操作就会失败。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)