6.2 TCP BBR算法基本原理前面我们提到了一些Loss-Based算法存在的问题 , TCP BBR算法是一种主动式机制 , 简单来说BBR算法不再基于丢包判断并且也不再使用AIMD线性增乘性减策略来维护拥塞窗口 , 而是分别采样估计极大带宽和极小延时 , 并用二者乘积作为发送窗口 , 并且BBR引入了Pacing Rate限制数据发送速率 , 配合cwnd使用来降低冲击 。
说起BBR算法总让我想起一款小游戏flAppy bird:
文章插图
我们需要不断调整bird的飞行高度 , 但是过高过低震荡太多就很容易挂掉 , 所以如果能够平滑一些或许会飞得更远哦!
在开始BBR算法之前 , 我们先来了解几个有用的术语:
- BDP带宽延时积
文章插图
- 长肥网络
- TCP Pacing机制
6.2.1 TCP带宽和延时的测量BBR算法的一些思想在之前的基于延时的拥塞控制算法中也有出现 , 其中必有有名的是TCP WestWood算法 。
TCP Westwood改良自New Reno , 不同于以往其他拥塞控制算法使用丢失来测量 , 其通过对确认包测量来确定一个合适的发送速度 , 并以此调整拥塞窗口和慢启动阈值 。其改良了慢启动阶段算法为敏捷探测和设计了一种持续探测拥塞窗口的方法来控制进入敏捷探测 , 使链接尽可能地使用更多的带宽 。TCP WestWood算法也是基于带宽和延时乘积进行设计的 , 但是带宽和延时两个指标无法同时测量 , 因为这两个值是有些矛盾的极值 , 要测量最大带宽就要发送最大的数据量但是此时的RTT可能会很大 , 如果要测量最小的RTT那么就意味着数据量非常少最大带宽就无法获得 。
TCP BBR算法采用交替采样测量两个指标 , 取一段时间内的带宽极大值和延时极小值作为估计值 , 具体的实现本文就不展开了 。
6.2.2 发送速率和RTT曲线前面提到了BBR算法核心是寻找BDP最优工作点 , 在相关论文中给出了一张组合的曲线图 , 我们一起来看下:
文章插图
1. 曲线图示说明:这张图是由两个图组合而成 , 目前是展示[数据发送速率vs网络数据]和[RTTvs网络数据]的关系 , 横轴是网络数据数量 。
两个纵轴从上到下分别为RTT和发送速率 , 并且整个过程分为了3个阶段:应用限制阶段、带宽限制阶段、缓冲区限制阶段 。
2. 曲线过程说明:
- app limit应用限制阶段
在这个阶段是应用程序开始发送数据 , 目前网络通畅RTT基本保持固定且很小 , 发送速率与RTT成反比 , 因此发送速率也是线性增加的 , 可以简单认为这个阶段有效带宽并没有达到上限 , RTT是几乎固定的没有明显增长 。 - band limit带宽限制阶段
随着发送速率提高 , 网络中的数据包越来越多开始占用链路Buffer , 此时RTT开始增加发送速率不再上升 , 有效带宽开始出现瓶颈 , 但是此时链路中的缓存区并没有占满 , 因此数据还在增加 , RTT也开始增加 。 - buffer limit缓冲区限制阶段
随着链路中的Buffer被占满 , 开始出现丢包 , 这也是探测到的最大带宽 , 这个节点BDP+BufferSize也是基于丢包的控制策略的作用点 。
推荐阅读
- 轻松学习http知识让枯燥的内容变得生动有趣:TCP/IP四层模型
- Java中的BigDecimal,你真的会用吗?最强指南
- 为何视频流/网游大都使用UDP协议,而不用TCP协议?
- TCP粘包、拆包与解决方案
- 地球最强悍的生物 超级地球上有生命
- ICMP ARP协议 TCP&UDP协议相关介绍,两分钟快速掌握
- TCP粘包的解决方案
- TCP 拥塞避免算法
- 看一遍忘一遍的网络七层模型与TCP/UDP,重新总结出来
- 世界上最烈的啤酒排名是什么?