必须使用tc命令配合netem模块配置出向队列规则;先检查并清理现有root规则,确认netem模块已加载,再用tc qdisc add/replace dev eth0 root netem delay设置固定或带抖动的延迟,最后用tc qdisc del清理。

要在Linux系统中为指定网卡(如eth0)精确注入可控的网络延迟,用于弱网测试或故障复现,必须使用tc命令配合netem模块配置出向队列规则;直接修改内核参数或用iptables无法实现毫秒级延迟模拟。
确认前提条件
执行sudo tc qdisc show dev eth0检查当前是否已有root队列——若返回"RTNETLINK answers: No such file or directory",说明可安全添加;若已存在root规则,后续add会报错,必须先清除或用replace覆盖。
运行lsmod | grep netem验证netem内核模块已加载;未输出则需执行sudo modprobe netem启用,否则所有delay命令都会失败。
添加固定延迟
方法一:基础固定值
执行sudo tc qdisc add dev eth0 root netem delay 100ms,该命令使所有从eth0发出的数据包强制延迟100ms后发送。
这一步不可逆,且立即生效——已建立的TCP连接不会被注入延迟,但新发起的curl、ping、ssh连接会立刻体现。若误设过高延迟(如5000ms),会导致SSH卡死,务必提前开好第二个终端备用。
添加带抖动的随机延迟
第一步:用replace覆盖旧规则(避免重复添加报错)
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
执行sudo tc qdisc replace dev eth0 root netem delay 100ms 20ms,表示均值100ms、标准差20ms的正态分布延迟,实际延迟在80–120ms之间浮动。
第二步:增强真实感(可选)
追加相关性参数:sudo tc qdisc replace dev eth0 root netem delay 100ms 20ms 30%,让约30%的数据包呈现连续延迟波动,更贴近无线网络或拥塞链路表现。
注意:【30%不是丢包率,是延迟抖动的相关性系数】,数值越高,相邻包延迟越趋同,切勿与loss参数混淆。
验证与清理
用ping -c 5 www.baidu.com观察平均延迟是否显著升高;若无变化,检查是否输错了网卡名(如把ens33写成eth0)或规则被其他qdisc覆盖。
测试完毕后必须清理:执行sudo tc qdisc del dev eth0 root彻底移除所有netem规则,否则延迟会持续影响该网卡全部流量。










