传统 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

Google BBR是什么?以及在 CentOS 7 上如何部署相关推荐

  1. 【CentOS】利用Kubeadm部署Kubernetes (K8s)

    [CentOS]利用Kubeadm部署Kubernetes (K8s)[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体实验流程 1 系统准 ...

  2. 如何在CentOS 7上安装Kubernetes Docker群集

    如何在CentOS 7上安装Kubernetes Docker群集 Kubernetes是一个开源平台,用于管理由Google开发的容器化应用程序.它允许您在集群环境中管理,扩展和自动部署容器化应用程 ...

  3. 在CentOS 7上安装使用Kubernetes:管理云平台多个主机上的容器化应用

    Table of Contents 安装Kubernetes Master和Minions 验证网络 ServiceAccount错误 玩K8S 运行Kubernetes留言簿(无GCE,无DNS) ...

  4. 如何在CentOS 7上安装Varnish Cache

    Varnish cache is a free and opensource high-performance HTTP accelerator used to speed up the rate a ...

  5. 如何安装和配置Zabbix以安全监控CentOS 7上的远程服务器

    The author selected the Open Source Initiative to receive a donation as part of the Write for DOnati ...

  6. Centos系统上安装php遇到的错误解决方法集锦

    Centos系统上安装php遇到的错误解决方法集锦 1.configure: error: xml2-config not found. Please check your libxml2 insta ...

  7. 在Google Cloud Platform上持续部署Node.js

    by Gautam Arora 由Gautam Arora 在Google Cloud Platform上持续部署Node.js (Continuous Deployment for Node.js ...

  8. linux git yum安装包下载,在CentOS 8上用Yum及源代码安装Git的方法

    本文介绍在CentOS 8操作系统上用Yum安装Git,及从源代码安装Git.建议的最简单的安装Git方法是使用yum软件包管理工具进行安装,如果要从源代码安装最新的稳定版Git,请从源代码安装. 用 ...

  9. 如何在CentOS 7上使用uWSGI和Nginx来运行Django应用程序

    @(tigerfive)[tigerfive][linux学习笔记][uwsgi][django][nginx] 前言 先决条件和目标 安装和配置VirtualEnv和VirtualEnvWrappe ...

  10. 如何在 CentOS 7 上安装 Nginx

    本文首发:开发指南:如何在 CentOS 7 上安装 Nginx Nginx 读作 engine x, 是一个免费的.开源的.高性能的 HTTP 和反向代理服务,主要负责负载一些访问量比较大的站点. ...

最新文章

  1. 张仰彪第二排序法_C语言中的最常用的两种排序算法你知道吗?
  2. 编程基础 垃圾回收_为什么我回收编程问题
  3. Mybatis底层原理学习(二):从源码角度分析一次查询操作过程
  4. php tp3 操作绑定到类,快速入门 17:操作绑定到类
  5. android 开发错误点滴积累--Asset资源管理
  6. Java的知识点25——程序、进程与线程 || 线程的创建和启动
  7. C++著名程序库的比较和学习经验
  8. 易创课堂上海站干货回顾
  9. 均方误差、平方差、方差、均方差、协方差(重点)
  10. [容易]在二叉查找树中插入节点
  11. discuz mysql data_discuz调取数据库数据
  12. hibernate优化
  13. HDU 3401 Trade dp+单调队列优化
  14. apache rewrite支持post数据
  15. fiddler注释_fiddler下载_fiddler中文版下载「抓包工具」-太平洋下载中心
  16. 一个简单的if控制语句
  17. CVF转IVF可能遇到的问题
  18. 传智健康 第12章_PDF报表生成_JasperReports
  19. 2021年危险化学品经营单位主要负责人免费试题及危险化学品经营单位主要负责人考试总结
  20. iOS APP:简单粗暴的自制下拉刷新

热门文章

  1. 三种浏览器刷新操作,对缓存的影响
  2. nmds与mds的区别_聚类分析和NMDS分析的基本步骤.doc
  3. 计算机应用主要学PS,计算机应用专业PS模块考试标准.doc
  4. Python批量 png转ico
  5. 【乐理入门】——音符与五线谱(1)
  6. CTE 递归查询全解
  7. pandas——解决excel科学计数法问题
  8. 为什么油猴脚本会运行两次?
  9. NUISTOJ/P1623切蛋糕
  10. 「ZigBee模块」串口通讯 -- 详解