Linux TC:一个能控制发送端流量的工具,模拟网络异常的方法
转载自 linux下使用tc(Traffic Control)流量控制命令模拟网络延迟和丢包
上一篇原理篇,介绍了TC流量控制的四种方式:SHAPING(对发出的流量进行带宽的限定)、SCHEDULING(对发出的流量按照优先级分配带宽)、POLICING(对接收的流量进行带宽限定)、DROPPING(对发出和接收的流量超过某个带宽时丢弃该数据包)。
还介绍了流量的处理的三种对象控制:qdisc(内核按照数据包的排队规则,将数据包放入队列,交给网卡驱动模块,系统默认规则为pfifo_fast )、class(类别)和filter(过滤器)。
本篇主要针对qdisc,进行模拟网络异常。
0)查看网卡配置
# tc qdisc show dev eth0
该命令查看并显示 eth0网卡的相关传输配置
1)模拟网络延迟传输
# tc qdisc add dev eth0 root netem delay 100ms
该命令将 eth0 网卡的传输设置为延迟 100 毫秒发送。
2)模拟网络延迟波动
# tc qdisc add dev eth0 root netem delay 100ms 10ms
该命令将 eth0 网卡的传输设置为延迟 100ms ± 10ms (90 ~ 110 ms 之间的任意值)发送。
3)模拟网络延迟波动随机性
# tc qdisc add dev eth0 root netem delay 100ms 10ms 30%
该命令将 eth0 网卡的传输设置为 100ms ,同时,大约有 30% 的包会延迟 ± 10ms 发送。
4)模拟网络丢包:
# tc qdisc add dev eth0 root netem loss 1%
该命令将 eth0 网卡的传输设置为随机丢掉 1% 的数据包
5)模拟网络丢包成功率
# tc qdisc add dev eth0 root netem loss 1% 30%
该命令将 eth0 网卡的传输设置为随机丢掉 1% 的数据包,成功率为 30%
6)模拟包重复
# tc qdisc add dev eth0 root netem duplicate 1%
该命令将 eth0 网卡的传输设置为随机产生 1% 的重复数据包
7)模拟包损坏
# tc qdisc add dev eth0 root netem corrupt 0.2%
该命令将 eth0 网卡的传输设置为随机产生 0.2% 的损坏的数据包 (内核版本需在 2.6.16 以上)。
8)模拟包乱序
# tc qdisc change dev eth0 root netem delay 10ms reorder 25% 50%
该命令将 eth0 网卡的传输设置为:有 25% 的数据包(50%相关)会被立即发送,其他的延迟10 秒。
新版本中如下命令也会在一定程度上打乱发包的次序 # tc qdisc add dev eth0 root netem delay 100ms 10ms
9)删除相关配置
# tc qdisc del dev eth0 root netem
10)查看丢包率
# tc -s qdisc show dev eth0