我一直在编写一个程序,它在 UDP 之上使用停止和等待协议(protocol)通过 LAN 和 WAN 发送数据包。我最近一直在测试我的程序,并注意到较大数据包(接近 64k 字节)的数据包丢失率更高。直觉上这是有道理的,但真正的原因是什么?
最佳答案
UDP 数据包大于 MTU size承载它们的网络将自动拆分为多个数据包,然后由接收者重新组合。如果这些多个子数据包中的任何一个被丢弃,那么接收器也将丢弃其余的子数据包。
因此,例如,如果您发送一个 63k 的 UDP 数据包,并且它通过以太网,它将被分解为 47+ 个更小的“片段”数据包(因为以太网的 MTU 是 1500 字节,但其中一些用于 UDP header 等,因此 UDP 数据包中可用的用户数据空间量小于此值)。如果所有 47 个以上的片段数据包都可以通过,接收器将只会“看到”该 UDP 数据包。如果这些片段包中只有一个被丢弃,则整个操作将失败。
关于networking - UDP 数据包大小和数据包丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10355626/