BBR 拥塞控制算法
百科词条 · VPS 术语 · 亦称 BBR / BBRv2 / BBRv3 / TCP BBR
BBR(Bottleneck Bandwidth and RTT)是由 Google 开发并合并进 Linux 内核的基于物理模型的拥塞控制算法;不同于传统丢包驱动算法(如 Reno、CUBIC),BBR 持续交替测量物理链路的最大传输速率(BtlBw)与最小往返时延(RTprop),在高延迟、高抖动的跨洋长肥管道(LFN)中能彻底避免因非拥塞随机丢包而导致的吞吐量崩塌。
物理模型驱动 vs 丢包减半机制
传统 TCP 拥塞控制(如 RFC 5681 的 Reno 与 Linux 默认的 CUBIC)遵循基于丢包的保守假设,认为一旦发生丢包即意味着网络缓冲区溢出,会立即将拥塞窗口(cwnd)减半。然而在跨国公网长距离链路中,光纤抖动与中间节点突发可能带来 1%~5% 的非拥塞性随机丢包,导致传统 TCP 吞吐锐减 80% 以上。BBR 基于 Kleinrock 最优工作点模型,维持以带宽时延积(BDP = BtlBw × RTprop)为基准的发包队列,在轻度丢包下依然能跑满物理带宽上限。
查看来源状态机循环与参数调优
BBR 通过四阶段状态机(Startup、Drain、ProbeBW、ProbeRTT)动态协同:Startup 以指数级增益快速填满带宽;Drain 清空排队缓冲;ProbeBW 周期性以 1.25 倍发包速率探测潜在的新带宽;ProbeRTT 每隔数秒将发包量降至极小以重新校准真实的物理最小时延(RTprop)。开启 BBR 通常需搭配公平队列排队规则(fq / fq_codel)以实现微秒级精确 Pacing。
版本演进:BBRv1、BBRv2 到 BBRv3
BBRv1 于 Linux 4.9 内核正式合并,但存在浅缓冲区中与 CUBIC 竞争过于激进、排队延迟偏高的问题;Google 随后在 IETF CCWG(拥塞控制工作组)推进 BBRv2 与 BBRv3 规范,引入显式拥塞通知(ECN)支持与丢包容忍阈值,兼顾了高吞吐与多流公平性。
查看来源VPS 虚拟化环境要求与开启方法
启用 BBR 要求操作系统内核支持加载 tcp_bbr 模块。KVM 完整虚拟机允许自由更换系统内核,执行 sysctl -w net.ipv4.tcp_congestion_control=bbr 即可生效;而共享宿主机内核的容器架构(如 OpenVZ 或非特权 LXC)无法自主写入宿主机网络栈,必须依赖宿主母机全局配置。
代理协议中的适用边界与差异
运行在系统 TCP 栈之上的代理协议(如 Shadowsocks TCP、VLESS-TCP/XTLS、Trojan)开启 BBR 后能直接改善跨国长连接的单线程吞吐与视频加载速度;而基于 UDP 的现代协议(如 Hysteria 2 使用的用户态 Brutal 算法、TUIC 使用的 QUIC BBR)在应用层直接实施速率控制,不受宿主机内核 TCP 算法约束。