如何防止因延迟过高而导致的数据包丢失?

如何防止因延迟过高而导致的数据包丢失?

我正在使用 netem(TC 模块)来引入延迟。我的需求是这样的,我想引入 5 秒延迟。我正在运行命令:

tc qdisc add dev eth0 root netem 延迟5秒

现在我尝试 ping 我的本地网络系统,但发现数据包丢失。

root@localhost ~]# ping 192.168.0.210
PING 192.168.0.210 (192.168.0.210) 56(84) bytes of data.
64 bytes from 192.168.0.210: icmp_seq=1 ttl=64 time=5594 ms
64 bytes from 192.168.0.210: icmp_seq=2 ttl=64 time=5000 ms
64 bytes from 192.168.0.210: icmp_seq=3 ttl=64 time=5000 ms
64 bytes from 192.168.0.210: icmp_seq=4 ttl=64 time=5000 ms
64 bytes from 192.168.0.210: icmp_seq=5 ttl=64 time=5000 ms
64 bytes from 192.168.0.210: icmp_seq=6 ttl=64 time=5000 ms
64 bytes from 192.168.0.210: icmp_seq=7 ttl=64 time=5000 ms
64 bytes from 192.168.0.210: icmp_seq=8 ttl=64 time=5000 ms
64 bytes from 192.168.0.210: icmp_seq=9 ttl=64 time=5000 ms
64 bytes from 192.168.0.210: icmp_seq=10 ttl=64 time=5000 ms
64 bytes from 192.168.0.210: icmp_seq=11 ttl=64 time=5000 ms
64 bytes from 192.168.0.210: icmp_seq=12 ttl=64 time=5000 ms
64 bytes from 192.168.0.210: icmp_seq=13 ttl=64 time=5000 ms 
64 bytes from 192.168.0.210: icmp_seq=14 ttl=64 time=5000 ms
64 bytes from 192.168.0.210: icmp_seq=15 ttl=64 time=5000 ms

--- 192.168.0.210 ping statistics ---
20 packets transmitted, 15 received, 25% packet loss, time 19003ms
rtt min/avg/max/mdev = 5000.387/5040.003/5594.296/148.154 ms, pipe 6

答案1

您意识到这实际上不是数据包丢失,对吧?发送数据包后会有 5 秒的延迟。因此,您发送了数据包 #16,但之后您立即按下 ctrl-c 键,因此它停止等待。

答案2

您是否尝试过增加 ping 命令等待响应的时间?我不知道默认情况下它如何应对通常表示数据包丢失的往返时间。

ping -W 20 192.168.0.210

答案3

数据包并没有丢失,只是延迟了。如果你查看 ping 结果,你会发现总是有 5 个数据包丢失。这是因为你每秒发送 1 个 ping 数据包,但每个数据包都延迟了 5 秒。最后 5 个数据包尚未返回,但如果你不终止 ping,它们就会返回。

尝试执行:ping -c 10 192.168.0.210

相关内容