gpt4 book ai didi

linux - 为什么 UDP 中的丢包与数据包数量和带宽利用率相关

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:52:51 31 4
gpt4 key购买 nike

我正在使用 iperf 测试客户端和主机之间的速度。在我的应用程序中,我需要能够以大约 5KHz 的频率发送 2 字节的 UDP 帧。

进行正常的 UDP 速度测试,我可以轻松获得 10Mb/s:

 $iperf -uVc some_ip -b 10M
Interval Transfer Bandwidth Dropped/Sent
0.0-10.0 sec 11.9 MBytes 10.0Mbit/sec 0 / 8504 (0%)

然后当我尝试通过以 5Hz(对应于 80Kb/s)发送 2B 数据报来镜像我的应用程序时:

 $iperf -l 2 -uVc some_ip -b 80K

服务器端说没有数据包通过,我猜是因为计数器或任何 iperf 用来跟踪数据包的东西无法容纳在 2B 有效载荷内。这有意义吗?

作为一般经验法则,发送许多小数据包与发送少量大数据包相比有多糟糕?谁能指出说明等待“打包”大型数据报与一收到数据就立即发送 2B 数据之间的权衡的文献?

为了进一步澄清,我感兴趣的是您发送许多小数据包(包括开销,数据包只有大约 60B)与发送更少但更大的数据包所付出的代价。到目前为止,在我的测试中,数据包丢失显然与带宽使用无关,而是与数据包数量相关,我发现这是违反直觉的!

编辑:

我在最简单的客户端-服务器设置上执行此操作,在本地网络上连接的两台 Linux PC 之间,它们是网络上唯一的接口(interface),它们之间有以太网交换机。

最佳答案

您必须意识到您的 2 个字节是有效载荷,网络层将在您的有效载荷前面添加 header 。光是IP头就有20字节,但是UDP或者TCP也会有他们的头,当然还有以太网头。

最有可能但不保证网络是以太网网络,这意味着 mtu 大约为 1500。如果包含 header 的数据包不是那个大小,则您没有充分利用网络。

如果您的数据包不适合 mtu,IP 将进行分段。因此假设 mtu 是 1500 并且不同的层不添加任何东西,那么发送 2000 字节将分成 1500 和 500。或者如果你有 1501,它将分成 1500 和 1。同样不是最佳的。 IP 最多可以分段 64K。如果你发送那么大的东西,那么它当然会被 IP 分割,除了最后一个之外你会有很多最佳数据包。

数据包的最佳大小 = mtu - 使用的不同层的 header 。图层是

  • TCP 或 UDP
  • 知识产权
  • 以太网

请注意,mtu 不是保证的 1492。它可以低于它取决于整个网络。

TCP 将为您完成所有这些工作。因为 TCP 的本性就是尝试优化使用 mtu。Nagle 被实现为一个连续的 50 毫秒计时器,并且仅当该计时器到期时,或者如果对等方期望对他自己发送的内容进行确认时,才会发送一个段。

关于linux - 为什么 UDP 中的丢包与数据包数量和带宽利用率相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29545709/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com