tc是Linux内核提供的网络流量控制工具,可模拟延迟、丢包、乱序和带宽限制;需加载sch_netem模块并安装iproute2;支持固定/随机延迟、独立或组合丢包、高级丢包模型;规则作用于出向流量且仅影响新连接。

在Linux系统中,tc(Traffic Control) 是内核提供的强大网络流量控制工具,可用于精确模拟真实网络环境中的延迟、丢包、乱序、带宽限制等行为,非常适合网络应用测试、协议调优和故障复现。
一、确认内核支持并安装必要工具
大多数现代Linux发行版默认已启用 sch_netem 模块(netem 是 tc 的核心模拟队列规则),但仍建议验证:
- 运行
lsmod | grep sch_netem,若无输出,执行sudo modprobe sch_netem加载模块 - 确保已安装
iproute2包(含tc命令),Ubuntu/Debian 下用sudo apt install iproute2,CentOS/RHEL 用sudo yum install iproute
二、基础延迟模拟(固定与随机)
以出向流量(egress)为例,对网卡 eth0 添加 100ms 固定延迟:
sudo tc qdisc add dev eth0 root netem delay 100ms
如需模拟抖动(如均值100ms ± 20ms),可加随机分布:
sudo tc qdisc replace dev eth0 root netem delay 100ms 20ms
注意:replace 可安全覆盖已有规则;若要清除所有规则,使用 sudo tc qdisc del dev eth0 root。
三、丢包率设置(独立或与延迟组合)
单独添加 5% 丢包:
sudo tc qdisc replace dev eth0 root netem loss 5%
更贴近实际网络——组合延迟与丢包(先延迟再丢包):
sudo tc qdisc replace dev eth0 root netem delay 100ms 20ms loss 3%
支持高级丢包模型,例如基于伯努利过程的随机丢包(默认)、或相关性丢包(模拟突发丢包):
- 2% 丢包 + 25% 相关性(连续丢包倾向增强):
loss 2% 25% - 也可用
loss state或loss gemodel实现更复杂信道建模
四、验证与监控效果
使用标准工具观察效果:
-
ping -c 5 www.example.com查看平均延迟与丢包显示 -
mtr --report www.example.com获取逐跳延迟与丢包统计 - 查看当前规则:
sudo tc qdisc show dev eth0 - 查看详细配置(含统计):
sudo tc -s qdisc show dev eth0
注意:tc 规则作用于网卡出方向,若测试本机发起的连接(如 curl),延迟/丢包体现在响应路径上;如需影响入向流量,需借助 ifb 虚拟设备重定向,操作略复杂,一般测试场景用出向已足够。
不复杂但容易忽略:规则只对新建立的连接生效,已存在的 TCP 连接不会被立即“注入”延迟;建议在配置后发起新请求进行验证。需要长期稳定模拟时,可将 tc 命令写入启动脚本或 systemd service。










