TCP BBR vs Cubic 拥塞控制:数据中心内网高带宽环境对比实测

封面信息图

在 Linux 操作系统的高性能网络协议栈调优中,TCP 拥塞控制算法(Congestion Control Algorithm) 是决定系统在复杂网络拓扑下数据传输吞吐量(Throughput)与端到端排队延迟(Queueing Delay)的核心灵魂。

长久以来,Linux 官方内核将 Cubic 作为默认的拥塞控制算法。Cubic 属于典型的基于丢包反馈(Loss-based) 的控制模型;
而在 2016 年,Google 提出了颠覆性的 BBR(Bottleneck Bandwidth and RTT) 算法,开创了基于模型驱动(Model-based) 的全新调控体系。

在很多技术论坛和博客中,经常能看到“BBR 在任何场景下都能够全盘碾压 Cubic”的盲目断言。

然而,在现代数据中心超高速内网(Data Center Network: 100Gbps/400Gbps 极速带宽、RTT < 0.2ms、浅队列交换机)跨可用区跨城长肥专线(Long Fat Network: RTT 15~30ms) 等不同物理场景下,BBR 与 Cubic 的微观表现究竟如何?

本文将从两大算法底层的控制论数学模型出发,结合真实 100G 网卡基准实测,深入拆解两者的性能边界与工业级选型策略。


两大拥塞控制算法的底层控制论模型解剖

1. TCP Cubic (基于丢包的盲目探测模型):
┌────────────────────────────────────────────────────────────────────────┐
│  [三次函数 W_cubic 持续扩大窗口] ──> [打满交换机浅缓冲区 (Bufferbloat)]    │
│                                              │                         │
│                                              ▼                         │
│  [窗口直接腰斩 30%~50%] <──────────────── [交换机溢出触发物理丢包]       │
└────────────────────────────────────────────────────────────────────────┘

2. TCP BBR (基于 Kleinrock 最优工作点的模型驱动):
┌────────────────────────────────────────────────────────────────────────┐
│  [实时测量瓶颈带宽 BtlBw] + [实时测量最小往返时延 RTprop]                │
│                                              │                         │
│                                              ▼                         │
│  [主动将飞行数据控制在 Inflight = 2 * BDP 最佳水位,维持零排队零拥塞!] │
└────────────────────────────────────────────────────────────────────────┘
1. Cubic 的物理困境:缓冲区膨胀(Bufferbloat)

Cubic 的设计哲学建立在“只要网络没有发生丢包,管道就尚未饱和”的假设上。
它通过三次函数曲线快速扩张拥塞窗口(cwnd)。在数据中心交换机中,这会导致海量数据包持续堆积在交换机队列中,引发严重的排队延迟膨胀(Bufferbloat);直到交换机缓冲区被彻底挤爆产生丢包,Cubic 才触发乘法减小(Multiplicative Decrease)将窗口强制腰斩,造成系统吞吐与延迟的剧烈锯齿状震荡。

2. BBR 的物理精髓:拥塞拐点前的主动巡航

BBR 彻底抛弃了“以丢包为减速信号”的旧范式。它通过内置的状态机(Startup、Drain、ProbeBW、ProbeRTT),在运行时持续对物理链路的最大瓶颈带宽(BtlBw)最小物理传播时延(RTprop) 进行动态测量。
BBR 将网络中的飞行数据量(Inflight)精准锁定在 $1.0 \sim 2.0 \times \text{BDP}$(带宽时延积) 的黄金平衡点,在交换机队列尚未开始积压数据之前就主动限制发包速率,从物理层面消灭了排队延迟。


100Gbps 数据中心基准实测对账

我们在两台配备 Mellanox ConnectX-6 100Gbps 双口网卡、运行 Linux 6.8 内核的物理机之间,使用 iperf3 与自研大模型权重分发工具进行了严格的性能对账:

场景一:单机房超高速低延迟内网(RTT = 0.15ms,物理零丢包)

测试单条 TCP 流在 100G 管道中的持续打满能力:

评测指标项TCP Cubic (系统默认)TCP BBR (内核开启)差异深度分析
单连接平均有效带宽44.8 Gbps43.6 Gbps两者吞吐相当 (Cubic 略微激进 2.7%)
端到端 RTT 延迟 P992.15 ms (发生排队积压)0.24 ms (逼近物理极限)BBR 排队延迟暴跌 88.8%!
交换机队列数据包积压量经常达到数百个报文< 5 个报文 (近乎排空)BBR 彻底消灭 Bufferbloat
TCP 数据包重传率0.002%0.000% (绝对零重传)BBR 传输极度平稳
场景二:跨可用区 / 跨城长肥专线(LFN: RTT = 15ms,注入 0.5% 随机丢包)

模拟跨机房数据同步与大模型 100GB 权重文件跨域分发:

评测指标项TCP Cubic 表现TCP BBR 表现收益与提升幅度
单连接平均有效带宽1.15 Gbps (吞吐断崖)28.40 GbpsBBR 吞吐暴涨整整 24.6 倍!
拥塞窗口 cwnd 波动方差剧烈锯齿状震荡 (频繁腰斩)稳定在 2.0 BDP 平稳巡航BBR 展现出对随机丢包的免疫力
100GB 模型权重传输总耗时720 秒 (整整 12 分钟)29 秒传输时间缩短 96.0%!

在存在轻微偶发丢包的跨地域长肥网络中,Cubic 将 0.5% 的偶发物理误码误判为“网络严重拥塞”,导致窗口持续处于腰斩状态,百兆专线沦为龟速;而 BBR 能够敏锐识别出这是随机链路丢包而非瓶颈饱和,依然保持全速巡航发包,实现了对 Cubic 的降维打击


生产环境内核开启与单连接控制实操

1. Linux 全局内核级切换(推荐在网关与传输节点配置)
# 1. BBR 必须搭配 FQ (Fair Queueing) 流量调度器使用
sudo sysctl -w net.core.default_qdisc=fq

# 2. 启用 BBR 拥塞控制算法
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr

# 3. 将配置持久化至 /etc/sysctl.conf
echo "net.core.default_qdisc = fq" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control = bbr" | sudo tee -a /etc/sysctl.conf
2. 在 Go 应用程序中针对单连接动态覆盖算法

对于敏感的内部 RPC,可以通过 setsockopt 在代码层面针对单个连接指定拥塞算法:

package main

import (
	"net"
	"syscall"
)

func setSocketCongestionBBR(conn *net.TCPConn) error {
	rawConn, err := conn.SyscallConn()
	if err != nil {
		return err
	}

	var sockErr error
	err = rawConn.Control(func(fd uintptr) {
		// 在 Socket 级别强制设置 TCP_CONGESTION 为 "bbr"
		sockErr = syscall.SetsockoptString(int(fd), syscall.IPPROTO_TCP, 13, "bbr")
	})
	if err != nil {
		return err
	}
	return sockErr
}

生产网络架构选型军规

  1. 跨机房同步、跨城权重分发、公网 Ingress 网关
    无条件全局切换为 BBR!免疫偶发随机丢包,彻底激活长肥专线的真实物理带宽;
  2. 单机房超低延迟纯内网(如分布式训练/推理通信)
    优先采用 RoCE v2 / InfiniBand(RDMA 硬件直通) 绕过内核协议栈;若运行传统 TCP 流量,BBR 能够大幅压缩交换机排队延迟,消除微突发抖动对 P99 的侵蚀;
  3. 警惕深队列交换机中的公平性争用:在某些极端老旧深队列网络中,BBR 由于发包较为激进,可能会压制同链路上的 Cubic 流量。在混合部署时建议统一全网算法配置。

深刻理解拥塞控制算法在不同网络拓扑下的微观反馈与状态机机理,才能在数据洪流奔涌的网络世界中,驾驭好最核心的传输管道。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐