二、TC限速核心原理

TC(Traffic Control)的限速能力建立在三种核心算法之上:令牌桶(TBF)、层级令牌桶(HTB)和随机公平队列(SFQ)。理解这三者的原理,是掌握 TC 限速配置与回滚验证的基础。

2.1 令牌桶算法(TBF)原理

TBF( Bucket Filter)是最基础的流量整形算法,它通过“桶”和“令牌”的机制控制数据包的发送速率。核心思想是:只有获取到令牌的数据包才能被发送。

关键参数:
  • rate(速率):桶生成令牌的速度,即平均限速值,单位 bps。
  • burst(突发量):桶的最大容量,允许瞬时超过 rate 的流量大小,单位 bytes。
  • latency(延迟):数据包在队列中等待的最大时间,超过则丢弃。
令牌桶(TBF)工作原理 令牌桶 容量 = burst 生成速率 = rate 数据包到达 获取令牌 有令牌? (burst 未耗尽) 发送 丢弃
回滚验证要点:在回滚测试中,TBF 的 burst 参数直接影响瞬时流量尖峰是否被允许。如果回滚后业务出现突发丢包,应检查 burst 是否设置过小。

2.2 HTB(Hierarchical Bucket)层级限速原理

HTB 在 TBF 基础上引入了层级结构,允许将总带宽划分为多个子类(class),每个子类可以独立设置限速参数,并支持带宽借用(borrow)机制。这是企业级限速场景中最常用的 qdisc。

参数 含义 典型值
rate 保证带宽(最小保障速率) 10mbit
ceil 最大带宽上限(可借用达到的峰值) 20mbit
prio 优先级(0-7,数值越小优先级越高) 0
burst 突发量,允许瞬时超过 rate 的流量 15k
cburst ceil 对应的突发量 15k
HTB 层级限速结构 根:1:0 总带宽 100mbit class 1:1(VoIP) rate=30mbit ceil=50mbit prio=0 class 1:2(Web) rate=40mbit ceil=80mbit prio=1 class 1:3(下载) rate=10mbit ceil=30mbit prio=2 带宽借用(borrow) HTB 核心特性 • 每个子类有独立 rate(保证带宽)和 ceil(上限) • 空闲带宽按优先级(prio)从高到低借用
回滚验证陷阱:HTB 的 ceil 参数在回滚后容易被忽略。如果回滚后业务带宽不足,请检查 ceil 是否被错误地设置得比 rate 还低,或者子类优先级(prio)配置不当导致高优先级流量饿死低优先级。

2.3 SFQ(Stochastic Fairness Queueing)公平队列原理

SFQ 是一种公平调度算法,它通过哈希将流量分配到多个 FIFO 队列中,轮询发送每个队列的数据包,从而保证不同会话(session)之间公平共享带宽,防止单一连接霸占链路。

SFQ 关键机制:
  • 哈希扰动(perturb):每隔 perturb 秒重新计算哈希,防止恶意用户通过构造相同哈希值抢占带宽。
  • 量子(quantum):每个队列每次轮询发送的字节数,默认 1 个 MTU(1514 bytes)。
  • 队列数量:默认 1024 个哈希桶,每个桶对应一个 FIFO 队列。
SFQ 公平队列调度流程 输入 数据包 流 1~N 哈希 (src_ip, dst_ip, port) 队列 1 队列 2 队列 3 队列 4 ...... 队列 N 轮询调度 Round Robin 输出
回滚验证场景:当回滚后出现某个 TCP 连接延迟极高而其他连接正常时,应检查 SFQ 的 perturb 参数是否被设置为 0(禁用哈希扰动),导致恶意哈希碰撞。建议 perturb 设置为 10 秒。

三种算法对比总结

算法 核心作用 适用场景 回滚关注点
TBF 单流速率整形 简单限速、接口级限速 burst 是否过小导致突发丢包
HTB 多层级带宽分配与借用 多业务 QoS、企业出口限速 ceil 与 rate 关系、优先级配置
SFQ 公平队列调度 防止单连接霸占、P2P 限速 perturb 是否启用、队列数量
回滚验证最佳实践:在回滚操作前,务必使用 tc -s qdisc show dev eth0 和 tc -s class show dev eth0 记录当前 qdisc 的统计信息(发送字节、丢包数、overlimits 等)。回滚后对比这些统计值,可以快速定位限速参数是否被正确恢复。