說到tcp原理,一般的人談傳輸效率,也就是吞吐率,了解的人談公平性,以及收斂性。本篇博文講一下tcp為什麼使用aimd策略,為什麼是收斂的?
才接觸網路協議的人可能會問:為什麼要收斂和公平?tcp不是傳輸可靠、夠快就行了嗎?
遠遠不夠,因為tcp是端到端的,視窗增減也是試探性的「自適應」方式,網路是黑盒,這就有很多問題。你自己乙個人發包發得快,侵略性強,沒有太大問題。但是如果其他人也跟你一樣沒有節制的發包呢?這就會造成網路負載過重,以至於崩潰。公平性和收斂性的出發點就在這裡。讓每乙個tcp傳送端盡可能地均分頻寬,同時減少丟包,減輕網路裝置的壓力。這其實是很難的trade off。tcp視窗總是鋸齒狀地週期抖動,增長-減小,不斷迴圈,這種探測頻寬的行為一定會造成丟包,只是或多或少的差別而已。
上面說到減窗,現在普遍的減窗策略是「乘性減窗」,英文對應「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.53.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'也類似。
看到這裡,你也就明白,tcp如何均分頻寬,你同學又為什麼能從你手裡搶到頻寬了。至於減窗是不是過於劇烈,beta能不能設定得更好,變成動態的,增窗因子能不能設定更好,變成動態的。以及能不能拋棄aimd,使用mimd,在什麼網路中能這樣做。
TCP協議之TCP的可靠性傳輸
tcp保證可靠性主要有以下幾個方面 1.超時重傳機制 2.流量控制 3.擁塞控制 4.資料校驗超時重傳是tcp協議保證資料可靠性的另乙個重要機制。其原理是在傳送某乙個資料以後就開啟乙個計時器,在一定時間內如果沒有得到傳送的資料報的ack報文,那麼就重新傳送資料,直到傳送成功為止。簡單來說,就是tcp...
關於TCP的可靠性
tcp是乙個可靠的協議。有時人們會說 tcp能夠保證它所傳送資料的可靠傳輸。這種說法儘管很常見,但卻非常不恰當。首先,只要稍微想一下就會知道這不可能是對的。比如,假設在資料傳輸的過程中將一台主機從網路上斷開,tcp這側不管做出何種努力,都無法獲取其餘 的資料。網路確實會中斷,主機確實會崩潰,使用者確...
關於TCP的可靠性
tcp是乙個可靠的協議。有時人們會說 tcp能夠保證它所傳送資料的可靠傳輸。這種說法儘管很常見,但卻非常不恰當。首先,只要稍微想一下就會知道這不可能是對的。比如,假設在資料傳輸的過程中將一台主機從網路上斷開,tcp這側不管做出何種努力,都無法獲取其餘 的資料。網路確實會中斷,主機確實會崩潰,使用者確...