tcp擁塞避免與控制

2021-09-18 07:31:16 字數 2705 閱讀 3329

說到

tcp原理,一般的人談傳輸效率,也就是吞吐率,了解的人談公平性,以及收斂性。本篇博文講一下

tcp為什麼使用

aimd

策略,為什麼是收斂的?

1.公平性和收斂性

才接觸網路協議的人可能會問:為什麼要收斂和公平?

tcp不是傳輸可靠、夠快就行了嗎?

遠遠不夠,因為

tcp是端到端的,視窗增減也是試探性的

「自適應

」方式,網路是黑盒,這就有很多問題。你自己乙個人發包發得快,侵略性強,沒有太大問題。但是如果其他人也跟你一樣沒有節制的發包呢?這就會造成網路負載過重,以至於崩潰。公平性和收斂性的出發點就在這裡。讓每乙個

tcp傳送端盡可能地均分頻寬,同時減少丟包,減輕網路裝置的壓力。這其實是很難的

trade off

。tcp

視窗總是鋸齒狀地週期抖動,增長

-減小,不斷迴圈,這種探測頻寬的行為一定會造成丟包,只是或多或少的差別而已。

舉個例子:你現在看動漫《

fate/stay night ubw

1)。公平分配說起來容易,做起來難。怎麼保證完全均分?這就要靠丟包和延時變動來反映網路狀況。你的同學加入了,新建的

tcp連線會嘗試慢啟動,慢啟動其實不慢,視窗指數增長,緩衝速度快速增加,也就是說,他開始搶你的頻寬了。搶到一定時刻,一定會引起丟包,或者延時的急劇增長。這時候,基於丟包或者延時變動的

tcp減窗機制起作用了,你們兩個都開始減窗。你減一點,我減一點。這時候你會想:不對啊,我先開始的,速度早就漲上去了,我們兩個都減,他永遠趕不上我。那麼,開始談第二個問題。

2.aimd為什麼收斂

上面說到減窗,現在普遍的減窗策略是

「乘性減窗

」,英文對應

「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.

看到這裡,或許有的人就恍然大悟了:這樣增窗,結果是大家的速率都收斂。也許還有人不明白,那就把速率隨時間變化的情況列出出來:

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。於是有:

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

,在什麼網路中能這樣做。這些問題就不是本文的討論範圍了,也許以後會講。 注:

(1udptcp

,這裡用人氣動漫舉例,是比較恰當的,動漫不像籃球比賽,沒有太強的實時性。好奇的同學可以查閱

「牛奶葡萄酒

」原則。(2

)jacobson

在他著名的**,

sigcomm 88

中已經證明了收斂性。

jacobson sigcomm 88 **:

TCP擁塞控制之擁塞避免

tcp傳送方通過慢啟動確定傳送資料的視窗閾值,一旦達到這個閾值,就意味著雖然網路中可能有更多可用的資源,但是如果占用全部的資源,將會使共享路由器佇列的其他tcp連線出現嚴重的丟包和重傳情況,從而導致整個網路效能不穩定。為了傳輸更多的資源而不至於影響其他tcp連線的傳輸,tcp實現了擁塞避免演算法。一...

TCP擁塞控制 慢開始與擁塞避免演算法

計算機網路中的頻寬 交換結點中的快取和處理機等,都是網路的資源。在某段時間,若對網路中某一資源的需求超過了該資源所能提供的可用部分,網路的效能就會變壞。這種情況就叫做擁塞。擁塞控制就是防止過多的資料注入網路中,這樣可以使網路中的路由器或鏈路不致過載。擁塞控制是乙個全域性性的過程,和流量控制不同,流量...

TCP擁塞控制

擁塞控制就是防止過多的資料注入到網路中,這樣可以使網路中的路由器或鏈路不致過載,擁塞控制要做的都有個前提,就是網路能夠承受現有的網路負荷。擁塞控制是個全域性性的過程。幾種擁塞控制方法 慢開始 擁塞避免 快重傳 快恢復 1.慢開始和擁塞避免 傳送方維持乙個叫做擁塞視窗的狀態變數,擁塞視窗取決於網路的擁...