我用 测试了一条线路的链接质量iperf
。测得的速度(UDP 端口 9005)为 96Mbps,这很好,因为两台服务器都以 100Mbps 的速度连接到互联网。另一方面,数据报丢失率显示为 3.3-3.7%,我觉得有点太多了。使用高速传输协议,我用 记录了两边的数据包tcpdump
。然后我计算出数据包丢失 - 平均为 0.25%。有人能解释一下,这么大的差异可能来自哪里吗?您认为可接受的数据包丢失是多少?
答案1
由于 CPU 无法跟上,我在 UDP 模式下使用 iPerf 时经历了严重的数据丢失。出于某种原因,使用 UDP 的 iPerf 似乎很多比使用 TCP 的 iPerf 占用更多的 CPU。将 iPerf 设置为一半的速率时,是否会出现相同的丢失百分比?
回答你的第二个问题,即多少数据包丢失是可以接受的,这实际上取决于你正在运行什么应用程序,有多少流量。实际上,如果你的带宽低于你的带宽限制,就不应该有任何损失。对于大多数情况,我可能不会对 0.25% 有太多抱怨,但如果你以非常高的速率运行,这仍然是很大的损失。
[编辑 1] 关于这个话题,我还有些其他的想法:
- 尝试增加 iPerf 的速率。如果某个地方出现系统性问题,无论速率如何,您都可能会遇到相同百分比的损失。如果您的硬件已达到极限,或者您的提供商做了某种红色的,那么在某个特定比率之前可能不会有损失,然后,随着该比率的升高,损失会逐渐加剧。
- 对 iPerf 会话进行 tcpdump 测量,只是为了验证您的测试是否准确。
- 尝试使用 TCP 进行 iPerf。这不会报告丢失,但如果丢失,则连接将无法扩展。由于延迟也会影响这一点,请确保测试到延迟尽可能小的端点。
- 根据您连接内部的设备,确保您尽可能靠近它。例如,如果您的测试系统和边缘路由器之间有多个交换机,请移至直接连接的交换机。
- 如果您有托管交换机,请检查其统计数据以确保那里没有发生丢失。我遇到过一些较便宜的交换机,当您在其上获得接近 100Mbps 的 UDP 流量时,它们会开始掉线(不过,大多数是旧的和便宜的非托管交换机)。
- 尝试从两个不同的客户端同时向两个不同的主机运行 iPerf,这样您就可以确保限制不是由 CPU 或廉价的本地 NIC 卡造成的。
答案2
嗯,TCP 有机制可以最大化一个流的利用率,而 UDP 没有。因此,每个应用程序都必须创建自己的机制,因此每个应用程序可能使用不同的方法来做到这一点。Iperf 可能会允许丢失更多数据包,因为它试图达到最大可用带宽,而不关心信息是否收到。另一个应用程序可能会尝试不丢失太多数据包,并将数据包速率降低到连接中的可用吞吐量。
答案3
您是否在使用 iPerf 时使用过 tcpdump 检查数据包丢失,以确保您使用 tcpdump 计算的数据包丢失与 iperf 相匹配?
您可能会发现您的测量方法无法进行比较。
答案4
iperf 是否会自动丢弃使用 UDP 乱序到达的数据包?您可能会发现连接上出现了一点抖动。