BBR是Google开发的基于模型的TCP拥塞控制算法,通过探测带宽和RTT调节速率,需Linux 4.9+内核及FQ队列配合,适用于高延迟、高丢包或带宽波动场景。

BBR(Bottleneck Bandwidth and RTT)是Google开发的基于模型的TCP拥塞控制算法,不依赖丢包信号,而是通过主动探测带宽和往返时延来调节发送速率。在Linux 4.9+内核中已原生支持,启用后可显著改善高延迟、高丢包或带宽波动场景下的吞吐量与延迟表现。
确认内核版本并启用BBR
BBR需Linux 4.9及以上内核。执行以下命令检查:
uname -r —— 若输出如 5.15.0-xx-generic,则满足要求。
启用步骤如下:
- 临时启用(重启失效):
sysctl -w net.ipv4.tcp_congestion_control=bbr - 永久生效:向 /etc/sysctl.conf 追加两行:
net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq - 加载配置:
sysctl -p - 验证是否生效:
sysctl net.ipv4.tcp_congestion_control 应返回 bbr
ss -i 查看某TCP连接,若含 bbr 字样即表示已使用
关键配套参数:fq队列规则不可省略
BBR依赖精确的发送调度,必须配合FQ(Fair Queueing)作为默认队列规则,否则无法发挥优势,甚至可能退化为类似CUBIC的行为。
- FQ提供每流独立的发送缓冲与 pacing 支持,使BBR能平滑控制发包节奏
- 若系统未启用FQ(如使用pfifo_fast),BBR将失去 pacing 能力,吞吐易震荡
- 启用命令:
sysctl -w net.core.default_qdisc=fq(同上写入sysctl.conf) - 可通过 tc qdisc show dev eth0 确认当前网卡队列规则为 fq
典型场景下的性能对比建议
BBR并非在所有场景都优于CUBIC,测评时应聚焦其优势区间:
- 长肥管道(Long Fat Network):如跨洲际传输(中美/欧亚),RTT > 50ms + 带宽 > 100Mbps,BBR通常提升20%~50%吞吐,降低30%以上尾部延迟
- Wi-Fi或4G/5G移动网络:带宽突变频繁,BBR比CUBIC更快收敛,减少卡顿;但需注意部分老旧AP或基站对 pacing 包敏感,偶有兼容性问题
- 轻载低延迟局域网(如千兆内网,RTT
- 测评工具推荐:
• 吞吐:iperf3(服务端加 -A 关闭自动调优)
• 延迟分布:ping + mtr 或 qperf
• 实时观测:ss -i、bbrinfo(需安装 linux-tools-common)
常见问题与调优提示
启用后若未达预期,优先排查以下几点:
- 确认客户端和服务端**双向**均启用BBR:仅一端启用效果有限,尤其服务端为Nginx/Apache等时,需确保其运行环境内核支持且已配置
- 检查中间设备:某些企业防火墙、QoS策略或旧版路由器会重置TCP选项或丢弃 pacing 包,导致BBR降级
- 避免混用:不要在同一个连接中动态切换算法(如通过setsockopt),BBR初始化后即绑定至该socket生命周期
- 进阶调优(非必需):
• net.ipv4.tcp_bbr_min_rtt_win_sec:缩短最小RTT采样窗口,默认300秒,可设为60加速响应
• net.ipv4.tcp_slow_start_after_idle 设为0,防止空闲后重置cwnd(BBR自身已处理)











