TCP cubic算法和bbr算法

文章比较了Cubic和BBR两种TCP拥塞控制算法,在不同网络条件下的表现。Cubic是事件驱动,而BBR是反馈驱动,更适应丢包环境。在内网环境下推荐使用Cubic,对外服务则建议使用BBR,但BBR可能存在公平性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 前言

前段时间调试网络相关的功能时发现,在一定的丢包率情况下,使用tcp bbr算法比cubic算法有更好的网络传输表现(拉流更顺畅)。

本文仅仅记录一次网络调试经验以及网上查找的一些结论性的内容。对于两种tcp拥塞控制算法的具体实现不做深究,更多的是了解两种算法的表现情况及使用场景。

2. cubic和bbr算法对比

查询相关资料,两种tcp拥塞算法的表现情况如下:

Reno/CUBIC:
它们是事件驱动的!无论是丢包,还是RTT增加,都被视为一种严重的事件,这些严重的事件导致TCP拥塞控制系统在”To find current bandwidth“,”To avoid congestion“以及
”To probe more bandwidth“之间切换,最终落实下来的就是促使拥塞算法(无论Reno,Vegas还是CUBIC)调整窗口的大小。
那么谁来发现这些事件是否发生呢?答案是TCP拥塞控制状态机。拥塞控制状态机直接主导这些状态的切换,只要它发现丢包,不管是不是真的,都会拉低窗口值。
所以说,Reno/CUBIC的窗口调整是被动的。

BBR:
bbr是反馈驱动的!bbr内置了自主的调速机制,不受TCP拥塞控制状态机的控制,bbr算法是自闭的,它可以自己完成VJ的所有状态探测以及切换,无需外界干涉,且对外界的干涉视而不见。
bbr周期性的试图探测是否有更多的带宽,如果有,那么就利用它,如果没有,就退回到之前的状态。
所以说,bbr的窗口调整是主动的。

3. cubic和bbr使用场景

网络在没有丢包的情况下,cubic和BBR对于这些较长时延的链路都有很好的表现。而在中度丢包的情况下,BBR的表现就非常突出了。

  1. 若仅仅在内网使用,内网环境带宽高,时延低,低丢包率的情况下,建议继续使用 cubic;
  2. 若对外提供服务,建议使用 BBR,并使相应的网卡使用 tc-fq 调度,否则可能占用额外的 CPU 资源,影响性能;
  3. BBR的公平性存在问题,它会抢占Cubic算法的带宽(取决于瓶颈缓冲区的大小)
  4. BBR的机制会导致高重传率

BBR和Cubic两者擅长处理的网络环境并不相同。不过它不采用丢包作为拥塞信号,而是通过自己评估,也许会在其他的环境下取得更好的成绩,比如说和强化学习相结合。

4. 参考文献

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值