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 | 限制出口带宽 | 影响所有经过该网卡的流量 |
规则会立即作用于该网卡的所有出站流量:在远程服务器上加延迟,很可能把自己的登录会话一起拖慢,操作前确保有其它手段能登录回去。
实验纪律
- 优先在环回接口或测试环境做,不要直接在生产网卡上试参数
- 先在低幅度下验证方法有效,再逐步加严
- 实验前后都记录一次规则输出,作为清理依据
- 清理时显式删除规则并复核,避免残留影响后续排查
- 把实验参数与结论写进记录,别人才能复现
规则默认不持久,重启即消失;如果机器上有其它工具把规则写入持久配置,要一并检查,否则会被重新加载回来。