内容简介:传统 TCP 拥塞控制算法,基于基于「丢包反馈」的协议是一种这种协议可以
传统 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.org sudo 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
How to Deploy Google BBR on CentOS 7 By Vultr
对 Google TCP BBR 的浅薄认识技术致谢
Neal Cardwell,高级软件工程师;
Yuchung Cheng,高级软件工程师;
C. Stephen Gunn,高级职员可靠性工程师;
Soheil Hassas Yeganeh,高级软件工程师;
Van Jacobson, 研究科学家;
Amin Vahdat, 谷歌研究员。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- linux 部署golang 项目(直接部署和基于nginx部署)
- 部署策略对比:蓝绿部署、金丝雀发布及其他
- 使用Docker容器化部署实践之Django应用部署(一)
- 【前端打包部署】谈一谈我在SPA项目打包=>部署的处理
- 「实战篇」开源项目docker化运维部署-后端java部署(七)
- Kubernetes 中的渐进式交付:蓝绿部署和金丝雀部署
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JavaScript王者归来
月影 / 清华大学出版社 / 2008-7 / 86.00元
你手中的这本《JavaScript王者归来》不仅是一本传播知识的书,更是一本求道的书。 本书分为五个部分循序渐进地与读者讨论了JavaScript的方方面面,从简单的语言基础到丰富的实际应用再到深入剖析语言本质的高级话题,字里行间包含着作者多年工作中对JavaScript实践乃至程序设计思想的深入思考和总结。 本书揭开了JavaScript的面纱,绕过误解和虚幻的表象,引领你探索程序王......一起来看看 《JavaScript王者归来》 这本书的介绍吧!