全部在浏览器本地计算 · 数据不上传
首页 / 教程 / BBR 实测

BBR 到底有没有用:VPS 网络调优的实测与边界

2026-11-15 · 约 7 分钟读完

几乎每篇 VPS 教程都会让你"开启 BBR 加速"。但它到底是什么、什么时候真有用、什么时候纯属心理安慰,很少有人讲清楚。

BBR 是什么

BBR 是 Google 在 2016 年提出的拥塞控制算法,代替传统的 CUBIC。

传统算法(CUBIC、Reno)的核心思路是丢包即拥塞——一丢包就把发送速度砍半。这个假设在局域网成立,但在跨境链路上不成立:

BBR 换了个思路:它主动测量带宽和最小 RTT,估算出这条链路的真实容量,然后按这个容量发送,而不是一遇丢包就退让。

一句话:CUBIC 看丢包判断拥塞,BBR 看带宽和延迟建模。跨境高丢包场景下,这个差别非常明显。

什么时候 BBR 有感知

场景效果
跨境、RTT > 100ms、有丢包明显,吞吐可能提升数倍
跨境、晚高峰拥塞明显,抗抖动能力强
同城/同区域、低延迟、低丢包几乎无感
瓶颈在出口带宽上限(比如 30Mbps 峰值限制)无效,怎么调都跑不过上限
对端是单线程且窗口很小效果有限

所以"开了 BBR 但没变快"很正常——先确认你的瓶颈是不是在带宽本身。

怎么开(三行)

# 1. 加载模块
sudo modprobe tcp_bbr
echo tcp_bbr | sudo tee /etc/modules-load.d/bbr.conf

# 2. 设置拥塞控制和队列规则
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr
sudo sysctl -w net.core.default_qdisc=fq

# 3. 确认
sysctl net.ipv4.tcp_congestion_control net.core.default_qdisc
# 应输出 bbr 和 fq

队列规则必须是 fq(Fair Queueing)。BBR 依赖它做 pacing,配 fq_codel 效果会打折。

永久生效写进 /etc/sysctl.d/99-tuning.conf,然后 sudo sysctl --system。

真正值得调的参数

网上流传的"一键优化脚本"动辄几十行,其实现代内核里真正有用的没几个:

参数建议值作用
net.core.default_qdiscfqBBR 的前提
net.ipv4.tcp_congestion_controlbbr算法本身
net.core.rmem_max
net.core.wmem_max
32MB 左右大缓冲区,高 RTT 场景需要
net.ipv4.tcp_slow_start_after_idle0空闲后不重置拥塞窗口,避免"卡一下"
net.ipv4.tcp_fastopen3客户端+服务端都启用,省一个 RTT
net.core.somaxconn65535高并发连接队列

反例:tcp_tw_recycle 早就从内核移除了,tcp_timestamps=0 会带来副作用,net.ipv4.tcp_max_tw_buckets 设太小反而制造问题。看到脚本里有这些,直接跳过。

怎么验证有没有用

先看算法是否真的生效:

sysctl net.ipv4.tcp_congestion_control
ss -ti | grep -o 'bbr' | head

ss -ti 能看到每个连接用的算法,这是最直接的证据。

然后做同条件对比:在同一台机器、同一个时间段,一个用 bbr、一个用 cubic,下载同一个文件比吞吐。顺序反过来再测一次,排除时段波动。

诚实地说:只测一次"开之前 / 开之后"没有意义。跨境网络的波动比 BBR 带来的差异还大,必须交叉对比。

一个被忽略的副作用

BBR 抢带宽的"攻击性"很强。在共享带宽的环境下(比如同一台物理机的其他 VPS,或者你和其他服务争同一条出口),开了 BBR 的机器会把公平排队的资源抢得更多。

对独享带宽没影响;但在共享链路上,这可能让邻居变慢。这也是部分机房默认不给开 BBR 的原因。

新一点的方案是 BBRv3(Linux 6.10+ 主线的 BBR 已经改进),在保持高吞吐的同时对公平性更友好。

结论

顺手算个子网 CIDR 计算器