TCP BBR算法与Reno/CUBIC的对比
Posted dog250
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP BBR算法与Reno/CUBIC的对比相关的知识,希望对你有一定的参考价值。
我一再强调,BBR算法是个分界点,所有的TCP拥塞控制算法,被分为BBR之前和BBR之后的(其实发现,这并不是我个人的观点,很多人都这么认为,所有想写本文探个究竟)。当然这里的”所有“并不包括封闭的那些算法,比如垃圾公司Appex的算法,或者伟大的垃圾微软的算法。任何的算法都内含了一个进化的过程,CUBIC和Reno看起来非常不同,但是却属于同一个思想,因此可以说,CUBIC是Reno的高级版本( 将一种锯齿换成另一种锯齿而已),事实上,TCP拥塞控制算法一直处在不断的改进之中,起初,Reno算法,然后就是NewReno,再往后就是各种混战,直到最终落实到了CUBIC,起码在Linux平台是这么一个过程,其它的平台,也是大同小异。关于从Reno到CUBIC进化过程的细节,这里不谈,相信80%的人可能并不在乎,另外20%在乎的人可能比我懂得更多,所以,这里不谈。
...[但是我还是要把篇幅留下来]
这里要谈的是BBR和Reno/CUBIC的一致性,这听起来可能让人觉得惊奇,它们不是有本质的区别吗?为什么要说它们的一致性呢?
我特别感谢Van Jacobson这位大师。虽然他不认识我,我也没见过他,但是他提出的问题导致了Reno,CUBIC直到BBR的诞生,我估计Appex和微软这种只吃饭不拉屎的貔貅也是借鉴了他的思想。
首先要声明,我并不是Google的粉丝,所以我更能采用公正的眼光看待BBR算法,虽然我一再强调它的多么多么的创新,但是这并不意味着BBR就是最好的,如果把BBR作为一个起点,类似Reno那样的起点,BBR本身也会有一个进化的过程,我希望的是大家都参与这个过程,我能做的只是抛砖引玉。我只是一个宣传者,一个鼓手。顺便说一句,我比较崇拜写出《 大教堂与集市》并且会吹笛子的Eric S· Raymond,他自称自己是一名鼓手(为什么不是笛子手呢?)。
我们先看一下Van Jacobson提出的一些的问题。
To achieve network stability, TCP entity should obey a ‘packet conservation’ principle, which is borrowed from physics.
What is packet conservation principle?
--A new packet is not put into the network until an old packet leaves( i.e. ‘conservation’) while maintaining ‘equilibrium’ in which a connection runs stably
by effectively using the bandwidth available on the path.
OK,理解这个是简单且直观的,然后呢?VJ继续说:
Three failures of packet conservation
1. The connection does not get to equilibrium
2. A sender injects a new packet before an old packet
has exited
3. The equilibrium can’t be reached because of
resource limits along the path
1, 3 : Equilibrium problem 2 : Conservation problem
To fix those failures, three algorithm are introduced
* Slow-start algorithm for 1.
* Retransmit timeout estimation algorithm for 2.
* Congestion avoidance algorithm for 3.
OK,问题提过了,方案也有了,接下来就是如何解决问题了,也就是说,如何把方案变成代码。
我们看一张图,一张到目前为止,BBR算法之前的TCP拥塞控制算法的图解,假设你对TCP拥塞算法有所了解那么这个图就是直观的:
以上是关于TCP BBR算法与Reno/CUBIC的对比的主要内容,如果未能解决你的问题,请参考以下文章