Linux下用tc模拟网络延迟的核心是利用内核netem模块在网卡出口注入可控延迟,支持固定延迟、抖动、丢包等组合场景,并需注意远程操作安全防护。
Linux 下用 tc 模拟网络链路延迟,核心就是利用内核自带的 netem 模块配合 tc 工具,在指定网卡的出口方向注入可控延迟。它不依赖第三方软件,生效快、精度高,且能贴近真实网络波动特性。
先确保系统支持 netem:
lsmod | grep netem,有输出说明模块已加载modprobe sch_netem 手动加载ip link show 或 ip addr 查出实际网卡名(如 eth0、ens33、enp0s3),后续命令中需准确替换这是最常用也最直观的模拟方式,所有发往该网卡的 outbound 流量统一增加指定延迟:
sudo tc qdisc add dev eth0 root netem delay 100ms —— 添加 100 毫秒固定延迟ping -c 4 baidu.com,观察平均时间是否明显上升(注意:只影响本机发出的包,不影响收到的响应)sudo tc qdisc del dev eth0 root
纯固定延迟不够真实。公网延迟通常围绕基准值随机波动,可用抖动参数模拟:
sudo tc qdisc replace dev eth0 root netem delay 100ms 20ms —— 延迟在 80–120ms 之间均匀分布delay 100ms 20ms 30% 表示相邻数据包延迟变化倾向一致,适合模拟短时拥塞delay 100ms 20ms distribution normal,比均匀分布更符合实测延迟分布规律生产测试常需叠加多种异常。同时要注意远程操作风险:
sudo tc qdisc replace dev eth0 root netem delay 150ms 30ms loss 2%
echo "sudo tc qdisc del dev eth0 root" | at now + 5 minutes
sudo tc qdisc show dev eth0;查统计详情加 -s 参数