跳转到内容

Linux BBR 拥塞控制算法开启教程 | VPS 网络加速完全指南

Linux BBR Network Optimization

当我们买了一台国外的 VPS,特别是搭建了 Web 服务或者科学上网代理节点时,往往会发现网络速度跑不满,甚至在晚高峰时会有卡顿或丢包现象。

这个时候,开启 BBR 是最基础、也是最立竿见影的优化手段。

什么是 BBR?

TCP BBR (Bottleneck Bandwidth and Round-trip propagation time) 是一种由 Google 开发的 TCP 拥塞控制算法。

传统的拥塞控制算法(比如 Reno 或 CUBIC)是基于系统发生“丢包”事件后,才认为网络拥堵并开始减速的。而这在跨境长距离传输时(往往存在正常的物理远距离丢包)会极大地限制传输速度。 BBR 则通过实时计算带宽和延迟,主动预测并控制发送速率,可以大幅度提升网络吞吐量,极大程度降低延迟。

一句话:它能让你的 VPS 跑得更快、更稳!

BBR vs 传统算法对比

特性传统算法 (CUBIC/Reno)BBR
检测方式基于丢包判断拥堵基于带宽和延迟预测
响应速度被动响应(丢包后减速)主动预测(提前调整)
长距离传输性能下降明显保持稳定高速
缓冲区占用容易填满缓冲区最小化缓冲区占用
适用场景局域网、短距离跨洋、长距离传输

前置条件检测

现在的 Linux 系统其实都极其先进了。Linux 内核在版本 4.9 及以上就已经内置了原生的 BBR 模块。 (最新的 Debian 11/12 或 Ubuntu 20.04/22.04 更是远超这个版本号)。

我们在动手之前,可以先通过以下命令看看当前内核版本:

bash
uname -r

如果输出的是 4.9.xxx 或者是 5.x/6.x 这样大于 4.9 的版本号,你就可以直接免安装一键开启了。

检查系统是否支持 BBR

bash
# 检查内核模块是否存在
modprobe tcp_bbr

# 检查可用的拥塞控制算法
sysctl net.ipv4.tcp_available_congestion_control

预期输出应包含:

net.ipv4.tcp_available_congestion_control = reno cubic bbr

原生一键开启 BBR 指南

由于我们使用的是最新的发行版(如 Debian 或 Ubuntu),完全不需要借助任何第三方复杂的“一键脚本”来更换内核。这只需要修改两行系统变量即可。

这里提供三种方法,推荐使用方法 3。

方法 1:手动修改配置文件

  1. 登录 VPS 终端执行以下命令,直接将两行配置项追加到系统的 sysctl.conf 文件中:
    bash
    echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
    echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
  2. 然后让系统重新加载刚才的配置,使 BBR 立即生效:
    bash
    sysctl -p

方法 2:使用一行自动化命令

直接复制下面这行“万能命令”并在终端回车,它会自动完成验证、修改并生效的全部动作,适合纯小白操作:

bash
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf && echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf && sysctl -p

方法 3:使用专用配置文件(推荐)

创建独立的 BBR 配置文件,便于管理和维护:

bash
# 创建 BBR 专用配置文件
cat > /etc/sysctl.d/99-bbr.conf <<EOF
# Enable BBR congestion control
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
EOF

# 应用配置
sysctl --system

优势:

  • ✅ 配置独立,不与其他设置冲突
  • ✅ 优先级高(99 开头)
  • ✅ 易于备份和迁移

如何验证 BBR 是否成功开启?

执行完上面简单的配置动作后,咱们来确认一下它到底生效了没有。

验证方法 1:检查内核模块

bash
lsmod | grep bbr

如果终端输出了类似下面的内容(重点是包含了 tcp_bbr 即可,后面的数字不用在意),说明 BBR 已经成功开启并在运行中啦!

text
tcp_bbr                20480  10

验证方法 2:检查当前拥塞控制算法

bash
# 查看当前使用的拥塞控制算法
sysctl net.ipv4.tcp_congestion_control

# 应该输出:
# net.ipv4.tcp_congestion_control = bbr

验证方法 3:检查队列规则

bash
# 查看默认的队列规则
sysctl net.core.default_qdisc

# 应该输出:
# net.core.default_qdisc = fq

验证方法 4:综合检查脚本

创建一个快速检查脚本:

bash
#!/bin/bash
echo "=== BBR 状态检查 ==="
echo ""

echo "1. 内核版本:"
uname -r

echo ""
echo "2. 当前拥塞控制算法:"
sysctl net.ipv4.tcp_congestion_control

echo ""
echo "3. 默认队列规则:"
sysctl net.core.default_qdisc

echo ""
echo "4. BBR 模块加载状态:"
if lsmod | grep -q tcp_bbr; then
    echo "✅ BBR 已加载"
    lsmod | grep tcp_bbr
else
    echo "❌ BBR 未加载"
fi

echo ""
echo "5. 可用拥塞控制算法:"
sysctl net.ipv4.tcp_available_congestion_control

保存为 check_bbr.sh,赋予执行权限后运行:

bash
chmod +x check_bbr.sh
./check_bbr.sh

恭喜你,这台 VPS 的网络性能已经被榨出很大潜力了!


BBR 性能测试与对比

测试工具准备

安装 speedtest-cli:

bash
# Debian/Ubuntu
apt install -y speedtest-cli

# 或使用 pip 安装
pip install speedtest-cli

测试步骤

1. 关闭 BBR 进行基准测试

bash
# 临时切换到 CUBIC
sysctl -w net.ipv4.tcp_congestion_control=cubic

# 运行速度测试
speedtest-cli

2. 开启 BBR 再次测试

bash
# 切换到 BBR
sysctl -w net.ipv4.tcp_congestion_control=bbr

# 再次运行速度测试
speedtest-cli

3. 对比结果

记录以下指标:

  • 下载速度(Download)
  • 上传速度(Upload)
  • 延迟(Latency)
  • 抖动(Jitter)

实际测试案例

在某美国西海岸 VPS(1Gbps 端口)上的测试结果:

指标CUBIC(关闭 BBR)BBR(开启)提升幅度
下载速度45 Mbps78 Mbps+73%
上传速度38 Mbps65 Mbps+71%
延迟185 ms162 ms-12%
晚高峰稳定性波动大稳定显著改善

BBR 进阶优化

1. 调整 BBR 参数

BBR 有一些可调参数,可以根据实际情况优化:

bash
# 编辑 sysctl 配置
nano /etc/sysctl.d/99-bbr.conf

# 添加以下优化参数
net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq

# BBR 优化参数
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_slow_start_after_idle = 0

参数说明:

  • tcp_rmem: TCP 接收缓冲区大小(最小/默认/最大)
  • tcp_wmem: TCP 发送缓冲区大小(最小/默认/最大)
  • tcp_max_syn_backlog: SYN 队列长度
  • tcp_slow_start_after_idle: 禁用空闲后的慢启动

应用配置:

bash
sysctl --system

2. BBRv2 与 BBRv3

Google 持续改进 BBR 算法:

  • BBR v1: 基础版本,已足够优秀
  • BBR v2: 改进了公平性和 RTT 估计
  • BBR v3: 最新实验版本,进一步优化

检查是否可用:

bash
# 查看可用的 BBR 版本
sysctl net.ipv4.tcp_available_congestion_control | grep bbr

目前大多数发行版默认提供 BBR v1,如需使用 v2/v3,可能需要编译新内核。

3. 针对特定场景优化

科学上网节点优化

bash
# 针对代理流量优化
cat > /etc/sysctl.d/99-proxy.conf <<EOF
net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_fastopen_blackhole_timeout_sec = 0
EOF

sysctl --system

Web 服务器优化

bash
# 针对 HTTP/HTTPS 流量优化
cat > /etc/sysctl.d/99-web.conf <<EOF
net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq
net.core.somaxconn = 65535
net.ipv4.tcp_max_tw_buckets = 1440000
net.ipv4.tcp_tw_reuse = 1
EOF

sysctl --system

常见问题排查

Q1: 开启 BBR 后网速反而变慢?

可能原因:

  1. 网络本身质量差,BBR 无法发挥作用
  2. 其他网络瓶颈(如带宽限制、防火墙)
  3. BBR 参数不适合当前网络环境

解决方案:

bash
# 1. 检查网络质量
ping -c 10 google.com

# 2. 临时切换回 CUBIC 测试
sysctl -w net.ipv4.tcp_congestion_control=cubic

# 3. 对比两种算法的表现
# 如果 CUBIC 更好,保持使用 CUBIC

Q2: BBR 模块加载失败?

错误信息:

modprobe: FATAL: Module tcp_bbr not found

原因: 内核版本过低(< 4.9)

解决方案:

bash
# 检查内核版本
uname -r

# 如果版本低于 4.9,需要升级内核
# Debian/Ubuntu
apt update
apt install linux-image-amd64

# 重启系统
reboot

Q3: 重启后 BBR 失效?

原因: 配置未正确保存到 /etc/sysctl.conf

解决方案:

bash
# 检查配置文件
cat /etc/sysctl.conf | grep bbr

# 如果没有,重新添加
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

# 或者使用专用配置文件(推荐)
cat > /etc/sysctl.d/99-bbr.conf <<EOF
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
EOF

# 应用配置
sysctl --system

Q4: 如何完全禁用 BBR?

bash
# 切换回 CUBIC
sysctl -w net.ipv4.tcp_congestion_control=cubic

# 从配置文件中删除 BBR 相关行
nano /etc/sysctl.conf
# 删除或注释掉包含 bbr 的行

# 或删除专用配置文件
rm /etc/sysctl.d/99-bbr.conf

# 重新加载配置
sysctl --system

BBR 与其他优化工具配合

1. BBR + FinalSpeed/KCP

对于科学上网场景,BBR 可以与 KCP 协议配合使用:

bash
# 确保 BBR 开启
sysctl net.ipv4.tcp_congestion_control

# 在 Shadowsocks/V2Ray 中启用 KCP 模式
# KCP 负责应用层优化,BBR 负责传输层优化

2. BBR + CDN

如果使用了 CDN(如 Cloudflare):

  • BBR 优化源站到 CDN 的连接
  • CDN 优化用户到边缘节点的连接
  • 两者互补,效果更佳

3. BBR + 多线路负载均衡

对于多线 VPS:

bash
# 可以为不同网卡设置不同的拥塞控制
# 但通常全局设置已足够
sysctl net.ipv4.tcp_congestion_control=bbr

总结

开启 BBR 是 VPS 网络优化的第一步,也是最重要的一步

关键要点回顾:

  1. ✅ 确认内核版本 ≥ 4.9
  2. ✅ 使用 sysctl 配置 BBR
  3. ✅ 验证 lsmod | grep bbr 输出
  4. ✅ 根据场景调整优化参数
  5. ✅ 定期测试网络性能

下一步学习:

享受更快的网络体验吧!🚀✨


免责声明

本文仅供技术交流和学习参考,请遵守当地法律法规,合理合法使用网络服务。