如何防止由于高延迟造成的数据包丢失?

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

tc qdisc add dev eth0 root netem delay 5s

现在我正在尝试在本地networking系统上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 

你意识到这实际上并不是包丢失,对吧? 发送数据包后,您有5秒的延迟。 所以,你发送数据包#16,但你后面ctrl-c,所以它停止等待。

你试过增加ping命令等待响应的时间吗? 我不知道默认情况下,往返时间通常表示包丢失的情况。

ping -W 20 192.168.0.210

数据包不会丢失,只是延迟。 如果你看你的ping结果,你会看到总是有5个数据包丢失。 这是因为你每秒发送一个ping包,但是每个延迟5秒。 最后5个数据包还没有返回,但是如果你没有终止ping,它们将返回。

试试做:ping -c 10 192.168.0.210