本文详细介绍如何在 Linux 系统上开启 TCP BBR(Bottleneck Bandwidth and Round-trip propagation time)拥塞控制算法,有效提升网络传输性能,特别是在高延迟或丢包环境下的表现。
什么是 TCP BBR:
TCP BBR 是由 Google 开发的新一代拥塞控制算法,于 2016 年发布并集成到 Linux 4.9 及更高版本的内核中。与传统的基于丢包检测的拥塞控制算法(如 Cubic)不同,BBR 通过测量网络的实际带宽和往返时间来优化数据传输。
BBR 的主要优势:
- 提升带宽利用率: 在高延迟网络环境下可以充分利用可用带宽
- 降低延迟: 减少缓冲区积压,降低网络延迟
- 改善丢包环境表现: 在存在一定丢包率的网络中仍能保持较好性能
- 提升国际线路速度: 对于跨国连接(如连接日本独立服务器或新加坡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 位系统(最常见):
下载更新的版本(推荐):
可以选择更新的稳定版本,例如 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
对比测试建议:
- 开启 BBR 前进行基准测试
- 开启 BBR 后进行对比测试
- 在不同时段多次测试取平均值
- 测试不同地理位置的连接
- 记录延迟、带宽、丢包率等指标
典型改善效果:
- 跨国连接速度提升 50%-200%
- 高延迟环境下提升更明显
- 丢包环境下性能更稳定
- 网页加载速度明显提升
常见问题排查:
问题 1:升级内核后无法启动
- 原因: 内核不兼容或 GRUB 配置错误
- 解决: 重启时选择旧内核启动,检查新内核日志
问题 2:BBR 模块未加载
- 检查: lsmod | grep tcp_bbr
- 解决: modprobe tcp_bbr 手动加载模块
问题 3:配置后速度没有明显提升
- 原因: 可能是本地网络瓶颈或服务器性能限制
- 建议: 检查本地带宽、服务器 CPU/内存使用情况
问题 4:某些应用出现连接问题
- 原因: 极少数应用可能与 BBR 不兼容
- 解决: 临时切换回 cubic 测试
问题 5:内核升级导致某些驱动失效
- 原因: 驱动与新内核不兼容
- 解决: 安装对应新内核的驱动版本
安全和稳定性建议:
生产环境注意事项:
- 充分测试: 在测试环境验证后再应用到生产环境
- 选择稳定版: 优先选择 LTS(长期支持)内核
- 保留旧内核: 至少保留一个可用的旧内核版本
- 监控性能: 持续监控服务器性能指标
- 逐步推广: 先在部分服务器试用,确认稳定后再全面推广
- 备份配置: 保存所有配置文件的备份
- 文档记录: 记录升级过程和配置变更
回退方案:
如果开启 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 都能带来明显的性能改善。建议在实施前充分测试,确保与您的业务环境兼容。