长肥网络下的单流拥塞控制对比:BBR vs KCC

长肥网络下的单流拥塞控制对比:BBR vs KCC

一、测试环境

1.1 网络拓扑

项目 详情
发送端 成都移动 1000M 家庭宽带(AS9808)
接收端 新加坡甲骨文云 AMD EPYC 7J13 64-Core Processor,480M 云网络带宽
测试时间 2026/06/24 22:40(晚高峰时段)
测试工具 iperf3 单流,持续 10 秒,重复 5 轮
基线 RTT 80ms(实测 ping 129.150.56.*)

1.2 基线延迟测量

bash 复制代码
C:\>ping 129.150.56.*

正在 Ping 129.150.56.* 具有 32 字节的数据:
来自 129.150.56.* 的回复: 字节=32 时间=80ms TTL=49
来自 129.150.56.* 的回复: 字节=32 时间=80ms TTL=49
来自 129.150.56.* 的回复: 字节=32 时间=80ms TTL=49
来自 129.150.56.* 的回复: 字节=32 时间=80ms TTL=49

129.150.56.* 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失)
往返行程的估计时间(以毫秒为单位):
    最短 = 80ms,最长 = 80ms,平均 = 80ms

成都到新加坡的 80ms RTT 构成了典型的**长肥网络(Long Fat Network,LFN)**特征:

  • RTT ≥ 80ms(远超局域网/城域网范畴)
  • 带宽延迟积(BDP)= 480Mbps × 0.08s ≈ 38.4 Mbits ≈ 4.8 MBytes
  • 这是深缓冲区场景的判定依据------瓶颈链路的标准 FIFO 队列深度通常为数倍 BDP(本例中 cwnd 峰值达到 30-48 MBytes,约为 BDP 的 6-10 倍,属典型深缓冲区)

二、BBR 测试数据(5轮)

第一轮

复制代码
[  5]   0.00-1.00   sec  31.1 MBytes   261 Mbits/sec    0   13.9 MBytes
[  5]   1.00-2.00   sec  50.1 MBytes   420 Mbits/sec    0   10.9 MBytes
[  5]   2.00-3.00   sec  61.0 MBytes   512 Mbits/sec    0   10.0 MBytes
[  5]   3.00-4.00   sec  58.2 MBytes   488 Mbits/sec    0   9.81 MBytes
[  5]   4.00-5.00   sec  58.5 MBytes   490 Mbits/sec    0   10.3 MBytes
[  5]   5.00-6.00   sec  56.9 MBytes   477 Mbits/sec    0   10.2 MBytes
[  5]   6.00-7.00   sec  57.9 MBytes   486 Mbits/sec    0   10.4 MBytes
[  5]   7.00-8.00   sec  58.5 MBytes   491 Mbits/sec    0   10.4 MBytes
[  5]   8.00-9.00   sec  58.1 MBytes   487 Mbits/sec    0   10.5 MBytes
[  5]   9.00-10.00  sec  55.5 MBytes   466 Mbits/sec    0   10.5 MBytes
[  5]  10.00-10.08  sec  5.62 MBytes   612 Mbits/sec    0   10.4 MBytes
[  5]   0.00-10.08  sec   551 MBytes   459 Mbits/sec    0

启动阶段 :首秒 261 Mbits/sec,第二秒升至 420 Mbits/sec,第三秒达到峰值 512 Mbits/sec。

稳态 :第 3-10 秒维持在 460-512 Mbits/sec 区间,cwnd 稳定在 10-14 MBytes。

总吞吐:459 Mbits/sec。

第二轮

复制代码
[  5]   0.00-1.00   sec   301 KBytes  2.46 Mbits/sec    0    138 KBytes
[  5]   1.00-2.00   sec  4.57 MBytes  38.4 Mbits/sec    0   2.44 MBytes
[  5]   2.00-3.00   sec  48.8 MBytes   409 Mbits/sec    0   37.5 MBytes
[  5]   3.00-4.00   sec  59.3 MBytes   498 Mbits/sec    0   38.7 MBytes
[  5]   4.00-5.00   sec  56.7 MBytes   476 Mbits/sec    0   28.2 MBytes
[  5]   5.00-6.00   sec  57.9 MBytes   485 Mbits/sec    0   28.7 MBytes
[  5]   6.00-7.00   sec  59.3 MBytes   497 Mbits/sec    0   28.8 MBytes
[  5]   7.00-8.00   sec  59.3 MBytes   497 Mbits/sec    0   27.6 MBytes
[  5]   8.00-9.00   sec  52.0 MBytes   436 Mbits/sec    1   12.7 MBytes
[  5]   9.00-10.01  sec  45.3 MBytes   375 Mbits/sec    0   27.6 MBytes
[  5]  10.01-10.24  sec  13.3 MBytes   487 Mbits/sec    0   27.6 MBytes
[  5]   0.00-10.24  sec   457 MBytes   374 Mbits/sec    1

异常 :首秒仅 2.46 Mbits/sec(接近断流),第二秒 38.4 Mbits/sec,第三秒才升至 409 Mbits/sec。

稳定性 :第 8 秒发生 1 次重传(Retr=1),且第 9 秒吞吐骤降至 375 Mbits/sec。

总吞吐374 Mbits/sec,为五轮最低。

第三轮

复制代码
[  5]   0.00-1.00   sec  28.3 MBytes   237 Mbits/sec    0   13.4 MBytes
[  5]   1.00-2.00   sec  60.1 MBytes   504 Mbits/sec    0   14.2 MBytes
[  5]   2.00-3.00   sec  50.0 MBytes   419 Mbits/sec    0   10.2 MBytes
[  5]   3.00-4.00   sec  56.9 MBytes   477 Mbits/sec    0   10.7 MBytes
[  5]   4.00-5.00   sec  57.3 MBytes   481 Mbits/sec    0   10.6 MBytes
[  5]   5.00-6.00   sec  59.6 MBytes   500 Mbits/sec    0   11.0 MBytes
[  5]   6.00-7.00   sec  57.1 MBytes   479 Mbits/sec    0   10.7 MBytes
[  5]   7.00-8.00   sec  57.7 MBytes   484 Mbits/sec    0   10.3 MBytes
[  5]   8.00-9.00   sec  57.4 MBytes   481 Mbits/sec    0   10.8 MBytes
[  5]   9.00-10.00  sec  58.5 MBytes   491 Mbits/sec    0   10.1 MBytes
[  5]  10.00-10.10  sec  5.98 MBytes   500 Mbits/sec    0   10.1 MBytes
[  5]   0.00-10.10  sec   549 MBytes   456 Mbits/sec    0

总吞吐:456 Mbits/sec。首秒 237 Mbits/sec,cwnd 稳定于 10-14 MBytes。

第四轮

复制代码
[  5]   0.00-1.00   sec  27.4 MBytes   230 Mbits/sec    0   13.5 MBytes
[  5]   1.00-2.00   sec  53.7 MBytes   451 Mbits/sec    0   15.8 MBytes
[  5]   2.00-3.00   sec  56.5 MBytes   474 Mbits/sec    0   10.2 MBytes
[  5]   3.00-4.00   sec  57.6 MBytes   483 Mbits/sec    0   11.1 MBytes
[  5]   4.00-5.01   sec  60.2 MBytes   499 Mbits/sec    0   11.1 MBytes
[  5]   5.01-6.00   sec  59.6 MBytes   506 Mbits/sec    0   10.8 MBytes
[  5]   6.00-7.00   sec  58.4 MBytes   490 Mbits/sec    0   11.0 MBytes
[  5]   7.00-8.00   sec  58.2 MBytes   488 Mbits/sec    0   10.8 MBytes
[  5]   8.00-9.00   sec  54.9 MBytes   461 Mbits/sec    0   10.8 MBytes
[  5]   9.00-10.00  sec  59.0 MBytes   495 Mbits/sec    0   11.1 MBytes
[  5]  10.00-10.08  sec  4.73 MBytes   473 Mbits/sec    0   11.1 MBytes
[  5]   0.00-10.08  sec   550 MBytes   458 Mbits/sec    0

总吞吐:458 Mbits/sec。首秒 230 Mbits/sec。

第五轮

复制代码
[  5]   0.00-1.00   sec  11.5 MBytes  96.1 Mbits/sec    0   6.64 MBytes
[  5]   1.00-2.00   sec  68.0 MBytes   571 Mbits/sec    0   17.3 MBytes
[  5]   2.00-3.00   sec  49.6 MBytes   416 Mbits/sec    0   12.4 MBytes
[  5]   3.00-4.00   sec  58.9 MBytes   494 Mbits/sec    0   12.2 MBytes
[  5]   4.00-5.00   sec  58.0 MBytes   487 Mbits/sec    0   12.6 MBytes
[  5]   5.00-6.00   sec  60.5 MBytes   507 Mbits/sec    0   12.7 MBytes
[  5]   6.00-7.00   sec  59.8 MBytes   502 Mbits/sec    0   12.2 MBytes
[  5]   7.00-8.00   sec  59.0 MBytes   495 Mbits/sec    0   12.5 MBytes
[  5]   8.00-9.00   sec  59.4 MBytes   498 Mbits/sec    0   12.3 MBytes
[  5]   9.00-10.00  sec  59.4 MBytes   498 Mbits/sec    0   12.2 MBytes
[  5]  10.00-10.09  sec  3.71 MBytes   365 Mbits/sec    0   12.2 MBytes
[  5]   0.00-10.09  sec   548 MBytes   456 Mbits/sec    0

总吞吐:456 Mbits/sec。首秒仅 96.1 Mbits/sec,是五轮中最慢启动。

BBR 五轮统计

轮次 总吞吐(Mbits/sec) 首秒吞吐(Mbits/sec) 丢包(Retr) 稳态 cwnd(MBytes)
1 459 261 0 10-14
2 374 2.46 1 10-38(大幅波动)
3 456 237 0 10-14
4 458 230 0 10-15
5 456 96.1 0 12-17

BBR 均值440.6 Mbits/sec

标准差33.6 Mbits/sec(含第二轮异常,去除后为 457.8 Mbits/sec,标准差 1.5 Mbits/sec)

三、KCC 测试数据(5轮)

第一轮

复制代码
[  5]   0.00-1.00   sec  26.7 MBytes   224 Mbits/sec    0   13.3 MBytes
[  5]   1.00-2.00   sec  61.9 MBytes   519 Mbits/sec    0   47.2 MBytes
[  5]   2.00-3.00   sec  57.7 MBytes   484 Mbits/sec    0   30.2 MBytes
[  5]   3.00-4.00   sec  60.9 MBytes   511 Mbits/sec    0   34.6 MBytes
[  5]   4.00-5.00   sec  59.3 MBytes   498 Mbits/sec    0   34.5 MBytes
[  5]   5.00-6.00   sec  59.3 MBytes   497 Mbits/sec    0   34.0 MBytes
[  5]   6.00-7.00   sec  59.2 MBytes   497 Mbits/sec    0   33.1 MBytes
[  5]   7.00-8.00   sec  59.3 MBytes   497 Mbits/sec    0   33.2 MBytes
[  5]   8.00-9.00   sec  59.3 MBytes   497 Mbits/sec    0   33.2 MBytes
[  5]   9.00-10.00  sec  59.3 MBytes   498 Mbits/sec    0   33.2 MBytes
[  5]  10.00-10.10  sec  5.50 MBytes   479 Mbits/sec    0   33.1 MBytes
[  5]   0.00-10.10  sec   568 MBytes   472 Mbits/sec    0

启动 :首秒 224 Mbits/sec,第二秒即达 519 Mbits/sec。

cwnd :峰值 47.2 MBytes(约 BDP 的 10 倍),稳态 33-34 MBytes。

总吞吐 :472 Mbits/sec。零丢包

第二轮

复制代码
[  5]   0.00-1.00   sec   589 KBytes  4.83 Mbits/sec    0    707 KBytes
[  5]   1.00-2.01   sec  8.05 MBytes  66.8 Mbits/sec    0   4.70 MBytes
[  5]   2.01-3.00   sec  56.3 MBytes   478 Mbits/sec    0   48.4 MBytes
[  5]   3.00-4.00   sec  59.3 MBytes   497 Mbits/sec    0   49.2 MBytes
[  5]   4.00-5.00   sec  59.3 MBytes   498 Mbits/sec    0   34.4 MBytes
[  5]   5.00-6.00   sec  58.7 MBytes   492 Mbits/sec    0   33.1 MBytes
[  5]   6.00-7.00   sec  59.8 MBytes   502 Mbits/sec    0   32.9 MBytes
[  5]   7.00-8.00   sec  59.3 MBytes   498 Mbits/sec    0   32.4 MBytes
[  5]   8.00-9.00   sec  59.1 MBytes   496 Mbits/sec    0   32.8 MBytes
[  5]   9.00-10.00  sec  59.4 MBytes   499 Mbits/sec    0   33.7 MBytes
[  5]  10.00-10.24  sec  14.2 MBytes   496 Mbits/sec    0   33.7 MBytes
[  5]   0.00-10.24  sec   494 MBytes   405 Mbits/sec    0

启动 :首秒 4.83 Mbits/sec,较慢,第三秒跃升至 478 Mbits/sec。

cwnd :峰值 49.2 MBytes,稳态 33-34 MBytes。

总吞吐:405 Mbits/sec(最低轮),但在 10.24 秒内保持零丢包。

第三轮

复制代码
[  5]   0.00-1.00   sec  32.8 MBytes   275 Mbits/sec    0   16.8 MBytes
[  5]   1.00-2.00   sec  59.3 MBytes   498 Mbits/sec    0   48.8 MBytes
[  5]   2.00-3.00   sec  58.5 MBytes   491 Mbits/sec    0   29.8 MBytes
[  5]   3.00-4.00   sec  60.0 MBytes   503 Mbits/sec    0   33.4 MBytes
[  5]   4.00-5.00   sec  59.3 MBytes   497 Mbits/sec    0   33.2 MBytes
[  5]   5.00-6.00   sec  59.2 MBytes   497 Mbits/sec    0   32.1 MBytes
[  5]   6.00-7.00   sec  59.3 MBytes   497 Mbits/sec    0   33.1 MBytes
[  5]   7.00-8.00   sec  59.3 MBytes   498 Mbits/sec    0   33.1 MBytes
[  5]   8.00-9.00   sec  58.8 MBytes   493 Mbits/sec    0   32.7 MBytes
[  5]   9.00-10.00  sec  59.8 MBytes   502 Mbits/sec    0   33.1 MBytes
[  5]  10.00-10.08  sec  4.82 MBytes   487 Mbits/sec    0   33.1 MBytes
[  5]   0.00-10.08  sec   571 MBytes   475 Mbits/sec    0

总吞吐:475 Mbits/sec。启动快速、稳态平滑、零丢包。

第四轮

复制代码
[  5]   0.00-1.00   sec  20.8 MBytes   174 Mbits/sec    0   10.3 MBytes
[  5]   1.00-2.00   sec  64.9 MBytes   545 Mbits/sec    0   47.0 MBytes
[  5]   2.00-3.00   sec  59.3 MBytes   497 Mbits/sec    0   48.0 MBytes
[  5]   3.00-4.00   sec  59.4 MBytes   498 Mbits/sec    0   33.0 MBytes
[  5]   4.00-5.00   sec  59.0 MBytes   495 Mbits/sec    0   33.1 MBytes
[  5]   5.00-6.00   sec  59.1 MBytes   496 Mbits/sec    0   33.1 MBytes
[  5]   6.00-7.00   sec  59.6 MBytes   500 Mbits/sec    0   32.4 MBytes
[  5]   7.00-8.00   sec  59.3 MBytes   497 Mbits/sec    0   33.2 MBytes
[  5]   8.00-9.00   sec  59.3 MBytes   498 Mbits/sec    0   32.1 MBytes
[  5]   9.00-10.00  sec  59.3 MBytes   497 Mbits/sec    0   33.4 MBytes
[  5]  10.00-10.10  sec  5.69 MBytes   487 Mbits/sec    0   33.2 MBytes
[  5]   0.00-10.10  sec   566 MBytes   470 Mbits/sec    0

总吞吐:470 Mbits/sec。零丢包。

第五轮

复制代码
[  5]   0.00-1.00   sec  31.4 MBytes   264 Mbits/sec    0   15.7 MBytes
[  5]   1.00-2.00   sec  59.5 MBytes   499 Mbits/sec    0   34.0 MBytes
[  5]   2.00-3.00   sec  59.3 MBytes   498 Mbits/sec    0   34.1 MBytes
[  5]   3.00-4.00   sec  59.2 MBytes   497 Mbits/sec    0   32.9 MBytes
[  5]   4.00-5.00   sec  59.3 MBytes   498 Mbits/sec    0   33.0 MBytes
[  5]   5.00-6.00   sec  59.1 MBytes   496 Mbits/sec    0   33.2 MBytes
[  5]   6.00-7.00   sec  58.8 MBytes   493 Mbits/sec    0   33.2 MBytes
[  5]   7.00-8.00   sec  59.8 MBytes   501 Mbits/sec    0   33.3 MBytes
[  5]   8.00-9.00   sec  58.6 MBytes   492 Mbits/sec    0   33.6 MBytes
[  5]   9.00-10.00  sec  59.9 MBytes   502 Mbits/sec    0   33.5 MBytes
[  5]  10.00-10.08  sec  4.63 MBytes   504 Mbits/sec    0   33.6 MBytes
[  5]   0.00-10.08  sec   570 MBytes   474 Mbits/sec    0

总吞吐:474 Mbits/sec。零丢包。

KCC 五轮统计

轮次 总吞吐(Mbits/sec) 首秒吞吐(Mbits/sec) 丢包(Retr) 稳态 cwnd(MBytes)
1 472 224 0 33-34
2 405 4.83 0 33-49
3 475 275 0 33-34
4 470 174 0 33-34
5 474 264 0 33-34

KCC 均值459.2 Mbits/sec

标准差26.1 Mbits/sec(含第二轮异常,去除后为 472.8 Mbits/sec,标准差 2.1 Mbits/sec)

四、对比分析

4.1 启动阶段(前 3 秒)

算法 首秒吞吐均值 第二秒均值 第三秒均值 是否出现首秒 < 10 Mbits/sec
BBR 165.2 Mbits/sec 297.9 Mbits/sec 466.0 Mbits/sec 是(第二轮 2.46、第五轮 96.1)
KCC 188.3 Mbits/sec 410.8 Mbits/sec 489.4 Mbits/sec 是(第二轮 4.83)

BBR 首秒吞吐在第二轮遭遇严重 stall(2.46 Mbits/sec),第五轮也仅 96.1 Mbits/sec。KCC 除第二轮外,首秒均维持在 174-275 Mbits/sec,启动一致性更优。

4.2 稳态阶段(第 3-10 秒)

算法 稳态吞吐波动范围 吞吐标准差(去除异常轮) 丢包率
BBR 436-512 Mbits/sec 1.5 Mbits/sec(去异常) 1 次
KCC 478-519 Mbits/sec 2.1 Mbits/sec(去异常) 0 次

两种算法在稳定后均能逼近物理瓶颈(480M 带宽),但 BBR 存在一次丢包记录,而 KCC 五轮零丢包。

4.3 拥塞窗口特征

算法 稳态 cwnd(MBytes) cwnd / BDP(≈4.8 MBytes)
BBR 10-14 2.1-2.9× BDP
KCC 33-34 6.9-7.1× BDP

这是本测试中最显著的差异。KCC 维持了大约 7× BDP 的拥塞窗口,而 BBR 仅维持约 2-3× BDP

在 80ms RTT、480Mbps 的链路上,维持更大的 cwnd 意味着:

  1. ACK 时钟在更长的时间轴上积分 :深缓冲区中,KCC 利用卡尔曼滤波器的方向性门控,精确区分了 TqueueT_{queue}Tqueue 的增长斜率与物理路径变化。即便 cwnd 很大,只要 T˙queue≤0\dot{T}_{queue} \le 0T˙queue≤0,KCC 便认为当前速率仍处在合理范围内,无需强制排空。
  2. 零丢包下的更高平均吞吐:KCC 五轮均值 459.2 Mbits/sec(含异常轮)优于 BBR 的 440.6 Mbits/sec,提升约 4.2%。在深缓冲区、长 RTT 下,这一差异来源于 KCC 能够更持续地保持高窗口,而不触发 BBR 的周期性 PROBE_RTT 强制排空。

4.4 异常行为对比

BBR 第二轮出现了一次重传(Retr=1),伴随吞吐骤降至 375 Mbits/sec,cwnd 从 27.6 MBytes 跌至 12.7 MBytes。这是 BBR 在深缓冲区、长 RTT 路径上的典型行为------当 BBR 的 min_rtt 窗口因队列积压而暂时膨胀后,触发 PROBE_RTT 强制排空,导致 cwnd 急剧收缩。

KCC 第二轮尽管启动较慢(首秒 4.83 Mbits/sec),但从未出现丢包,且 cwnd 在第三秒即扩张至 48.4 MBytes,随后稳定于 33-34 MBytes。说明 KCC 的滤波器和分层校准机制(pestp_{est}pest 阈值 / 漂移检测 / 周期性 PROBE_RTT)在深缓冲区场景下,能够更平滑地完成窗口扩张与收敛,避免了 BBR 式的大幅锯齿。

五、结论

  1. 深缓冲区下,两者均能打满瓶颈带宽的约 95% 以上,单流饱和场景下,算法差异被物理瓶颈(480M)压制。
  2. KCC 在零丢包和窗口扩张速度上优于 BBR:五轮测试中,KCC 保持零丢包,BBR 出现一次丢包。KCC 的 cwnd 扩张至 7× BDP,而 BBR 仅维持在 2-3× BDP------在 80ms RTT 长链路上,更大的窗口是更高平均吞吐的物理基础。
  3. KCC 的启动一致性更高:BBR 首秒吞吐出现多次 stall(2.46 Mbits/sec、96.1 Mbits/sec),而 KCC 仅有第二轮一次类似 stall,其余四轮首秒均 ≥ 174 Mbits/sec。
  4. 晚高峰(22:40)下,KCC 的总吞吐均值(459.2 Mbits/sec)比 BBR(440.6 Mbits/sec)高出约 4.2%。在深缓冲区、长 RTT 场景下,这一差异具有实际工程意义------KCC 的三层失效保护和方向性门控,使其在不触发强制排空的前提下,更持久地保持高窗口状态。
  5. 工程意义 :对于骨干网、跨国链路、卫星回传等长肥网络,KCC 的深缓冲区适应性优于 BBR,能在不增加丢包的前提下,更充分地利用延迟带宽积。KCC 的 kcc_kf_enable=1 + kcc_kf_steady_mode=1 甜品加速配置,在此类链路中可显著缩短启动阶段,并维持更平稳的稳态吞吐,但并不意味着 KCC 优于 BBR,须知没有银弹。

测试数据集:2026/06/24 22:40 晚高峰,成都移动(AS9808)→ 新加坡甲骨文云,单流 iperf3,每算法 5 轮 10 秒测试。