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

标签 networking network-programming

我一直在编写一个程序,它在 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/

相关文章:

python - 从接口(interface)的IP和网络掩码获取网络IP

php - 将 PHP 与本地 C++ 程序链接

python - 在 Python 中通过网络发送对象的最佳方式是什么?

docker - GNS3 上的网络自动化模块错误

客户端端口号

c - NetworkManager libnm 线程安全

networking - 很多端口数据很少,还是一个端口数据很多?

java劫持套接字可能吗?

python - 在 Python 2.7 中创建套接字时出错

c# - 如何检查谁在 C# 中使用某个端口?