netem 模拟丢包乱序延迟
时间:2022-12-15 10:44:24.68 +0800 CST 浏览:1961

安装工具

# centos
yum install iproute-tc -y
# debian
apt-get install iproute2

使用方法

帮助信息

tc -h
tc qdisc help

查看配置

tc qdisc show dev bond0

删除配置

tc qdisc del dev bond0 root

监控网卡

# 将网卡加入监控列表
tc qdisc add dev bond0 root netem
# 移除网卡的监控
tc qdisc del dev bond0 root netem

模拟延迟

add :为指定网卡添加 Netem 配置
change: 修改已经存在的 Netem 配置到新的值
replace 替换已经存在的 Netem 配置的值
del:删除网卡上的 Netem 配置
如果已经添加过了,可以使用replacechange替代下面的add

# 添加固定延迟
tc qdisc add dev bond0 root netem delay 100ms
# 切换固定延迟
tc qdisc add dev bond0 root netem delay 150ms
# 固定延迟+小随机数
tc qdisc add dev bond0 root netem delay 100ms 20ms
# 固定延迟+小随机值+相关系数
# 因为网络状况是平滑变化的,短时间里相邻报文的延迟应该是近似的而不是完全随机
# 这个值是个百分比,如果为100%就退化到固定延迟的情况,如果为0%则退化到随机延迟的情况
tc qdisc add dev bond0 root netem delay 100ms 20ms 25%
# 遵循正态分布的延迟
# 为了更逼近现实情况,可以使用 distribution 参数来限制它的延迟分布模型
tc qdisc add dev bond0 root netem delay 100ms 20ms distribution normal

模拟丢包

# 这里为了测试效果设置较大(50%),实际情况丢包率可能很小(小于1%)
tc qdisc add dev bond0 root netem loss 50%
# 相关性
tc qdisc add dev bond0 root netem loss 1% 25%

模拟重复包

tc qdisc add dev bond0 root netem duplicate 50%

模拟错误包

tc qdisc add dev bond0 root netem corrupt 2%

模拟包乱序

# 固定的每隔一定数量的报文就乱序一次
# 使用 gap。 第5th包(5、10、15、20)立即发送,其它的包会延迟100毫秒
# 要想看到 ping 报文的乱序,我们要保证发送报文的间隔小于报文的延迟时间 100ms,这里用 -i 0.05 把发送间隔设置为 50ms
tc qdisc add dev bond0 root netem reorder 50% gap 5 delay 100ms
# 乱序是相对随机的,使用概率来选择乱序的报文
# 25% 的报文会立即发送,其他报文(1-50%)延迟 300ms 发送,相关系数是15%
tc qdisc add dev bond0 root netem reorder 25% 15% delay 300ms

控制包速(带宽)

# 设置 handle 1:0
tc qdisc add dev bond0 root handle 1:0 netem delay 100ms
# 查看网卡传输配置
tc qdisc show dev bond0
# 查看监控列表
tc -s qdisc ls dev bond0
# 查看网卡传输配置
tc qdisc show dev bond0

创建报错

Error: Specified qdisc not found.

# 查找是否已经安装内核模块
find /lib/modules -name sch_netem*
# 如果没有则安装
yum -y install kernel-modules-extra
modprobe sch_netem && lsmod | grep netem

Error: Specified qdisc kind is unknown.

# 这个错误是因为上面安装内核扩展,但是没有加载内核模块。
# 参考地址: https://samwho.dev/blog/emulating-bad-networks/

modprobe sch_netem && lsmod | grep netem

No distribution data for normal (/usr/lib/tc//normal.dist: No such file or directory)

# 64位机器上,或需先执行下面命令,做个软链接
ln -s /usr/lib64/tc /usr/lib/tc


如果这篇文章对你有所帮助,可以通过下边的“打赏”功能进行小额的打赏。

本网站部分内容来源于互联网,如有侵犯版权请来信告知,我们将立即处理。


来说两句吧