使用 TCP-BBR 优化服务器网络
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 适用于高延时、高丢包率的网络,比如卫星链路 —— 同样适用于中美之间的链路。
1 谷歌 TCP-BBR 拥堵算法
2016 年下半年,google 提出了开源算法 TCP-BBR, 并且已经提交到 Linux 新的内核,TCP BBR 可以在有一定丢包率的网络链路上充分利用物理带宽,它通过降低网络链路上的 buffer 占用率,从而降低网络延迟。可以起到单边加速 TCP 连接的效果,也就是不用客户端的配合。测试下来使用 BBR 的情况下带宽表现非常的优秀,强烈建议大家试一试。
注意 BBR 需要更改内核和全虚拟化的 VPS,因此和锐速一样不能用在 OpenVZ 的 VPS 机器上,所以搬瓦工等是用不了的。
TCP-BBR 目前已经在 YouTube 服务器和 Google 跨数据中心的内部广域网(B4)上部署,由此可见出该 TCP 加速算法优秀。
1.1 原理与优势
知乎上Linux Kernel 4.9 中的 BBR 算法与之前的 TCP 拥塞控制相比有什么优势?李博杰的回答很棒, 推荐阅读
1.2 在服务器配置
1.2.1 更新 linux 为最新内核
linux 内核版本在这里来查看和下载
Linux 从 4.9 的内核开始支持 TCP BBR,, 输入uname -r
,查看当前内核是不是 >= 4.9,如果是的话可以跳过下面。
现在最新的内核版本是v4.13(2017.9.3 更新):
下载安装包:
|
|
安装:
|
|
查看当前系统中都有哪些内核:
|
|
输出的内容中可能会包括内核映像的如下三种状态:
- rc:表示已经被移除
- ii:表示符合移除条件(可移除)
- iU:已进入 apt 安装队列,但还未被安装(不可移除) 删除旧的内核
|
|
例如:要移除状态为 ii 的旧版linux-image-4.4.0-21-generic
内核,可以使用如下命令:
|
|
更新 grub 系统引导:
|
|
重启:
|
|
查看当前内核版本:
|
|
1.2.2 启用 TCP BBR
编辑/etc/sysctl.conf
, 在文件末尾加上下面两行
|
|
保存退出后执行
|
|
使配置生效
1.2.3 检查是否设置成功
|
|
|
|
执行
|
|
如果看到tcp_bbr
则说明启用成功.