linux服务器traffic control的使用
文章目录
- 一、核心组件与原理
- 二、配置实战:HTB限速示例
- 三、高级技巧
- 四、监控与维护
- 五、常见问题解决
- 六、QDisc 类型对比
流量控制(Traffic Control,TC)可以用于在测试过程中模拟服务器网络异常场景,测试系统的高可用用性
一、核心组件与原理
-
队列规则(qdisc)
• 作用:管理数据包发送顺序和速率,分为无类(Classless)和分类(Classful)两类。
• 常用类型:- htb(分层令牌桶):支持带宽分配和借用,适合复杂限速。
- sfq(随机公平队列):避免单一连接垄断带宽,适用于子类调度。
- netem:模拟网络延迟、丢包等场景。
• 默认规则:pfifo_fast(基于TOS的三波段优先级队列)。
-
分类(class)
• 在分类qdisc(如HTB)下创建子类,为不同流量分配独立带宽。• 示例:根类设定总带宽,子类划分具体速率(如rate 5mbit)。
-
过滤器(filter)
• 将流量分类到指定class,匹配条件包括IP、端口、协议等。• 常用匹配器:
◦ u32:基于IP/端口过滤(如match ip dport 80匹配HTTP流量)。
◦ fwmark:结合iptables标记流量。
二、配置实战:HTB限速示例
场景:限制eth0总带宽为10Mbps,并为HTTP流量分配5Mbps固定带宽。
# 清除现有规则
tc qdisc del dev eth0 root# 创建HTB根队列
tc qdisc add dev eth0 root handle 1: htb default 20# 设置根类(总带宽10Mbps)
tc class add dev eth0 parent 1: classid 1:1 htb rate 10mbit ceil 10mbit# 创建HTTP子类(5Mbps)
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 5mbit ceil 5mbit# 创建其他流量子类(基础5Mbps,可借用至10Mbps)
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 5mbit ceil 10mbit# 将80端口的流量定向到HTTP子类
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:10
参数说明:
• rate:保证带宽;ceil:最大可用带宽。
• default 20:未分类流量默认发送到类1:20。
三、高级技巧
- 突发流量控制
通过burst参数允许瞬时突发:
tc class add dev eth0 parent 1:1 classid 1:30 htb rate 2mbit burst 50k ceil 4mbit
burst定义令牌桶大小,平滑短时流量高峰。
- 多级调度与公平性
为子类添加sfq防止单一连接占满带宽:
tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10
perturb表示每10秒重置哈希算法,优化公平性。
- 流量模拟测试
使用netem模拟网络异常:
# 添加100ms延迟 + 10%丢包
tc qdisc add dev eth0 root netem delay 100ms loss 10%
# 添加100ms延时,波动率为20%,波动时间为 10ms(默认为0)
tc qdisc add dev eth0 root netem delay 100ms 10ms 20%
# 设置随机丢包数为30%
tc qdisc add dev eth0 root netem loss 30%
# 设置随机产生重复数据包20%
tc qdisc add dev eth0 root netem duplicate 30%
# 设置随机产生损坏数据包30%
tc qdisc add dev eth0 root netem corrupt 30%
# 设置随机产生乱序包,乱序包率30%,数据包相关性50%,乱序延时时间10ms
tc qdisc change dev eth0 root netem delay 10ms reorder 30% 50%
#查看已经增加的规则
tc qdisc show | grep netem#测试完成后删除规则:
tc qdisc del dev eth0 root
四、监控与维护
• 查看实时统计:
tc -s qdisc show dev eth0 # 队列状态
tc -s class show dev eth0 # 分类流量详情
• 可视化工具:
iftop(实时流量)、nload(带宽趋势)辅助验证效果。
五、常见问题解决
-
规则未生效
• 检查网卡名(如eth0 vs ens18)。
• 确认内核模块加载:lsmod | grep sch_htb。
• 验证过滤器匹配(如端口/IP是否正确)。 -
配置持久化
• Debian/Ubuntu:写入/etc/network/interfaces。
• RHEL/CentOS:保存到/etc/sysconfig/network-scripts/ifcfg-eth0。 -
替代工具
• wondershaper:简化HTB配置(例:wondershaper eth0 10000 10000限制上下行10Mbps)。
• trickle:针对单进程限速(例:trickle -d 200 -u 100 wget URL)。
六、QDisc 类型对比
类型 适用场景 特点
htb 动态带宽分配、借用量管理 支持分层、可设置ceil借用带宽
sfq 保证多连接公平性 自动分散会话流量,避免垄断
tbf 简单速率限制 基于令牌桶,适合固定速率场景
netem 网络环境模拟(延迟/丢包) 测试系统在异常网络下的表现
通过合理组合qdisc、class和filter,可实现从基础限速到复杂QoS策略的全方位流量管理。建议初次配置后使用tc -s监控数据,逐步优化参数。