直接在目标网卡用 tc 配置 netem 可实现高延迟与高丢包弱网压测,关键在于精准配置、稳定生效与彻底清理;需先确认网卡名、加载 sch_netem 模块、安装 iproute2,再按需设置延迟抖动分布、丢包率及相关性,最后验证并用 tc qdisc del 清理。

直接在目标网卡上用 tc 配置 netem 规则,就能实现高延迟与高丢包的弱网压测。关键不是“能不能”,而是“怎么配得准、生效稳、清理干净”。
确认环境与网卡设备
先查清你要操作的物理网卡名(如 eth0、ens33 或 enp0s3),运行:
-
ip link show或ls /sys/class/net/查可用接口 -
lsmod | grep sch_netem确认内核已加载 netem 模块;若无输出,执行sudo modprobe sch_netem - 确保
iproute2已安装(Ubuntu/Debian:sudo apt install iproute2;CentOS/RHEL:sudo yum install iproute)
配置高延迟(含抖动与分布)
单纯设固定延迟不够真实,建议加入抖动和分布模型:
- 固定 300ms 延迟:
sudo tc qdisc replace dev eth0 root netem delay 300ms - 300ms ± 50ms 抖动(模拟波动):
sudo tc qdisc replace dev eth0 root netem delay 300ms 50ms - 叠加相关性(让相邻包延迟更接近):
sudo tc qdisc replace dev eth0 root netem delay 300ms 50ms 40% - 使用正态分布更贴近真实网络:
sudo tc qdisc replace dev eth0 root netem delay 300ms 50ms distribution normal
配置高丢包(含相关性与组合)
高丢包需注意丢包率数值与行为建模:
- 单独 20% 随机丢包:
sudo tc qdisc replace dev eth0 root netem loss 20% - 20% 丢包 + 60% 相关性(易出现连续丢包):
sudo tc qdisc replace dev eth0 root netem loss 20% 60% - 与延迟组合(先延后丢,符合实际路径):
sudo tc qdisc replace dev eth0 root netem delay 300ms 50ms loss 20% 60% - 极端场景(如模拟严重拥塞):
sudo tc qdisc replace dev eth0 root netem loss 80% 70%
验证与清理要点
配置后必须验证是否生效,并留意两个易错细节:
- 用
ping -c 10 www.baidu.com观察平均延迟与丢包率;用mtr --report www.baidu.com看逐跳表现 - 查看当前规则:
sudo tc qdisc show dev eth0;看统计详情:sudo tc -s qdisc show dev eth0 - 规则只影响新建立的连接(已有 SSH/curl 连接不会突变),压测前务必发起新请求
- 测试完立即清除:
sudo tc qdisc del dev eth0 root(不是del netem,整条 root 规则一并删)

















