Linux内核中提供了若干套TCP拥塞控制算法,这些算法各自适用于不同的环境。 其中Google在2016年下半年提出的开源算法TCP-BBR,格外引人注目,于是我在自己的VPS上开启了它。
之前Linux内核中已经提供了若干套TCP拥塞控制算法,这些算法各自适用于不同的环境,下面是他们各自的特点。
- reno是最基本的拥塞控制算法,也是TCP协议的实验原型。
- bic适用于rtt较高但丢包极为罕见的情况,比如北美和欧洲之间的线路,这是2.6.8到2.6.18之间的Linux内核的默认算法。
- cubic是修改版的bic,适用环境比bic广泛一点,它是2.6.19之后的linux内核的默认算法。
- hybla适用于高延时、高丢包率的网络,比如卫星链路——同样适用于中美之间的链路。
谷歌TCP-BBR拥堵算法
2016年下半年,google提出了开源算法TCP-BBR,并且已经提交到Linux新的内核,TCP BBR 可以在有一定丢包率的网络链路上充分利用物理带宽, 它通过降低网络链路上的 buffer 占用率,从而降低网络延迟. 可以起到单边加速 TCP 连接的效果,也就是不用客户端的配合。测试下来使用 BBR 的情况下带宽表现非常的优秀,强烈建议大家试一试。
注意BBR需要更改内核和全虚拟化的VPS,因此和锐速一样不能用在 OpenVZ 的VPS机器上,所以搬瓦工等是用不了的。
TCP-BBR项目github主页
TCP-BBR项目开发论坛(英文)
TCP-BBR快速使用手册(英文)
TCP-BBR 目前已经在 YouTube 服务器和 Google 跨数据中心的内部广域网(B4)上部署,由此可见出该TCP加速算法优秀。
原理与优势
知乎上Linux Kernel 4.9 中的 BBR 算法与之前的 TCP 拥塞控制相比有什么优势?李博杰的回答很棒
在服务器配置
更新linux为最新内核
linux内核版本在这里来查看和下载
Linux从4.9的内核开始支持TCP BBR,,输入uname -r
,查看当前内核是不是>= 4.9,如果是的话可以跳过下面。
现在最新的内核版本是v4.13(2017.9.3更新):
下载安装包:
1 | sudo wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.13/linux-headers-4.13.0-041300_4.13.0-041300.201709031731_all.deb |
安装:
1 | sudo dpkg -i linux-headers-*.deb |
查看当前系统中都有哪些内核:
1 | dpkg -l | grep linux-image |
输出的内容中可能会包括内核映像的如下三种状态:
- rc:表示已经被移除
- ii:表示符合移除条件(可移除)
- iU:已进入 apt 安装队列,但还未被安装(不可移除)
删除旧的内核
1 | sudo apt-get remove <old-kernel-image> --purge |
例如: 要移除状态为 ii 的旧版linux-image-4.4.0-21-generic
内核,可以使用如下命令:
1 | sudo dpkg --purge linux-image-4.4.0-21-generic |
更新grub系统引导:
1 | sudo update-grub |
重启:
1 | sudo reboot |
查看当前内核版本:
1 | uname -r |
启用 TCP BBR
编辑/etc/sysctl.conf, 在文件末尾加上下面两行
1 | net.core.default_qdisc=fq |
保存退出后执行
1 | sudo sysctl -p |
使配置生效
检查是否设置成功
1 | # sysctl net.ipv4.tcp_available_congestion_control |
1 | # sysctl net.ipv4.tcp_congestion_control |
执行
1 | lsmod | grep bbr |
如果看到tcp_bbr则说明启用成功.