传统 TCP 拥塞控制算法,基于 丢包反馈 的协议。

基于「丢包反馈」的协议是一种 被动式 的拥塞控制机制,其依据网络中的 丢包事件 来做网络拥塞判断。即便网络中的负载很高时,只要没有产生拥塞丢包,协议就不会主动降低自己的发送速度。

这种协议可以 最大程度的利用网络剩余带宽,提高吞吐量。 然而,由于基于丢包反馈协议在网络近饱和状态下所表现出来的侵略性,一方面大大提高了网络的带宽利用率;但另一方面,对于基于丢包反馈的拥塞控制协议来说,大大提高网络利用率同时意味着下一次拥塞丢包事件为期不远了,所以这些协议 在提高网络带宽利用率的同时也间接加大了网络的丢包率,造成整个网络的抖动性加剧。

还有谁导致了丢包?

丢包并不总是拥塞导致,丢包可能原因是多方面,比如:

  • 全球最牛的防火墙 GWF 的随机丢包策略

  • 网路中由于多路径衰落(multi-path fading)所造成的信号衰减(signal degradation)

  • 通道阻塞造成的丢包(packet drop),再者损坏的封包(corrupted packets)被拒绝通过

  • 有缺陷的网路硬件、网路驱动软件发生故障

  • 信号的信噪比(SNR)的影响

Google BBR 的出现

我们自然不喜欢 GWF 这种人为的随机丢包策略,当路过 GWF 时,数据被丢包,我们在此时应该 立刻重新发包,增大发送的频率,而不希望降低速度,也就是不希望传统的 TCP 拥塞算法去控制。

由此,就出现了基于不丢包的拥塞控制算法 CDG , 以 延迟 作为判断依据,延迟增大说明拥塞, 数据开始在路由器的缓冲中积累. 降低发送 窗口 。然而 CDG 算法与基于丢包的算法不兼容, 只有全球的设备都换上 CDG,但这是不可能的,目前市面上的设备不可能一下子都切换到 CDG,因此 Google 就不开心了,Google 的科学家们开发了一种过渡算法来解决这个问题,这个算法的名字就是 BBR(Bottleneck Bandwidth and RTT) ,它是一种全新的 拥塞控制算法,BBR 同 CDG 一致的思想是不以丢包作为拥塞控制信号,但是和 CDG 不同的是,BBR 能和 cubic 和 reno 共存。

使用BBR前后网络吞吐量对比图 / By Google

BBR 由 Google 开发,供 Linux 内核的 TCP 协议栈使用,有了 BBR 算法,Linux 服务器可以显著提高吞吐量并减少连接延迟,简单来说 BBR 能加速网络传输速度。此外,部署 BBR 也很容易,因为该算法只需要发送方,而不需要网络或接收方的支持。

CentOS 7 服务器 实例上部署 BBR

下面我将向您分享我如何在 CentOS 7 KVM 服务器实例上部署 BBR。

步骤〇: 前置条件

  • CentOS 7 x64 服务器实例。

  • 一个 sudo 用户

步骤 ① :使用 ELRepo RPM 仓库升级内核

要使用BBR,您需要将CentOS 7机器的内核升级到4.9.0。您可以使用ELRepo RPM第三方仓库轻松完成该操作。

在升级之前,您可以查看当前内核:

uname -r

此命令应可能输出类似于以下字符串:

3.10.0-514.2.2.el7.x86_64

如您所见,当前内核为3.10.0,因此我们需要更新内核。

更新内核之前,先安装 ELRepo 仓库:

sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.orgsudo rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

使用ELRepo repo安装4.9.0内核:

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

确认结果:

rpm -qa | grep kernel

如果安装成功,您应该看到类似于一下列,且 kernel-ml-4.18.5-1.el7.elrepo.x86_64 在输出列表中看到:

kernel-ml-4.18.5-1.el7.elrepo.x86_64
kernel-3.10.0-514.el7.x86_64
kernel-tools-libs-3.10.0-514.2.2.el7.x86_64
kernel-tools-3.10.0-514.2.2.el7.x86_64
kernel-3.10.0-514.2.2.el7.x86_64

现在,您需要通过设置默认引导为 grub2 ,来启用4.18.5内核。

显示 grub2 菜单中的所有条目:

sudo egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'

结果应该类似于:

CentOS Linux 7 Rescue a0cbf86a6ef1416a8812657bb4f2b860 (4.18.5-1.el7.elrepo.x86_64)CentOS Linux (4.18.5-1.el7.elrepo.x86_64) 7 (Core)CentOS Linux (3.10.0-514.2.2.el7.x86_64) 7 (Core)CentOS Linux (3.10.0-514.el7.x86_64) 7 (Core)CentOS Linux (0-rescue-bf94f46c6bd04792a6a42c91bae645f7) 7 (Core)

由于行计数开始于 0 ,且4.18.5内核条目位于第一行,因此将默认引导条目应设置为 0 :

sudo grub2-set-default 0

重启系统:

sudo shutdown -r now 
// 或 reboot

当服务器重新联机时,请重新登录并重新运行uname命令以确认您使用的是正确的内核:

uname -r

您应该看到如下结果:

4.18.5-1.el7.elrepo.x86_64

步骤 ②:启用BBR

要启用 BBR 算法,您需要修改 sysctl 配置,如下所示:

echo 'net.core.default_qdisc=fq' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv4.tcp_congestion_control=bbr' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

现在,您可以使用以下命令,确认是否已经启用了BBR:

sudo sysctl net.ipv4.tcp_available_congestion_control

正常情况下应输出类似以下的字符串:

net.ipv4.tcp_available_congestion_control = bbr cubic reno

接下来,继续验证:

sudo sysctl -n net.ipv4.tcp_congestion_control

应该输出类似以下字符串:

bbr

最后,检查内核模块是否已加载:

lsmod | grep bbr

应该输出类似于:

tcp_bbr     20841  0

步骤 ③(可选):测试网络性能是否增强

为了测试BBR的网络性能是否增强,您可以在Web服务器目录中创建一个文件以供下载,然后从台式机上的Web浏览器测试下载速度。

sudo yum install httpd -y
sudo systemctl start httpd.service
sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --reload
cd /var/www/html
sudo dd if=/dev/zero of=500mb.zip bs=1024k count=500

最后, http://[your-server-IP]/500mb.zip 从桌面计算机上的 Web 浏览器访问 URL ,然后评估下载速度。

当然服务器在国外的话,也可以在 YouTube 上直接打开一个 4K 画质视频,进行感官速度测试,如下图:

使用BBR后的YouTube速度 © JANDOU

就这样,尽情享受高速网络带来的新体验。

步骤 ④ (可选):删除无用的旧内核

升级内核之后,往往老旧的内核也保留下来了,执行以下命令,将自动筛选并删除当前无用的系统内核版本。

yum remove $(rpm -qa | grep kernel | grep -v $(uname -r))

详情请参考文章: CentOS 7 删除无用的旧内核

非专业技术人员福利

如果您不是专业技术人员,可以采取一键安装脚本进行安装,执行以下命令:

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

详情请参考文章: 一键安装最新内核并开启 BBR 脚本

参考链接:

TCP BBR congestion control comes to GCP – your Internet just got faster

TCP拥塞控制算法 优缺点 适用环境 性能分析

How to Deploy Google BBR on CentOS 7 By ×××

TCP流量控制和拥塞控制机制

对 Google TCP BBR 的浅薄认识

技术致谢

Neal Cardwell,高级软件工程师;

Yuchung Cheng,高级软件工程师;

C. Stephen Gunn,高级职员可靠性工程师;

Soheil Hassas Yeganeh,高级软件工程师;

Van Jacobson, 研究科学家;

Amin Vahdat, 谷歌研究员。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

为你推荐:

  • CentOS 7安装TCP BBR拥塞算法

  • 在CentOS 7上安装Dropbox

  • centos7开启bbr加速黑科技

  • 如何在 CentOS 7 上安装 Nginx

相关软件推荐:

  • UDP 以太网 EthUDP

  • 开放实时以太网 ORTE

  • tcpdaemon是一个TCP通讯服务端平台/库 tcpdaemon