当前位置: 首页 > news >正文

linux服务器traffic control的使用

文章目录

  • 一、核心组件与原理
  • 二、配置实战:HTB限速示例
  • 三、高级技巧
  • 四、监控与维护
  • 五、常见问题解决
  • 六、QDisc 类型对比

流量控制(Traffic Control,TC)可以用于在测试过程中模拟服务器网络异常场景,测试系统的高可用用性

一、核心组件与原理

  1. 队列规则(qdisc)
    • 作用:管理数据包发送顺序和速率,分为无类(Classless)和分类(Classful)两类。
    • 常用类型:

    • htb(分层令牌桶):支持带宽分配和借用,适合复杂限速。
    • sfq(随机公平队列):避免单一连接垄断带宽,适用于子类调度。
    • netem:模拟网络延迟、丢包等场景。

    • 默认规则:pfifo_fast(基于TOS的三波段优先级队列)。

  2. 分类(class)
    • 在分类qdisc(如HTB)下创建子类,为不同流量分配独立带宽。

    • 示例:根类设定总带宽,子类划分具体速率(如rate 5mbit)。

  3. 过滤器(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。

三、高级技巧

  1. 突发流量控制
    通过burst参数允许瞬时突发:
tc class add dev eth0 parent 1:1 classid 1:30 htb rate 2mbit burst 50k ceil 4mbit

burst定义令牌桶大小,平滑短时流量高峰。

  1. 多级调度与公平性
    为子类添加sfq防止单一连接占满带宽:
   tc qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10

perturb表示每10秒重置哈希算法,优化公平性。

  1. 流量模拟测试
    使用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(带宽趋势)辅助验证效果。

五、常见问题解决

  1. 规则未生效
    • 检查网卡名(如eth0 vs ens18)。
    • 确认内核模块加载:lsmod | grep sch_htb。
    • 验证过滤器匹配(如端口/IP是否正确)。

  2. 配置持久化
    • Debian/Ubuntu:写入/etc/network/interfaces。
    • RHEL/CentOS:保存到/etc/sysconfig/network-scripts/ifcfg-eth0。

  3. 替代工具
    • 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监控数据,逐步优化参数。

http://www.lryc.cn/news/589696.html

相关文章:

  • RAG的文档问答系统-PYTHON
  • 微信小程序141~150
  • Swift 条件语句
  • Excel转PDF的三种方法
  • 【iOS】源码阅读(六)——方法交换
  • 数字魔方--玩转魔方的助手
  • 跟着Nature正刊学作图:回归曲线+散点图
  • Promise与Axios:异步编程
  • 基于CentOS的分布式GitLab+Jenkins+Docker架构:企业级CI/CD流水线实战全记录
  • MySQL 8.0 OCP 1Z0-908 题目解析(27)
  • WAN技术
  • ollama快速部署使用(windows版)
  • 【Java】【力扣】101.对称二叉树
  • Spring之核心容器(IoC,DI,基本操作)详解
  • 中国旅行社协会在京召开“文旅人工智能应用研讨会”,助力文旅创新发展
  • python —— 真二
  • 广州邮科光纤交换机的应用:网络世界中的幕后核心
  • 【Qt开发】Qt的背景介绍(二)-> 搭建Qt开发环境
  • SAP中批量处理角色(复制、修改、上载,生成)
  • Apache IoTDB(1):时序数据库介绍与单机版安装部署指南
  • Clip微调系列:《CLIP-Adapter: Better Vision-Language Models with FeatureAdapters》
  • 【Qt+error】error: use of undeclared identifier ‘MainWindow
  • QT技巧之快速搭建串口收发平台
  • C++ -- STL-- List
  • 上公网-从内网到公网
  • C++ 中两个类之间的通信方式
  • Linux 文件系统实现层详解:原理、结构与驱动衔接
  • C++回顾 Day7
  • 企业级实时流处理:Kafka Streams完整解决方案
  • 基于Springboot+UniApp+Ai实现模拟面试小工具五:权限校验参数校验及日志功能实现