Linux Traffic Control (tc)的扩展 Network Emulation (netem)可以很方便的模拟网络不好的情况,一般新的linux内核中(>= 2.6)已经内置了这个工具,可以方便的进行测试。
本文罗列了了 tc的常用的模拟命令, 以备将来使用的时候查询。
主要参考了Linux基金会的官方介绍: netem
1.选择要监控网卡
首先要查看你的网卡信息,如: eth0
, 然后加入监控列表sudo tc qdisc add dev eth0 root netem
如果不想再监控,可以移除这个网卡sudo tc qdisc del dev eth0 root netem
如果想查看监控列表, 可以使用tc -s qdisc
qdisc
是queueing discipline
的缩写
2.模拟网络延迟
2.1 固定延迟
|
|
每个包都固定延迟100毫秒
, 设置好后你可以使用ping命令测试。
2.2 固定延迟+小随机值
|
|
延迟时间变成了 100ms ± 10ms
2.3 固定延迟+小随机值+相关系数
|
|
2.4 遵循正态分布的延迟
|
|
分布为normal、 pareto、 paretonormal等。
3.模拟丢包
随机丢弃一些包, 丢弃比率可以设置。丢失比最小为 232 = 0.0000000232%
|
|
上述命令会随机丢弃千分之一的包。
你还可以增加一个相关参数:
|
|
丢弃率为千分之三, 后一个的丢弃的可能性和前一个的可能性的25%相关
大专栏 Linux模拟网络异常的工具 - TC id="4-模拟包重复">4.模拟包重复
|
|
类似丢包的命令,上面命令产生百分之一的重复包。
5.模拟错误包
模拟随机噪音(错误包), 这个功能在 2.6.16以及以后的版本中才加入。它会在包中随机位置更改一个bit。
|
|
6.模拟包乱序
1) 方式一
使用 gap。 第5th包(5、10、15、20)立即发送,其它的包会延迟10毫秒。
|
|
2) 方式二
方式一乱序方式是固定的,可以预测的。方式二引入随机性:
|
|
25%的包会立即发送, 其它的包会延迟10毫秒。相关系数为50%。
新版的netem的包延迟设置也可能导致包乱序,如果包延迟的有一定的随机性的话:
|
|
因为延迟时间在100ms ± 75ms返回内, 就有可能第二包的延迟比第一个包的延迟小,先发出去。
7.控制包速(带宽)
没有直接命令,需要两条命令配合使用。
|
|