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