51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Linux下如何模拟网络延迟

为了测试程序在弱网环境下的表现,通常需要创造一个"不那么稳定"的网络环境,但这种模拟十分不好控制变量,比如希望控制网络延迟在700ms时,现实环境则是难以实现的,那有什么解决的办法呢?

可以在Linux下使用tc命令来模拟延迟。

配置网络延迟700ms

tc qdisc add dev eth0 root netem delay 700ms

配置后,测试网络

[root@primary linuxscript]# ping baidu.com
PING baidu.com (110.242.68.66) 56(84) bytes of data.
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=1 ttl=251 time=710 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=2 ttl=251 time=710 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=3 ttl=251 time=710 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=4 ttl=251 time=710 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=5 ttl=251 time=710 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=6 ttl=251 time=710 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=7 ttl=251 time=710 ms
^C
--- baidu.com ping statistics ---
8 packets transmitted, 7 received, 12% packet loss, time 7414ms
rtt min/avg/max/mdev = 710.051/710.084/710.130/0.901 ms

可以看到网络延迟为710ms,然后,删除该网络延迟

tc qdisc del dev eth0 root netem delay 700ms

再次测试

[root@primary linuxscript]# ping baidu.com
PING baidu.com (110.242.68.66) 56(84) bytes of data.
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=1 ttl=251 time=10.0 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=2 ttl=251 time=10.1 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=3 ttl=251 time=10.1 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=4 ttl=251 time=10.0 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=5 ttl=251 time=10.0 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=6 ttl=251 time=10.1 ms
^C
--- baidu.com ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5006ms
rtt min/avg/max/mdev = 10.008/10.077/10.123/0.044 ms

可以看到正常情况下的网络延迟为10ms。

注意
命令中的eth0是所配置与测试的网卡名称。

赞(1)
未经允许不得转载:工具盒子 » Linux下如何模拟网络延迟