【網路協議】TCP的擁塞控制機制

蘭亭風雨發表於2014-06-21

前言

計算機網路中的頻寬、交換節點中的快取和處理機等,都是網路的資源,在某段時間內,若對網路中某一資源的需求超過了該資源所能提供的可用部分,網路的效能就要變壞,這種情況就叫做擁塞。

所謂擁塞控制,就是防止過多的資料注入到網路中,從而使網路中的路由器或鏈路不致過載。要注意用擁塞控制與流量控制的區別,擁塞控制是一個全域性性的過程,涉及到所有的額主機、路由器,以及與降低網

擁塞控制的演算法有:慢開始、擁塞避免、快重傳、快恢復四種。

 

慢開始和擁塞避免

傳送方維持一個擁塞視窗的狀態變數,其大小取決於網路的擁塞程度,動態地變化,而傳送視窗一般取擁塞視窗和對方給出的接收視窗的最小值(為了便於描述,後面的分析中假定對方給出的接收視窗足夠大,這樣將傳送視窗等於擁塞視窗就可以了)。

慢開始演算法的核心是從小到大逐漸增大傳送視窗,也就是說,從小到大逐漸增大擁塞視窗的數值。通常在剛開始傳送報文段時,先把擁塞視窗設定為一個最大報文段MSS的數值,而在每收到對上一輪報文段(,每次加倍後的報文段的個數,可能不止一個報文段)的確認後,就把擁塞視窗的數值加倍。

為了防止擁塞視窗增長過大引起網路擁塞,還需要維護一個慢開始門限的狀態變數,當擁塞視窗的值小於慢開始門限時,使用慢開始演算法,一旦擁塞視窗的值大於慢開始門限的值,就改用擁塞避免演算法。

擁塞避免演算法的思路是讓擁塞視窗緩慢地增大,收到每一輪的確認後,將擁塞視窗的值加1,而不是加倍,這樣擁塞視窗的值按照線性規律緩慢增長。

無論是在慢開始階段還是在擁塞避免階段,只要傳送方判斷網路出現擁塞(沒有按時收到確認),就把慢開始門限設定為出現擁塞時傳送視窗值的一般,但最小不能小於2個MSS值,而後把擁塞視窗的值重新設定為1個MSS,執行慢開始演算法。

 

快重傳和快恢復

快重傳演算法首先要求接收方每收到一個失序的報文段後就立即發出重複確認(重複傳送對前面有序部分的確認),而不是等待自己傳送資料時才進行稍待確認,也不是累積收到的報文傳送累積確認,如果傳送方連續收到三個重複確認,就應該立即重傳對方未收到的報文段(有收到重複確認,說明後面的報文段都送達了,只有中間丟失的報文段沒送達)。

快恢復演算法與快重傳演算法配合使用,其過程有如下兩個要點:

1、當傳送方連續收到三個重複確認時,就把慢開始門限減半,這是為了預防網路發生擁塞。注意,接下來不執行慢開始演算法。

2、由於傳送方現在認為網路很很可能沒有發生特別嚴重的阻塞(如果發生了嚴重阻塞的話,就不會一連有好幾個報文段到達接收方,就不會導致接收方連續傳送重複確認),因此與慢開始不同之處是現在不執行慢開始演算法(即擁塞視窗的值不設為1個MSSS),而是把擁塞視窗的值設為慢開始門限減半後的值,而後開始執行擁塞避免演算法,線性地增大擁塞視窗。


相關文章