大概是这么个图 , 好处就是丢包后能快速恢复 , 并在稳定期尽力保持更长时间 , 还能支持探测更高带宽值 。
文章插图
来自[3]
CubicCubic 在 BIC 的基础上 , 一个是通过三次函数去平滑 CWND 增长曲线 , 让它在接近上一个 CWND 最大值时保持的时间更长一些 , 再有就是让 CWND 的增长和 RTT 长短无关 , 即不是每次 ACK 后就去增大 CWND , 而是让 CWND 增长的三次函数跟时间相关 , 不管 RTT 多大 , 一定时间后 CWND 一定增长到某个值 , 从而让网络更公平 , RTT 小的连接不能挤占 RTT 大的连接的资源 。
平滑后的 CWND 和时间组成的曲线如下 , 可以看到三次曲线保留了 BIC 的优点 , 即在丢包后初期 , CWND 能快速增长 , 减小丢包带来的影响;并且在接近上一个 CWND 最大值时 CWND 增长速度又会非常慢 , 要经历很长时间才能超越 Wmax , 从而能尽力保持稳定 , 稳定在 Wmax 上;最后在超越 Wmax 后初期也是增长的非常慢 , 直到后来才快速的指数形式增长 , 用于探测下一个 Wmax 。
文章插图
来自[3]
Cubic 最终出来的曲线如下 。黄色是 CWND , 蓝色线是网络上队列拥塞包数 。蓝色箭头表示 queue fill , 绿色箭头表示 queue drain 。看到有两个浅绿色的线 , 高的是开始丢包 , 低的是队列开始排队 。因为这里画的是说网络上 bandwidth 是固定的 , buffer 也是固定的 , 所以 Cubic 下没有超越 Last Wmax 继续探测下一个 Wmax 的曲线 , 都是还未到达第一次的 Wmax 时候就因为丢包而被迫降低了 CWND 。第一次个黄色尖峰能那么高是因为当时网络上 buffer 是空的 , 后来每次丢包后 Buffer 还没来得及完全清空 CWND 又涨上来导致数据排队了 , 所以后来的黄色尖峰都没有第一个高 。
文章插图
来自[3]
Cubic 的优势:
- 因为跟 RTT 无关所以更公平;
- 更适合 BDP 大的网络 。Reno 不适合是因为它依赖 RTT , BDP 大的时候 RTT 如果很高 , 会很久才能将传输效率提上去;
- 当 Bandwidth 变化时候 , Cubic 需要很长时间才能从稳定点进入探测下一个 Wmax 的阶段;
- 更易导致 Bufferbloat 。Reno 下如果链路上 Buffer 很大出现拥塞后 RTT 也会很长 , 很久才会收到 ACK , 才会增加 CWND;但 Cubic 的 CWND 增长跟 RTT 无关 , 到时间就增长 , 从而更容易加剧链路负担 。Bufferbloat 可以看下节 。
一个挺好的讲 Cubic 的 PPT: Cubic , 还有 论文 。linux 2.6 时候用的 CUBIC 。
BufferbloatBufferbloat 在 Bufferbloat - Wikipedia 讲的挺好了 。简单说就是随着内存越来越便宜 , 链路上有些设备的 Buffer 倾向于配置的特别大 , 而流行的 TCP Congestion Avoidance 算法又是基于丢包的 。数据在队列排队说明链路已经出现拥塞 , 本来应该立即反馈给发送端让发送端减小发送速度的 , 但因为 Buffer 很大 , 数据都在排队 , 发送端根本不知道自己发出去的数据已经开始排队 , 还在以某个速度 (Reno)甚至更高速度(Cubic , 到时间就增加 CWND) 发送 。等真的出现丢包时候 , 发送端依然不知道出现了丢包 , 还会快速发消息 , 直到丢的这个包被接收端感知到 , 回复 ACK 后发送端才终于知道要降低发送速度 。而重传的包放在链路上还得等之前的数据包都送达接收端后才能被处理 。如果接收端的 Buffer 不足够大 , 很多数据送达接收端后都会丢弃 , 得等重传的包到达(Head Of Line 问题)后才能送给上游 , 大大增加延迟 。
Bufferbloat 一方面是会导致网络上超长的延迟 , 再有就是导致网络传输不稳定 , 有时候延迟很小 , 有的时候延迟又很大等 。
推荐阅读
- 看一遍忘一遍的网络七层模型与TCP/UDP,重新总结出来
- 翡翠|翡翠饰品的价格不断增长,但是要投资需要谨慎,避免被假货蒙骗
- MITM 如何避免中间人攻击
- 避免电动车变“炸弹”,做对这些事很重要
- 淘宝联盟站内推广如何避免 淘宝联盟如何推广
- 练习太极拳的时候怎样避免膝盖受伤
- Google tcp拥塞控制 bbr算法
- 发型|5款短下巴「显瘦发型」推荐,八字刘海显瘦,避免剪错发型会显胖!
- 地暖为啥逐渐被“嫌弃”?业主说了四个无法避免的弊端,你后悔没
- 防晒|皮肤暗黄的女人,日常避免3不要,很多人都忽略了,难怪白不起来