KCC:在 BBR 思路上的一次探索
2026/6/14 19:06:54 网站建设 项目流程

KCC:在 BBR 思路上的一次探索

0. 算法与状态机

拥塞控制算法的身份由状态机界定。Tahoe/Reno、CUBIC、BBR 各有其独特的状态机。KCC 与 BBR 的关系类似 CUBIC 与 BIC——保留外层框架,替换/增加核心部件,形成独立算法。

KCC 保留 BBR 的四状态命名(STARTUP/DRAIN/PROBE_BW/PROBE_RTT),但做了两处关键改动:

  1. 卡尔曼滤波器替代滑动窗口 min_rtt 估计;
  2. 新增ACK 聚合置信度状态机(四状态:IDLE→SUSPECTED→CONFIRMED→TRUSTED)。

同时,DRAIN 和 PROBE_RTT 从必须执行变为按需执行,由内层状态机驱动。

作者对 BBR 的开创性贡献保持敬意,KCC 仅是在其基础上的可行性探索。


1. BBR 状态机回顾

full_bw_reached

inflight ≤ BDP

10s无min_rtt更新

200ms后

STARTUP

DRAIN

PROBE_BW

PROBE_RTT

  • DRAIN 和 PROBE_RTT必须执行(因为滑动窗口 min_rtt 需要排空才能得到真实值)

2. KCC 的两处改动

2.1 卡尔曼滤波器替代滑动窗口 min_rtt

建模x k = x k − 1 + w k , w k ∼ N ( 0 , Q ) x_k = x_{k-1} + w_k,\; w_k\sim N(0,Q)xk=xk1+wk,wkN(0,Q)z k = x k + v k , v k ∼ N ( 0 , R ) z_k = x_k + v_k,\; v_k\sim N(0,R)zk=xk+vk,vkN(0,R)
x xx:真实传播延迟,z zz:观测 RTT。

关键内部变量x_est,p_est(协方差),sample_cnt,jitter_ewma,qdelay_avg,qboost_cdwn,consec_reject_cnt

预测-更新

// 预测-更新迭代p_est=p_est+Q;K=p_est/(p_est+R_dynamic);x_est=x_est+K*(rtt_sample-x_est);p_est=(1-K)*p_est;

增益K KK的物理含义R d y n a m i c R_{dynamic}Rdynamic放大 →K → 0 K\to0K0→ 忽略被污染的 RTT 样本。

卡尔曼自身状态机

首RTT

p_est < 500

|rtt_sample - x_est| > 4ms && cdwn==0

重置p_est, cdwn=15

p_est > 250000

触发PROBE_RTT安全网

ColdStart

CatchUp

Converged

QBoost

Diverged

  • Converged 时通知外层:可跳过 DRAIN、抑制 PROBE_RTT。
  • 连续异常拒绝超过 25 次强制接受,防止滤波器锁定。

2.2 ACK 聚合置信度状态机

BBR 无条件加extra_acked。KCC 用四状态评估信号可靠性:

enumkcc_agg_state{KCC_AGG_STATE_IDLE,// 总分 < 256KCC_AGG_STATE_SUSPECTED,// >=256KCC_AGG_STATE_CONFIRMED,// >=512KCC_AGG_STATE_TRUSTED,// >=768};

评分四因子(每因子 256 分,总分 1024):

  1. 卡尔曼收敛(p_est<500 && sample_cnt≥5
  2. 不在丢包恢复中
  3. 排队延迟低(RTT ≤ min_rtt + 2ms)
  4. extra_acked稳定(≤ 窗口最大值的 1.5 倍)

行为

  • IDLE/SUSPECTED:不补偿 cwnd
  • CONFIRMED/TRUSTED:补偿 cwnd,且动态放大卡尔曼R RR(最大 8 倍)
  • 补偿持续超过 8 RTT → 降级到 SUSPECTED
  • R RR缩放系数按比例平滑衰减:每轮 RTT 保留上一轮的 75%(即衰减掉 25% 的增量),约 4 轮回到基线

2.3 DRAIN 和 PROBE_RTT 变为按需

  • DRAIN:卡尔曼收敛且qdelay_avg < 1ms→ 跳过 DRAIN(转为额外 cruise)
  • PROBE_RTT:卡尔曼健康(p_est ≤ 250000)→ 完全抑制;仅发散时触发一次作为安全网

3. BBR vs KCC 对比

特性BBRKCC
RTT 估计器滑动窗口最小值(无状态)卡尔曼滤波(有状态,输出置信度)
额外状态机ACK 聚合置信度四状态
DRAIN 必须否(条件跳过)
PROBE_RTT 必须是(固定10s)健康时抑制,发散时按需
路径变化检测依赖 PROBE_RTT(~10s)Q-Boost(几个RTT)
ACK 聚合补偿无条件加 cwnd置信度门控 + 动态缩放 R
异常值处理动态阈值 + 连续拒绝保护
R 平滑衰减每轮保留75%,约4轮恢复

4. 定位

KCC 与 BBR 的关系,类似 CUBIC 与 BIC:继承外层框架,替换核心估计器,形成独立算法。因此可称为K‑BBRBBR‑K

在模型驱动这一纯粹路线上,KCC 延续了 BBR 的思想——用带宽和延迟直接驱动,而非堆砌规则。它与 Google BBRv2 的路线不同:后者引入大量硬性阈值(ECN、丢包率等),走向规则堆砌;KCC 则坚持用现代控制论(卡尔曼滤波、置信度评估)升级估计工具,保持模型的简洁与可解释性。

这是一种理想方向的探索,并不声称拥有 “BBR‑2” 的命名权。


GitHub: TCP KCC

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询