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

cov*_*bob 5 networking network-programming

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

Jer*_*ner 7

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

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

  • 好吧,如果我们要选择尼特,一个65507字节有效载荷的UDP数据包长度为65535字节(包括标题) - 一个字节短于64KiB.但为了准确起见,我将把我的例子改为63k. (4认同)