模拟延迟传输
tc qdisc add dev eth0 root netem daly 100ms
模拟网络,所有的报文延迟100ms发送
上面的命令中qdisc是排队规则,没有添加规则之前,因为是内网,所以ping延迟在1ms,添加延迟后,增加到100ms
在真实的网络环境中,我们通常很难看到非常稳定的时延,别杠内网,所以netem也考虑到这一点,模拟延迟参数中提供了控制延迟的时间分布的可选参数,完整的参数列表如下:
可以看到,除了TIME外,还有三个可选参数:- JITTTER:网络抖动,增加一个随机事件长度,让延迟事件出现在某个范围
- CORRELATION:相关系数,下一个报文延迟事件和上一个报文的相关系数
- distribution:延迟分布,可以选择的值有uniform、normal、pareto和paretonormal
而distribution则是通过正态分布的方式来模拟更符合真实网络情况,它的几个参数就是几种延迟分布方法,有兴趣的可以试一下
模拟丢包率
丢包在网络中是最常见的一种情况,丢包会导致重传,重传会增加网络链路的流量和延迟,Netem提供了loss参数,可以模拟丢包率
tc qdisc add dev eth0 root netem loss 50%
看下效果
和延迟类似,丢包率也有相关系数的参数可以设置,表示后一个报文丢包率和它前一个报文的相关性
tc qdisc add dev eth0 root netem loss 50% 25%
上面这个命令表示,丢包率是50%,并且当前报文丢弃的可能性和前一个报文相关性为25%
模拟包重复
模拟报文重复,用duplicate参数,报文重复和丢包的参数类似,就是重复率和相关性两个参数,比如随机产生50%重复的包
tc qdisc add dev eth0 root netem duplicate 50%
看下效果
相关性和其他参数一样,有兴趣可以测试
模拟包损坏
模拟报文损坏用参数corrupt,报文损坏和报文重复的参数也类似,比如随机产生30%损坏的报文
tc qdisc add dev eth0 root netem corrupt 30%
查看效果
可以从icmp_seq看到,损坏的报文,导致严重的丢包
模拟包乱序
我们知道TCP为了保证可靠传输,会在报文中添加序列号,确保被拆分的包能够到达后进行重组,那么最好的情况就是包能按序传输,减少重新排序的次数,虽然包乱序造成的影响没有上面几种严重,但是仍然是会经常遇到,netem同样提供了模拟包乱序的方法
模拟报文乱序和前面的参数不太一样,上面的操作都是针对单个报文的,而乱序则牵扯到多个报文重组的问题,所以Netem这里有两种方法来模拟乱序
第一种是固定的每隔一定数量的报文乱序一次
tc qdisc add dev eth0 root netem reorder 50% gap 3 delay 100ms
上面这个是每隔3个数据包正常发送,其他的数据包延迟100ms发送
第二种方法是更接近显示情况的,就是随机的,用概率来选择乱序的报文
tc qdisc change dev eth0 root netem reorder 50% 15% delay 300ms
看效果
上面这个就是50%的报文正常发送,其他报文延迟300ms发送
查看已配置过滤条件
测试的过程中,肯定需要查看当前配置了那些条件,通过tc的show指令可以进行查看
对于模拟弱网环境,排查问题,这个工具必不可少,赶紧收藏!
来源:本文转自公众号运维研习社。
近期好文: