Linux 服务器模拟弱网场景

在实际工作中,有些对网络质量高敏感型的场景,服务上线前需要进行弱网环境下的测试,这个时候可以使用 tc 流控工具进行模拟弱网情况,tc工具主要有两大部分功能: (1). 配合netem工具,模拟网络延迟,丢包,包重复,包损坏,包乱序; (2). 做流量控制,限制网卡传输速率在指定值以下,对数据包按照源IP或者其它策略分配带宽。

模拟网络延时, 操作网卡 eth0, 让传输延迟 delay 200ms:

tc qdisc add dev eth0 root netem delay 200ms

使用命令之前:

使用命令之后:

可以看到平均延时多出了 200ms。

查看 eth0 的队列状况:

删除 之前延时配置:

上述命令对于 IPv6 同样适用,演示如下,执行命令之前:

执行命令

tc qdisc add dev he-ipv6 root netem delay 100ms 50ms 

之后,它表示传输时延时在 50~150ms 之间 :

当前网络抖动较大,所以执行命令后,结果不是特别准确,不过可以看出,延时确实是有效果的,同样的,删除该命令:

在网络比较稳定的网络中重复上述命令,让传输延时100ms,波动范围在30ms,即传输延时在 70 ~130ms 之间,执行命令如下:

Ping结果如下:

可以看到结果符合预期,传输延时的标准差明显增大,为了增强这种波动的随机性,还可以执行如下命令:

tc qdisc add dev eth0 root netem delay 100ms 30ms 50%

表示将传输延时设置为 100ms,同时有 50%的包在 70~130ms之间发送,其它命令格式基本一致:

需要注意的是 tc 工具对网卡延时,丢包的操作是双向的,在执行 tc 命令之间,两台机器 互相 ping 延时如下:

现在在左边这台机器上执行 tc 命令:

再进行互 ping 操作:

再进行丢包率的双向测试, 将丢包率设置为 30%:

两台机器互相 Ping:

可以看到双向 ping 都丢包了大概在 30%左右, 所以 tc 命令配合 netem 命令时,对网卡的操作是双向的。

发表回复

Your email address will not be published. Required fields are marked *.

Copyright © 2026 晋坤 的博客. All Right Reserved.