首页/系统/Linux 运维命令速查/tc netem 模拟网络劣化
网络命令82 条

tc netem 模拟网络劣化

用 netem 在本地接口注入延迟/丢包/抖动:验证应用在弱网下的表现,测试超时与重试逻辑的利器。

Linux 运维命令速查系统更新于 2026-10-13

netem 模拟弱网

netem 是流量控制体系里的网络模拟模块,能在本机出口方向注入延迟、抖动、丢包、乱序与限速,用来复现弱网环境。有了它,超时设置、重试策略、断线重连这些逻辑不必等到真实网络变差才能验证。它作用在指定网卡的排队规则上,配置立即生效且默认不持久。

基本信息

适用平台Linux(iproute2,需要内核支持网络模拟模块)
语法tc qdisc {add | del | show} dev 接口 root netem 参数
常用参数delay 延迟、loss 丢包、duplicate 重复、corrupt 损坏、reorder 乱序、rate 限速
作用方向默认只影响从本机发出的流量

典型使用场景

  • 验证客户端在 200 毫秒延迟下是否还能正常交互
  • 测试接口重试与超时配置是否合理
  • 复现丢包导致的连接重置、重传放大等问题
  • 验证音视频或长连接在抖动网络中的表现
  • 给容量评估提供保守条件下的性能数据

常用示例

常用示例
tc qdisc add dev lo root netem delay 100ms            # 环回加 100 毫秒延迟
tc qdisc add dev eth0 root netem delay 50ms 10ms loss 1%   # 延迟抖动加 1% 丢包
tc qdisc add dev eth0 root netem loss 5% reorder 25%   # 丢包与乱序组合
tc qdisc add dev eth0 root netem rate 1mbit            # 限速到 1 兆比特每秒
tc qdisc show dev eth0                                 # 查看当前规则
tc -s qdisc show dev eth0                              # 带统计:看丢包与延迟计数
tc qdisc del dev eth0 root                             # 实验结束务必删除

参数逐项读法

参数作用注意
delay固定延迟,可追加抖动与相关性抖动过大会掩盖其他现象的规律
loss按比例丢包从 1% 量级开始,大幅丢包会直接打断会话
duplicate按比例复制报文模拟重复交付,测试幂等性
corrupt按比例损坏报文内容用于验证校验与重传逻辑
reorder按比例乱序发送与延迟配合更接近真实网络
rate限制出口带宽影响所有经过该网卡的流量
规则会立即作用于该网卡的所有出站流量:在远程服务器上加延迟,很可能把自己的登录会话一起拖慢,操作前确保有其它手段能登录回去。

实验纪律

  • 优先在环回接口或测试环境做,不要直接在生产网卡上试参数
  • 先在低幅度下验证方法有效,再逐步加严
  • 实验前后都记录一次规则输出,作为清理依据
  • 清理时显式删除规则并复核,避免残留影响后续排查
  • 把实验参数与结论写进记录,别人才能复现
规则默认不持久,重启即消失;如果机器上有其它工具把规则写入持久配置,要一并检查,否则会被重新加载回来。

易错点

  • 规则影响该网卡所有出站流量,远程操作时可能把自己的连接一并拖慢甚至断开
  • 实验后忘记删除规则,残留的延迟与丢包会在后续排查中制造大量误判
  • 只在出口方向生效,测试自己的服务时需要想清楚在哪个接口、哪个方向加
  • 多层排队规则与流量分类组合复杂,未经演练直接在生产网卡操作容易造成大范围影响

数据来源与参考

  • man 8 tc-netem(iproute2 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌