原文轉自: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中已經證實了收斂性。