Linux tc: 模拟网络异常的工具

摘要:https://colobu.com/2017/04/21/tc-introduction/

首先要查看你的网卡信息,如: eth0,然后将这个网卡加入监控列表 sudo tc qdisc add dev eth0 root netem。

如果不想再监控,可以移除这个网卡 sudo tc qdisc del dev eth0 root netem

如果想查看监控列表, 可以使用tc -s qdisc

qdisc是queueing discipline的缩写。

模拟网络延迟
  • 固定延迟
    每个包都固定延迟 100毫秒, 设置好后你可以使用ping命令测试。
tc qdisc add dev eth0 root netem delay 100ms
  • 固定延迟+小随机值
    延迟时间变成了 100ms ± 10ms。
tc qdisc change dev eth0 root netem delay 100ms 10ms
  • 固定延迟+小随机值+相关系数
tc qdisc change dev eth0 root netem delay 100ms 10ms 25%
This causes the added delay to be 100ms ± 10ms with the next random element depending 25% on the last one. This isn't true statistical correlation, but an approximation.
  • 遵循正态分布的延迟
    典型情况下延迟并不是均分分布的,而是遵循类似正态分布的规律。所以你可以使用某种分布模拟延迟。
    分布为normal、 pareto、 paretonormal等。
tc qdisc change dev eth0 root netem delay 100ms 20ms distribution normal
模拟丢包
  • 随机丢弃一些包
    丢弃比率可以设置。丢失比最小为 232 = 0.0000000232%。
    设置随机丢弃千分之一的包。
tc qdisc change dev eth0 root netem loss 0.1%
  • 增加一个相关参数:
    丢弃率为千分之三, 后一个的丢弃的可能性和前一个的可能性的25%相关:
    Probn = .25 Probn-1 + .75 Random
tc qdisc change dev eth0 root netem loss 0.3% 25%
模拟包重复

类似丢包的命令,下面命令产生百分之一的重复包。

tc qdisc change dev eth0 root netem duplicate 1%
模拟错误包

模拟随机噪音(错误包), 这个功能在 2.6.16以及以后的版本中才加入。它会在包中随机位置更改一个bit。

tc qdisc change dev eth0 root netem corrupt 0.1%
模拟包乱序

1) 方式一
使用 gap。 第5th包(5、10、15、20)立即发送,其它的包会延迟10毫秒。

tc qdisc change dev eth0 root netem gap 5 delay 10ms

2) 方式二
方式一乱序方式是固定的,可以预测的。方式二引入随机性:

tc qdisc change dev eth0 root netem delay 10ms reorder 25% 50%

25%的包会立即发送, 其它的包会延迟10毫秒。相关系数为50%。

新版的netem的包延迟设置也可能导致包乱序,如果包延迟的有一定的随机性的话:

tc qdisc change dev eth0 root netem delay 100ms 75ms

因为延迟时间在100ms ± 75ms返回内, 就有可能第二包的延迟比第一个包的延迟小,先发出去。

控制包速(带宽)

没有直接命令,需要两条命令配合使用。

# tc qdisc add dev eth0 root handle 1:0 netem delay 100ms
# tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate 256kbit buffer 1600 limit 3000
# tc -s qdisc ls dev eth0
qdisc netem 1: limit 1000 delay 100.0ms
 Sent 0 bytes 0 pkts (dropped 0, overlimits 0 )
qdisc tbf 10: rate 256Kbit burst 1599b lat 26.6ms
 Sent 0 bytes 0 pkts (dropped 0, overlimits 0 )
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值