本文详细介绍如何在 Linux 系统上开启 TCP BBR(Bottleneck Bandwidth and Round-trip propagation time)拥塞控制算法,有效提升网络传输性能,特别是在高延迟或丢包环境下的表现。

什么是 TCP BBR:

TCP BBR 是由 Google 开发的新一代拥塞控制算法,于 2016 年发布并集成到 Linux 4.9 及更高版本的内核中。与传统的基于丢包检测的拥塞控制算法(如 Cubic)不同,BBR 通过测量网络的实际带宽和往返时间来优化数据传输。

BBR 的主要优势:

  1. 提升带宽利用率: 在高延迟网络环境下可以充分利用可用带宽
  2. 降低延迟: 减少缓冲区积压,降低网络延迟
  3. 改善丢包环境表现: 在存在一定丢包率的网络中仍能保持较好性能
  4. 提升国际线路速度: 对于跨国连接(如连接日本独立服务器新加坡VPS)效果显著

适用场景:

  • 国际线路服务器(特别是跨洋连接)
  • 高延迟网络环境
  • 存在一定丢包率的网络
  • 需要提升下载/上传速度的服务器
  • 视频流媒体服务器
  • 大文件传输服务器

无论您使用的是韩国独立服务器香港VPS还是其他地区的服务器,开启 BBR 都能显著改善网络性能。


系统要求:

内核版本要求:

  • Linux Kernel 4.9 或更高版本(BBR 首次引入)
  • 推荐使用 4.10 或更新版本(更稳定)
  • Linux Kernel 5.x 系列(最新特性和优化)

适用系统:

  • Debian 8/9/10/11/12
  • Ubuntu 16.04/18.04/20.04/22.04
  • CentOS 7/8(需要升级内核)
  • Rocky Linux 8/9
  • AlmaLinux 8/9
  • 其他基于 Linux 的发行版

权限要求:

  • root 或 sudo 权限
  • 能够安装和更换内核

准备工作:

第一步:检查当前内核版本

查看当前系统内核版本:

uname -r

输出示例:

4.4.0-148-generic

3.10.0-957.el7.x86_64

如果内核版本低于 4.9,需要升级内核。如果已经是 4.9 或更高版本,可以直接跳到开启 BBR 的步骤。

第二步:检查当前拥塞控制算法

查看当前使用的拥塞控制算法:

sysctl net.ipv4.tcp_congestion_control

输出示例:

net.ipv4.tcp_congestion_control = cubic

查看系统支持的所有拥塞控制算法:

sysctl net.ipv4.tcp_available_congestion_control

输出示例:

net.ipv4.tcp_available_congestion_control = cubic reno

如果输出中没有 bbr,说明当前内核不支持 BBR,需要升级内核。

第三步:备份重要数据

升级内核有一定风险,建议先备份重要数据和配置:

备份网络配置

cp -r /etc/sysconfig/network-scripts /root/network-backup cp -r /etc/network /root/network-backup 2>/dev/null

备份系统配置

cp /etc/sysctl.conf /etc/sysctl.conf.backup

如果使用虚拟机,建议创建快照


方法一:Ubuntu/Debian 系统升级内核并开启 BBR

这是最常用的方法,适用于 Ubuntu 和 Debian 系统。本文已在 Debian 8/Ubuntu 14.04 下测试成功。

第一步:下载最新内核

访问 Ubuntu 内核仓库查看最新版本: http://kernel.ubuntu.com/~kernel-ppa/mainline/

下载内核安装包:

对于 64 位系统(最常见):

cd /tmp wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-image-4.9.0-040900-generic_4.9.0-040900.201612111631_amd64.deb

下载更新的版本(推荐):

可以选择更新的稳定版本,例如 5.15 LTS:

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v5.15/amd64/linux-image-unsigned-5.15.0-051500-generic_5.15.0-051500.202110312130_amd64.deb wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v5.15/amd64/linux-modules-5.15.0-051500-generic_5.15.0-051500.202110312130_amd64.deb

注意事项:

  • 确保下载的是 amd64 版本(64 位系统)
  • 如果是 32 位系统,下载 i386 版本
  • 建议下载标记为 "stable" 的版本
  • 可以同时下载 headers 包(可选)

第二步:安装内核

安装下载的内核包:

dpkg -i linux-image-*.deb

如果下载了多个相关包:

dpkg -i linux-image-.deb linux-modules-.deb

可能遇到的依赖问题:

如果安装过程中提示缺少依赖,执行:

apt-get install -f

然后重新安装:

dpkg -i linux-image-*.deb

第三步:清理旧内核(可选但推荐)

查看已安装的所有内核:

dpkg -l | grep linux-image

输出示例:

ii linux-image-4.4.0-148-generic 4.4.0-148.174 amd64 ii linux-image-4.9.0-040900-generic 4.9.0-040900.201612111631 amd64

删除旧内核:

apt-get purge linux-image-4.4.0-148-generic

或使用自动清理工具:

apt-get autoremove --purge

注意:

  • 不要删除当前正在使用的内核
  • 建议至少保留一个旧版本内核作为备份
  • 删除前确认新内核启动正常

第四步:更新 GRUB 引导

更新 GRUB 配置,确保新内核作为默认启动项:

update-grub

输出示例:

Generating grub configuration file ... Found linux image: /boot/vmlinuz-4.9.0-040900-generic Found linux image: /boot/vmlinuz-4.4.0-148-generic Found initrd image: /boot/initrd.img-4.9.0-040900-generic Found initrd image: /boot/initrd.img-4.4.0-148-generic done

第五步:重启系统

reboot

第六步:验证新内核

系统重启后,验证当前运行的内核版本:

uname -r

输出应该显示新安装的内核版本:

4.9.0-040900-generic

5.15.0-051500-generic

第七步:开启 BBR

配置系统参数:

编辑系统配置文件:

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

参数说明:

  • net.core.default_qdisc=fq - 设置默认队列规则为 fq(Fair Queue,公平队列)
  • net.ipv4.tcp_congestion_control=bbr - 设置 TCP 拥塞控制算法为 BBR

应用配置:

sysctl -p

输出应该显示:

net.core.default_qdisc = fq net.ipv4.tcp_congestion_control = bbr

第八步:验证 BBR 是否开启

验证方法 1:检查可用算法

sysctl net.ipv4.tcp_available_congestion_control

输出应该包含 bbr:

net.ipv4.tcp_available_congestion_control = reno cubic bbr

验证方法 2:检查当前使用的算法

sysctl net.ipv4.tcp_congestion_control

输出应该显示:

net.ipv4.tcp_congestion_control = bbr

验证方法 3:检查 BBR 模块是否加载

lsmod | grep bbr

输出应该显示:

tcp_bbr 20480 1

如果看到 tcp_bbr 模块,说明 BBR 已成功启动。

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

sysctl net.core.default_qdisc

输出应该显示:

net.core.default_qdisc = fq

至此,BBR 已成功开启!


方法二:CentOS/RHEL 系统升级内核并开启 BBR

CentOS 7 默认内核版本为 3.10,需要升级到 4.9 或更高版本才能使用 BBR。对于运行在台湾独立服务器马来西亚VPS上的 CentOS 系统,这个方法特别有用。

第一步:启用 ELRepo 仓库

ELRepo 提供最新的稳定内核版本。

导入 GPG 密钥:

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

安装 ELRepo 仓库:

CentOS 7:

yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm

CentOS 8 / Rocky Linux 8 / AlmaLinux 8:

dnf install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm

第二步:安装最新内核

查看可用的内核版本:

yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

dnf --disablerepo="*" --enablerepo="elrepo-kernel" list available

安装主线稳定版内核(ml,mainline):

yum --enablerepo=elrepo-kernel install kernel-ml

dnf --enablerepo=elrepo-kernel install kernel-ml

安装长期支持版内核(lt,long term):

yum --enablerepo=elrepo-kernel install kernel-lt

推荐选择:

  • kernel-ml - 最新特性,但可能不够稳定
  • kernel-lt - 长期支持,更稳定(推荐生产环境使用)

第三步:设置新内核为默认启动

查看已安装的内核:

awk -F' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

输出示例:

0 : CentOS Linux (5.4.200-1.el7.elrepo.x86_64) 7 (Core) 1 : CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core) 2 : CentOS Linux (0-rescue-xxx) 7 (Core)

新内核通常在列表的第一位(序号 0)。

设置默认启动内核:

grub2-set-default 0

验证设置:

grub2-editenv list

输出应该显示:

saved_entry=0

第四步:重新生成 GRUB 配置

grub2-mkconfig -o /boot/grub2/grub.cfg

第五步:重启系统

reboot

第六步:验证新内核并开启 BBR

重启后验证内核版本:

uname -r

输出示例:

5.4.200-1.el7.elrepo.x86_64

开启 BBR(同 Debian/Ubuntu):

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

验证 BBR:

sysctl net.ipv4.tcp_available_congestion_control sysctl net.ipv4.tcp_congestion_control lsmod | grep bbr


方法三:一键脚本安装(快速便捷)

对于不熟悉手动操作的用户,可以使用一键脚本自动完成内核升级和 BBR 开启。

脚本 1:秋水逸冰的 BBR 一键安装脚本(广泛使用)

wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh chmod +x bbr.sh ./bbr.sh

脚本特点:

  • 自动检测系统版本
  • 自动下载合适的内核
  • 自动配置 BBR
  • 支持 Debian、Ubuntu、CentOS

脚本 2:魔改 BBR(BBR Plus/BBR 锐速版)

wget -N --no-check-certificate "https://raw.githubusercontent.com/chiakge/Linux-NetSpeed/master/tcp.sh" chmod +x tcp.sh ./tcp.sh

功能说明:

  • 提供多种 BBR 变体选择
  • BBR 原版
  • BBR 魔改版
  • BBR Plus(增强版)
  • 锐速(Lotserver)

使用建议:

  • 一键脚本方便快捷,但可能不如手动操作可控
  • 建议先在测试环境使用
  • 使用前阅读脚本内容,了解其操作
  • 定期检查脚本更新

BBR 高级配置和优化:

调整 BBR 参数:

BBR 还有一些可调参数,可以根据实际网络环境进行优化。

查看 BBR 相关参数:

sysctl -a | grep bbr

常用优化参数:

编辑 /etc/sysctl.conf,添加或修改以下参数:

TCP BBR 优化配置

net.core.default_qdisc = fq net.ipv4.tcp_congestion_control = bbr

增加 TCP 缓冲区大小

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 Fast Open

net.ipv4.tcp_fastopen = 3

增加最大连接数

net.core.somaxconn = 32768 net.ipv4.tcp_max_syn_backlog = 8192

优化 TIME_WAIT 状态

net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 15

降低 keepalive 时间

net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_keepalive_probes = 3

应用配置:

sysctl -p

参数说明:

  • rmem_max/wmem_max - 最大接收/发送缓冲区大小
  • tcp_rmem/tcp_wmem - TCP 读/写缓冲区配置(最小值、默认值、最大值)
  • tcp_fastopen - TCP 快速打开(减少握手延迟)
  • somaxconn - 最大监听队列长度
  • tcp_tw_reuse - 允许重用 TIME_WAIT 状态的连接

针对不同场景的优化建议:

高带宽场景(如 CDN、视频流):

net.core.rmem_max = 134217728 net.core.wmem_max = 134217728 net.ipv4.tcp_rmem = 4096 87380 134217728 net.ipv4.tcp_wmem = 4096 65536 134217728

高延迟场景(如跨国线路):

net.ipv4.tcp_slow_start_after_idle = 0 net.ipv4.tcp_mtu_probing = 1

高并发场景(如 Web 服务器):

net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 16384 net.ipv4.tcp_syncookies = 1


性能测试和效果验证:

测试工具:

1. iperf3(网络带宽测试)

安装 iperf3:

Debian/Ubuntu

apt-get install iperf3

CentOS/RHEL

yum install iperf3

服务端启动:

iperf3 -s

客户端测试:

iperf3 -c 服务器IP

2. Speedtest-cli(公网速度测试)

pip install speedtest-cli speedtest-cli

3. wget 下载测试

wget -O /dev/null http://测试文件URL

对比测试建议:

  1. 开启 BBR 前进行基准测试
  2. 开启 BBR 后进行对比测试
  3. 在不同时段多次测试取平均值
  4. 测试不同地理位置的连接
  5. 记录延迟、带宽、丢包率等指标

典型改善效果:

  • 跨国连接速度提升 50%-200%
  • 高延迟环境下提升更明显
  • 丢包环境下性能更稳定
  • 网页加载速度明显提升

常见问题排查:

问题 1:升级内核后无法启动

  • 原因: 内核不兼容或 GRUB 配置错误
  • 解决: 重启时选择旧内核启动,检查新内核日志

问题 2:BBR 模块未加载

  • 检查: lsmod | grep tcp_bbr
  • 解决: modprobe tcp_bbr 手动加载模块

问题 3:配置后速度没有明显提升

  • 原因: 可能是本地网络瓶颈或服务器性能限制
  • 建议: 检查本地带宽、服务器 CPU/内存使用情况

问题 4:某些应用出现连接问题

  • 原因: 极少数应用可能与 BBR 不兼容
  • 解决: 临时切换回 cubic 测试

问题 5:内核升级导致某些驱动失效

  • 原因: 驱动与新内核不兼容
  • 解决: 安装对应新内核的驱动版本

安全和稳定性建议:

生产环境注意事项:

  1. 充分测试: 在测试环境验证后再应用到生产环境
  2. 选择稳定版: 优先选择 LTS(长期支持)内核
  3. 保留旧内核: 至少保留一个可用的旧内核版本
  4. 监控性能: 持续监控服务器性能指标
  5. 逐步推广: 先在部分服务器试用,确认稳定后再全面推广
  6. 备份配置: 保存所有配置文件的备份
  7. 文档记录: 记录升级过程和配置变更

回退方案:

如果开启 BBR 后出现问题,可以快速回退:

临时禁用 BBR:

sysctl -w net.ipv4.tcp_congestion_control=cubic

永久禁用 BBR:

编辑 /etc/sysctl.conf,将 bbr 改为 cubic:

net.ipv4.tcp_congestion_control=cubic

应用配置:

sysctl -p

回退到旧内核:

重启服务器,在 GRUB 菜单选择旧内核启动。

通过以上详细的步骤和说明,您可以在 Linux 系统上成功开启 TCP BBR 拥塞控制算法,显著提升网络传输性能。无论是国际线路还是本地连接,BBR 都能带来明显的性能改善。建议在实施前充分测试,确保与您的业务环境兼容。