导读:不少人的第一台VPS是"蛮好的机器,就是网络肉"——延迟高、丢包一多速度就崩。这类症状十有八九不是带宽不够,而是TCP拥塞控制算法在保守退让。这篇从原理讲到落地:为什么CUBIC在高丢包线路上跑不动、BBR凭什么靠"测量"代替"猜"、三行sysctl开启配置、怎么验证真的生效了、哪些场景提速明显哪些没感觉,最后聊聊魔改版BBR值不值得折腾。本站风格依旧是命令可直接照抄,坑提前踩好。
一、先搞懂:丢包线路上,老算法为什么会"刹车站"
传统拥塞控制算法(Reno、CUBIC)的核心逻辑是"丢包即拥塞":只要检测到丢包,就把发送速率砍半,然后再慢慢爬回来。这个假设在低丢包的优质骨干网上工作得不错,但跨境线路动辄百分之一二的背景丢包,算法会把正常损耗当成网络崩溃,于是你看到的就是速度曲线锯齿状跳水——带宽明明还有富余,发送端自己把自己掐死了。而Google在2016年提出的BBR换了思路:不猜,直接测量。它周期性估算当前链路的最大带宽和最小往返时延,然后按"带宽×时延"的积去精准控制发送窗口,理论上把链路吃满而不过载。一句话总结:CUBIC是丢了包就踩刹车,BBR是拿着仪表盘 cruising。
二、开工前确认:内核版本够不够
BBR进入Linux主线是4.9版本,现在的发行版基本都满足。确认一下:
uname -r sysctl net.ipv4.tcp_available_congestion_control
第一条输出4.9以上就可以继续;第二条看看可用算法列表,有些内核已经默认带bbr,有些需要modprobe。都不满足的古老系统(比如CentOS 7的3.10内核),要么换发行版,要么上ELRepo内核——但个人建议直接重装成新系统,比折腾内核省心,重装方案参考本站相关教程。
三、正式开启:两行配置
编辑/etc/sysctl.conf,追加:
net.core.default_qdisc = fq net.ipv4.tcp_congestion_control = bbr
两行即可,default_qdisc设置成fq(Fair Queue)是官方推荐搭配,BBR的 pacing 机制依赖它来平滑发包节奏。生效并设为开机默认:
sysctl -p
就这么简单。网上流传的各种"一键BBR脚本"本质做的事情完全一样,还经常顺手给你换一套来路不明的内核,不如这三行自己写。
四、验证:确认真的在跑BBR
两条命令,缺一不可:
sysctl net.ipv4.tcp_congestion_control lsmod | grep bbr
第一条应输出net.ipv4.tcp_congestion_control = bbr,说明配置已生效;第二条能看到tcp_bbr模块说明内核功能已加载。只看第一条不看第二条是常见坑:某些容器环境里sysctl显示改了,实际内核模块没起来,等于白改。更严格的验证可以从外部观测:用 ss -i 看活跃连接的拥塞控制字段。
五、哪些场景提速明显,哪些没感觉
先说没感觉的:机房之间、国内访问国内这类低延迟低丢包链路,CUBIC本来就能跑满,BBR提升接近零。再说明显的:高延迟高丢包的跨境线路,典型如某些国际线路晚高峰,BBR常见能把有效吞吐翻几倍;大文件HTTP下载、代理转发类流量受益最直接。要管理预期:BBR优化的是"发送端行为",救不了物理带宽不足和线路绕路——200Mbps的端口瓶颈不会因为换算法变成500Mbps,它只是帮你在劣质链路上把已付费的带宽真正用起来。判断自己该不该开很简单:mtr看一下到目标线路的丢包率,超过0.5%就值得开,接近零就别指望奇迹。
六、魔改版、BBR2、BBR3:要不要折腾
社区有大量"BBR魔改版"内核,调整了 aggressive 程度,宣称更暴力;Google后续还有BBRv2、v3的演进,处理了抢带宽公平性等问题。个人建议:跑网站、跑自托管服务的机器,用发行版官方内核的BBR就够了,稳定压倒一切;魔改内核的风险在于来源不明的补丁集和小众内核没人维护安全更新,为了百分之十几的边际收益不划算。真有极端线路要救,优先考虑的也应该是换线路、上中转,而不是内核层面的玄学调参。
七、配套参数:别盲目抄"一键优化"
开了BBR之后,还有一组真正值得动的TCP缓冲区参数,作用是让高带宽高延迟链路(大BDP)有足够的窗口空间:
net.core.rmem_max = 67108864 net.core.wmem_max = 67108864 net.ipv4.tcp_rmem = 4096 87380 67108864 net.ipv4.tcp_wmem = 4096 65536 67108864
同时提醒一个反面教材:网上流传的各种"TCP一键优化"脚本经常塞进几十行来路不明的参数,有些在新内核里早已是默认值,有些则明显适得其反。原则和本站Docker篇的daemon.json调优一致:每改一个参数,知道自己在改什么,改完有验证手段。cat /proc/sys/net/ipv4/tcp_rmem这类文件随时可以核对当前值。
八、怎么科学地验证提速
别用"感觉快了"做结论,那不叫测试叫玄学。三个姿势:curl直连下载一个够大的测试文件,对比开启前后各跑三次的耗时中位数;iperf3打点对点带宽,需要一台对端机器配合;代理场景下直接看客户端的速度曲线是否从锯齿变成平稳高位。测试时注意控制变量——同一时段对比才有效,跨境线路晚高峰和凌晨的基线差异可能比算法差异还大,这也是很多人"开了BBR感觉快了"的真实原因之一:他凌晨测的。科学的做法是开启前后各记录三天的分时段数据,让结论立得住。
结语
BBR是那种"成本三分钟、收益看线路"的优化:低丢包链路上无感,劣质线路上立竿见影。两行配置、两条验证命令、一组缓冲区参数,就是全部必要操作。剩下的精力应该花在观测上——知道自己的线路丢包率、知道优化前后的真实数据,比囤积十套一键脚本有价值得多。网络是VPS体验的命脉,管好拥塞控制这一环,配合本站的监控和日志体系,慢和卡就会从"玄学"变成"可量化、可优化的问题"。


