TCP—为何是AIMD?

原文转自:http://blog.chinaunix.net/uid-28387257-id-4543179.htmlhtml

说到TCP原理,通常的人谈传输效率,也就是吞吐率,了解的人谈公平性,以及收敛性。本篇博文讲一下TCP为何使用AIMD策略,为何是收敛的?缓存

1.公平性和收敛性网络

才接触网络协议的人可能会问:为何要收敛和公平?TCP不是传输可靠、够快就好了吗?
远远不够,由于TCP是端到端的,窗口增减也是试探性的“自适应”方式,网络是黑盒,这就有不少问题。你本身一我的发包发得快,侵略性强,没有太大问题。可是若是其余人也跟你同样没有节制的发包呢?这就会形成网络负载太重,以致于崩溃。公平性和收敛性的出发点就在这里。让每个TCP发送端尽量地均分带宽,同时减小丢包,减轻网络设备的压力。这实际上是很难的trade off。TCP窗口老是锯齿状地周期抖动,增加-减少,不断循环,这种探测带宽的行为必定会形成丢包,只是或多或少的差异而已。ui

举个例子:你如今看动漫《fate/stay night ubw》,已经开始了一段时间,视频缓冲速度很快。这时候你旁边的同窗看你这么入神,发现很好看,因而加入队伍,也点开视频。这时候网络该怎么分呢?又经过什么样的机制分呢?最好的结果固然是均分带宽,你本身分一半,同窗也分一半,这时候你的视频缓冲就慢下来了(注1)。公平分配提及来容易,作起来难。怎么保证彻底均分?这就要靠丢包和延时变更来反映网络情况。你的同窗加入了,新建的TCP链接会尝试慢启动,慢启动其实不慢,窗口指数增加,缓冲速度快速增长,也就是说,他开始抢你的带宽了。抢到必定时刻,必定会引发丢包,或者延时的急剧增加。这时候,基于丢包或者延时变更的TCP减窗机制起做用了,大家两个都开始减窗。你减一点,我减一点。这时候你会想:不对啊,我先开始的,速度早就涨上去了,咱们两个都减,他永远赶不上我。那么,开始谈第二个问题。.net

2.AIMD为何收敛unix

上面说到减窗,如今广泛的减窗策略是“乘性减窗”,英文对应“MD”。好比大家固有的带宽是8M,一开始你本身全占了,而后同窗开始抢,慢启动发包很快,因而,交换机缓存扛不住了,丢包了。这时候你的吞吐率是7M,同窗的速率是1M。大家两个的TCP察觉到丢包后,把速率各减去一半,你有3.5M,他有0.5M。网络不拥塞了,没有丢包,那就继续增窗。该增多少呢?你的带宽明显占优点,同窗有没有可能得到比你更高的速率呢?怎么样增才能达到均分带宽的目的?如今广泛的增窗策略是“加性增窗”,英文对应“AI”。也就是每条TCP链接在一个RTT内的增量是常数,假设这个加性因子为200K。那接下来的速率增加就是:你有3.5+0.2=3.7,同窗有0.5+0.2=0.7.视频

看到这里,或许有的人就恍然大悟了:这样增窗,结果是你们的速率都收敛。也许还有人不明白,那就把速率随时间变化的状况列出出来:htm

   3.5     0.5
    3.7     0.7
    3.9     0.9
    4.1     1.1
    ……………………………
    5.5     2.5
    2.75    1.25    MD
    ……………………………
    4.75    3.25
    2.375   1.625   MD
    ……………………………
    4.375   3.625
    2.1875  1.8125  MD
    ……………………………
    4.1875  3.8125  MD
    …………………………… 

从以上速率变化,能够看出,两条TCP链接的速率在逐渐趋近,这就是AIMD策略的效果:收敛,到最后公平。也许有的人意犹未尽,那就从公式角度再算一次看看。假设flow1的初始窗口为c1,flow2的初始窗口为c2。MD减窗过程当中,乘性因子为beta=0.5,也就是遇到丢包,窗口减一半。AI增窗过程当中,加性因子为a。因而有:blog

     c1' = ((c1*0.5 + m*0.2)*0.5 + m*0.2)*0.5 + m*0.2 …………
    这里m是变化的,表示增窗的次数,直到遇到丢包。可是因为带宽有限,因而m能够视为常数。
    c1'能够用等比数列求和公式给出,这里就不详细计算了。结论能够直接告诉你们:
    c1'收敛到跟m和beta有关,跟c1无关的常数。
    c2'也相似。
    收敛性的证实比较复杂,我也懒得在博文里讲这么学术化的事情。参见(注 2)。 

看到这里,你也就明白,TCP如何均分带宽,你同窗又为何能从你手里抢到带宽了。至于减窗是否是过于剧烈,beta能不能设置得更好,变成动态的,增窗因子能不能设置更好,变成动态的。以及能不能抛弃AIMD,使用MIMD,在什么网络中能这样作。这些问题就不是本文的讨论范围了,也许之后会讲。效率

注:(1)视频传输中,实时性视频用UDP,非实时性视频用TCP,这里用人气动漫举例,是比较恰当的,动漫不像篮球比赛,没有太强的实时性。好奇的同窗能够查阅“牛奶葡萄酒”原则。(2)Jacobson在他著名的论文,SIGCOMM 88中已经证实了收敛性。

相关文章
相关标签/搜索