一、何为 BBR ?
BBR 即 Bottleneck Bandwidth and RTT,一种 TCP 拥塞控制算法,类似于锐速,可用于优化 TCP 连接,是最近比较火的加速优化工具,由 Google 出品 ,比较奇怪的是项目主页上说 “This is not an official Google product”,但又放在 Google Github 主页上,估计是测试版本 。
二、原理是什么?
TCP BBR 致力于解决两个问题:
1、在有一定丢包率的网络链路上充分利用带宽。
2、降低网络链路上的 buffer 占用率,从而降低延迟。
在这项技术中,BBR 接管了 TCP 的控制权,以实际情况说,也就是应用程序在创立会话时,这项技术会增加额外少量的的会话,这些会话用于检测带宽和延迟,根据网路设备返回的情况来分析网路质量(确认延迟和带宽口径,以及回避不易确认丢包类型)。
三、加速效果如何?
通过上面的原理分析,我们知道 BBR 的最终目的是最大化利用网络上瓶颈链路的带宽。在实际使用中,通过 BBR 加速基本可以提升 1 倍以上,特别是国外丢包严重的线路,加速效果非常明显,国内线路的话,因为本身比较稳定,效果可能就没那么明显了。
四、会消耗更多流量吗?
关于流量消耗,我们知道像 net-speeder、kcp-tun 等等加速工具是通过多发包来实现加速,因此使用这些加速是两倍三倍甚至更多的消耗流量,而 BBR 属于动态调整发包量,虽然也会多消耗流量但相对来说会少一些,而且线路使用率会更高。
五、如何开启 BBR ?
BBR 目前已集成在 kernel 4.9 及以上版本,所以如果 kernel 低于 4.9 需要先升级(通过命令 uname -a 查看),然后再开启 BBR,由于涉及内核,故操作时要特别小心,以免操作失误开不了机。
① Debian / Ubuntu 升级内核
以 64 位为例,下载最新内核,最新内核查看 这里,
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.13.10/linux-image-4.13.10-041310-generic_4.13.10-041310.201710270531_amd64.deb \
http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.13.10/linux-headers-4.13.10-041310_4.13.10-041310.201710270531_all.deb \
http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.13.10/linux-headers-4.13.10-041310-generic_4.13.10-041310.201710270531_amd64.deb
安装内核
dpkg -i linux-*.deb
reboot //安装完重启
删除旧内核以及无用套件(可选)
dpkg -l|grep linux-* //显示安装的内核
apt-get purge 旧内核 //彻底删除旧内核
apt autoremove
② CentOS 6 升级内核
下载安装内核,最新内核查看 这里
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml -y
查看内核是否安装成功
rpm -qa | grep kernel
更新 grub 系统引导文件并重启:
sed -i 's:default=.*:default=0:g' /etc/grub.conf
reboot
若开不了机, 应是卡在 grub 引导, 只需要手动选择内核就可以了。
删除内核(可选)
rpm -ev 旧内核
③ CentOS 7 升级内核
下载安装内核,最新内核查看 这里
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml -y
查看内核是否安装成功
rpm -qa | grep kernel
更新 grub 系统引导文件并重启(注意有的云主机是 /etc/grub.cfg)
egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'
grub2-set-default 0 #default 0 表示第一个内核设置为默认运行, 选择最新内核就对了
reboot
删除内核(可选)
rpm -qa | grep kernel //查看内核列表
rpm -ev 旧内核
2017/08/22 更新:
若使用 yum 安装提示找不到包(通常是国内主机),则可以采取 rpm 直接安装的方法解决:
① 打开内核列表界面: CentOS6 , CentOS7 .
② 右键选中最新版本内核,复制链接地址:
③ 在 SSH 命令行中输入:
rpm -ivh 刚复制的链接地址
其他步骤不变。
④ 开启并验证 BBR
重启后执行
uname -r
查看新内核是否启用成功,启用成功则继续执行
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p
验证是否开启成功,分别执行
sysctl net.ipv4.tcp_available_congestion_control && \
sysctl net.ipv4.tcp_congestion_control
若两者返回结果都有 bbr , 则证明你的内核已开启 BBR,执行
lsmod | grep bbr
看到有 tcp_bbr 模块即说明 BBR 已启动。
六、总结
基于 KVM 的 VPS 基本都支持开启 BBR,比如 Vultr、GCE、AWS 等, 除了 GCE 台湾机房开启效果不明显(本来就很快了),其他机房加速还是挺不错的,拥有 VPS 的同学可以尝试开启体验一下。
另外,现在网上也有不少一键安装包,大家可以下载下来参考,不过也有看到反馈说一键安装后 VPS 启动不了或者磁盘变成了只读,由于手动安装也不难,因此博主还是推荐大家自己动手。
七、问答
问:GCE 重启后发现变成 read-only system怎么办?
答:root 用户执行以下命令即可修复:
~# mount -o remount rw /
CentOS 7 可通过如下方法实现开机自动修复(目前发现也只是 CentOS 有这问题):
~# chmod +x /etc/rc.d/rc.local
~# vim /etc/rc.d/rc.local
mount -o remount rw / # exit 0 前添加这一行
你可能还需要:《部署 chacha20,salsa20,chacha20-ietf 等高级加密方式》
参考文章:
1、开启 TCP BBR 拥塞控制算法
2、Linux Kernel 4.9中BBR拥塞控制算法的优势
3、How to Deploy Google BBR on CentOS 7
4、Centos7开机启动自己的脚本
Ubuntu 17 默认内核已是 4.x ,安装前务必确认清楚。