UDP数据包大小和数据包丢失

时间:2012-04-27 18:02:23

标签: networking network-programming

我一直在编写一个程序,它在UDP上使用停止和等待协议,通过LAN和WAN发送数据包。我最近一直在测试我的程序,并注意到较大的数据包(接近64k字节)的丢包率更高。直觉上这是有道理的,但实际原因是什么?

3 个答案:

答案 0 :(得分:7)

大于承载它们的网络的MTU size的UDP数据包将自动拆分为多个数据包,然后由收件人重新组装。如果这些多个子包中的任何一个被丢弃,那么接收器也将丢弃其余的子包。

因此,例如,如果您发送63k UDP数据包,并且它通过以太网,它将被分解为47个更小的“片段”数据包(因为以太网的MTU是1500字节,但其中一些用于UDP标头等等,因此UDP数据包中可用的用户数据空间量小于该数据包。如果所有47个以上的片段数据包都能正常通过,接收器将只“看到”该UDP数据包。如果只丢弃其中一个片段数据包,整个操作就会失败。

答案 1 :(得分:0)

嗯,数据网络远非可靠;数据包一直在丢弃。重载路由器,完整缓冲区和损坏的数据包是一些原因。由于UDP没有流量控制功能,因此如果接收端过载,则无法减速。

正如Jeremy所解释的那样,有效载荷越大,分组的数据包就越多,因此失去其中一部分的可能性就越大。

UDP用于这里丢弃的数据包不会影响任何事情或需要及时到达那里的情况或根本不存在的情况。 (VOIP,流媒体视频等)

答案 2 :(得分:-1)

关于IP碎片和碎片整理的全部内容。超过MTU的数据包将被分段并且必须在最终主机上进行碎片整理,还有可能在路径上再次碎片碎片并且再次可以添加延迟。有时,如果为第4层过滤配置了一些N / W元素,那么它会进行碎片整理(不是最终主机)应用规则,然后再次转换和转发。这就是为什么需要性能的应用程序总是尝试发送大小为< =(MTU-ETHHDR-IPHDR)

的数据的原因