袁希群
鐵嶺廣播電視大學(鐵嶺 112000)
Internet網絡是分組交換網絡,資源為眾多用戶共享,無法根據資源狀態限制用戶數量,同時也無法控制用戶使用資源的數量。如果網絡中的報文數量過多,網絡來不及處理,勢必導致網絡擁塞,嚴重時甚至會導致網絡通信陷入停頓,即出現死鎖現象。擁塞控制就是TCP為了應對IP網絡的擁塞情況而對發送方進行發送速率控制的一種服務。引發控制的原因就是網絡堵塞。
擁塞是一種持續過載的網絡狀態,此時用戶對網絡資源的需求超過了固有的容量。就Internet的體系結構而言,擁塞的發生是其固有的屬性。因為在事先沒有任何協商和請求許可機制的資源共享網絡中,幾個IP分組同時到達路由器,并期望經同一個輸出端口轉發的可能性是存在的,顯然,不是所有分組可以同時接受處理,必須有一個服務順序,中間節點上的緩存為等候服務的分組提供一定保護。然而,如果此狀況具有一定的持續性,當緩存空間被耗盡時,路由器只有丟棄分組。當網絡中存在過多的報文時,網絡的性能就會相應下降,這種現象就被成為擁塞。
造成網絡擁塞的原因:①多條流入線路有分組到達,并需要同一輸出線路,此時,如果路由器沒有足夠的內存來存放所有這些分組,那么有的分組就會丟失;②路由器的慢帶處理器的緣故,以至于難以完成必要的處理工作,如緩沖區排隊、更新路由表等。
防止擁塞的方法:①在傳輸層可采用:重傳策略、亂序緩存策略、確認策略、流控制策略和確定超時策略。②在網絡層可采用:子網內部的虛電路與數據報策略、分組排隊和服務策略、分組丟棄策略、路由算法和分組生存管理。③在數據鏈路層可采用:重傳策略、亂序緩存策略、確認策略和流控制策略。
發送報文段速率的確定,既要根據接收端的接收能力,又要從全局考慮不要使網絡發生擁塞,這由接收端窗口和擁塞窗口兩個狀態變量確定。接收端窗口rwnd(receiver window)又稱通知窗口(advertised window),是接收端根據目前的接收緩存大小所許諾的最新窗口值,是來自接收端的流量控制。擁塞窗口cwnd(congestion window)是發送端根據自己估計的網絡擁塞程度而設置的窗口值,是來自發送端的流量控制。
發送端發送窗口的上限值應當取接收端窗口rwnd和擁塞窗口cwnd之中較小的那一個,即發送窗口的上限值=Min[rwnd,cwnd]。也就是說TCP發送端的發送速率是受目的主機或網絡中較慢的一個約束。
慢開始原理可以歸結為三點。
(1)當主機開始發送數據時,如果立即將較大的發送窗口中的全部數據字節都注入到網絡中,那么由于不清楚網絡的情況,有可能引起網絡擁塞;
(2)比較好的方法是試探一下,即從小到大逐漸增大發送端的擁塞窗口數值;
(3)通常在剛剛開始發送報文段時可以現將擁塞窗口 cwnd設置為一個最大報文段 MSS的數值。在每收到一個對新報文段的確認后,將擁塞窗口增加至多一個 MSS的數值。當 rwnd足夠大的時候,為了防止擁塞窗口cwnd的增長引起網絡擁塞,還需另外一個變量——慢開始門限ssthresh。
擁塞控制的具體過程為。
(1)TCP連接初始化,將擁塞窗口 cwnd值置為1;
(2)執行慢開始算法,cwnd按指數規律增長。直到cwnd=ssthresh,開始執行擁塞避免算法,cwnd按線性規律增長;
(3)當網絡發生擁塞,把 ssthresh值更新為擁塞前ssthresh值的一半,cwnd重新設置為1,按步驟(2)執行。
在這里強調一下,慢開始的“慢”并不是指擁塞窗口cwnd的增長速率慢,即使cwnd增長得很快,和一開始就將cwnd設置為較大的數值相比,使用慢開始算法可以使發送端在開始發送時向網絡注入的分組數大大減少。慢開始按指數規律增長,擁塞避免按線性規律增長。判斷網絡發生擁塞的依據是發送方未按時收到ACK(TCP數據包首部中的確認標志,對已接收到的 TCP報文進行確認。)或收到了重復的 ACK?!皳砣苊狻辈⒎侵改軌蛲耆苊鈸砣?,而是說在擁塞避免階段將擁塞窗口控制為按線性規律增長,使得網絡不容易出現擁塞。
一條TCP連接有時會因等待重傳計時器的超時而空閑較長的時間,慢開始和擁塞控制算法又無法很好地解決這類問題,因此提出了快重傳和快恢復的擁塞控制算法??熘貍魉惴ú⒎侨∠酥貍鳈C制,只是在某些情況下更早地重傳丟失的報文段(如果當發送端接連收到三個重復的確認ACK時,則斷定分組丟失,立即重傳丟失的報文段,而不必等待重傳計時器超時)??旎謴退惴ǔ3Ec快重傳算法配合使用,當不使用快恢復算法時,發送端發現網絡出現擁塞就將擁塞窗口降低為1,然后執行慢開始算法,這樣做會導致網絡不能很快地恢復到正常工作狀態。當使用快恢復算法時,慢開始算法只是在TCP建立時才使用。
網絡層策略對TCP擁塞控制影響最大的就是路由器數據報丟失策略。為了避免發生網絡中的全局同步現象,可以在路由器采用隨機早期丟棄RED(Random Early Discard,隨機早期檢測)。RED正常工作的關鍵就是要選擇好三個參數:最小門限THmin、最大門限THmax和概率p。RED中的“隨機”就體現在概率p上,也就是說RED不是等到已經發生網絡擁塞后才將所有在隊列尾部的數據全部丟棄,而是在檢測到網絡擁塞的早期征兆時,就先以概率p丟棄個別數據報,讓擁塞控制只在個別TCP連接上進行,因而避免發生全局的擁塞控制??傊?,隨機早期丟棄RED算法使得路由器可以更好的管理其隊列長度。采用RED的好處就是當平均隊列長度超過門限THmin時,就會有少量的數據報被丟棄,從而避免網絡擁塞的發生。
(1) TCP Vegas
1994年,Brakmo提出了一種新的擁塞控制機制TCP Vegas,從另外的一個角度來進行擁塞控制。從前面可以看到,TCP的擁塞控制是基于網絡丟包,一旦出現丟包,于是調整擁塞窗口,然而由于丟包不一定是由于網絡進入了擁塞,但是由于RTT(Round-Trip Time,往返時延)值與網絡運行情況有比較密切的關系,于是TCP Vegas利用RTT值的改變來判斷網絡是否擁塞,從而調整擁塞控制窗口。如果發現RTT在增大,Vegas就認為網絡正在發生擁塞,于是開始減小擁塞窗口,如果RTT變小,Vegas認為網絡擁塞正在逐步解除,于是再次增加擁塞窗口。由于Vegas不是利用丟包來判斷網絡可用帶寬,而是利用RTT變化來判斷,因而可以更精確的探測網絡的可用帶寬,從而效率更好。TCP Vegas也存在一定的缺陷,在這里就不再闡述了。
(2) Limited transmit算法
這個算法是在擁塞窗口比較小的時候如果在一個傳輸窗口內有多個包丟失時比較有效率的恢復算法。Limited Transmit就是當收到兩個重復ACK時,開始檢測兩個條件:①接收方的通告窗口rwnd是否允許傳輸新的數據包,即是否滿足rwnd>cwnd?;②停留在網絡中的數據包個數是否小于或等于cwnd+2?
如果這兩個條件都滿足的話,那么TCP再發送新的數據包,其實第二個條件換個意思理解就是說在這種情況下可以超出擁塞窗口最多再發送兩個數據包。假設新的數據包和相應的ACK不被丟失的話,那么有了這兩個新的數據包,從而發送端與接收端就可以立即從相互等待的僵局中恢復出來,發送方接著進入標準的快速恢復。注意的是盡管可以發送兩個新的數據包,但是cwnd的值要保持不變,而不能把它增加2。顯然Limited Transmit算法比利用超時重傳在包亂序時具有更好的魯棒性。
擁塞控制不僅是網絡穩定、高效運行的關鍵,同時又是實現各種服務質量的基礎和前提。實際的網絡是一個不斷發展的系統,網絡擁塞控制研究也是一個非常困難、有挑戰性的研究領域。對于網絡擁塞控制的研究仍有許多工作要做。
[1]徐昌彪,鮮永菊.計算機網絡中的擁塞控制與流量控制.北京:人民郵電出版社,2007.
[2]孫知信.網絡異常流量識別與監控技術研究.北京:清華大學出版社,2010.
[3]王崇,張大方,曾彬.高速網絡中TCP擁塞控制算法的研究和改進.計算機技術與自動化,2007(3).
[4]王秀利.網絡擁塞控制及拒絕服務攻擊防范.北京:郵電大學出版社,2009.
[5]季敏,張利萍.網絡擁塞控制概述.軍民兩用技術與產品,2006(8).
[6]孫德輝.網絡化控制系統--理論、技術及工程應用.北京:國防工業出版社,2008.