李秀妮
陜西省西安歐亞學院信息工程學院,陜西西安 710065
在互聯網應用中,當一個子網或者其中的一部分出現太多分組時,網絡的性能開始下降,如網絡延時增大、丟包率上升、吞吐量下降等,這種情況即稱為擁塞(congestion)。導致擁塞出現的原因通常是當前的負載超過了資源的容量和處理能力。解決這擁塞一般采用兩種方式:其一是對擁塞進行控制,其二是對流量進行控制。
現今互聯網中擁塞控制大部分工作是由TCP完成的,目前標準TCP協議的實現都包含了一些避免和控制網絡擁塞的算法。當今互聯網的可靠性和穩定性與TCP擁塞控制機制密不可分,而TCP的成功也要歸功于其穩固的擁塞控制機制。
傳輸控制協議從應用程序中得到大段的信息、數據,然后將它們分割成若干個數據段。TCP會為這些數據段編號并排序,形成虛電路連接方式,信源的TCP會等待信宿TCP給一個確認性應答。沒有收到確認應答的數據段將被重新發送。TCP是一個全雙工的、面向連接的、可靠的并且是精確控制的協議。
TCP建立連接之后,通信雙方通過全雙工方式進行數據傳輸;在保證可靠性上,采用超時重傳和捎帶確認機制。在流量控制上,采用滑動窗口機制,機制中規定,對于窗口內未經確認的分組需要重傳。 在擁塞控制上,采用慢啟動算法。
TCP擁塞控制是基于窗口方式的。發送端的主機在確定發送報文段的速率時,既要根據接收端的接收能力,又要從全局考慮不要使網絡發生擁塞。因此,每一個TCP連接需要有以下兩個狀態變量:接收端窗口rwnd(receiver window)又稱為通知窗口(advertised window)和擁塞窗口cwnd(congestion window)。
在剛開始發送時,可先將擁塞窗口cwnd設置為一個最大報文段MSS的數值。在每收到一個對新的報文段的確認后,將擁塞窗口增加至2倍MSS的數值。用這樣的方法逐步增大發送端的擁塞窗口cwnd,可以使分組注入到網絡的速率更加合理。 慢啟動和擁塞避免算法的實現舉例如圖1。

圖1 慢啟動和擁塞避免算法圖例
當TCP連接進行初始化時,將擁塞窗口置為1。圖中的窗口單位不使用字節而使用報文段。慢啟動門限的初始值設置為 16個報文段,即ssthresh=16。發送端的發送窗口不能超過擁塞窗口cwnd和接收端窗口rwnd中的最小值。慢啟動算法在初始化連接時很有效,他探測網絡環境,以確保不會把太多報文發送進一個已經擁塞的環境。可是網絡進入飽和狀態很容易,但讓網絡從飽和狀態中恢復卻很難,一旦擁塞發生了,要將擁塞清除掉可能需要很長時間,因此慢啟動中cwnd指數增加就可能太激進,于是當擁塞窗口cwnd增長到慢開始門限值ssthresh時(即當cwnd=16時),就改為執行擁塞避免算法,擁塞窗口按線性規律增長。
由于在擁塞避免階段,當發生超時,cwnd重新置1,進入慢啟動,這將導致過大減小發送窗口尺寸,很大程度上降低了TCP連接的吞吐量。為了完善TCP的性能,又引入了快速重傳和快速恢復機制。快速重傳階段,當源端收到3個或者3個以上的重復ACK確認,即認為發生了數據包丟失,此時將ssthresh設置為當前cwnd的一半,ssthresh=awnd/2,并重新傳送丟失的數據包,進入快速恢復階段。在快速恢復階段,源端每收到一個重復的ACK,則cwnd加1;若收到非重復的ACK,置cwnd=ssthresh,轉入擁塞避免;當發生超時重傳時,置ssthresh=cwnd/2,cwnd=1,進入慢啟動階段。快速重傳和快速恢復機制避免了數據包一發生超時就直接進入慢啟動,在很大程度上提高了TCP的性能和吞吐量。
在慢啟動階段,在每個RTT時間內,CWND增加一倍,這樣當CWND增加到一定的值時,就可能導致以網絡能夠處理的最大容量的2倍來發送數據,從而淹沒網絡,所以后來HOE建議使用packet-pair算法和測量RTT來為ssthresh估計合適值,一次來適時的結束慢啟動階段。
對快速重傳和快速恢復機制的改進改進的方案有很多,比較著名的包括NewReno-TCP、SACK、FACK等。選擇確認SACK:源端檢測到擁塞后,要重傳丟失的數據包,至檢測丟失時發送的全部數據包,而實際上二者之間有些數據包已正確傳到接收端,不必重傳。選擇確認算法SACK,對數據包進行有選擇的確認和重傳,這樣源端就能準確地知道哪些數據包已正確的傳到接收端,從而避免了不必要的重傳,減少了時延,提高了網絡的吞吐量。有限傳輸機制:如果分組非順序到達接收方,也會產生重復的ACK,而只有收到連續3次重復的ACK時才能激發快速重傳,導致了一定的時延和某些數據不必要的重傳,在快速恢復階段又會減少發送量,導致不必要的帶寬浪費。在很多情況下,有限傳輸機制允許小窗口的TCP連接不用等到超時發生就可以從小與一個窗口的收據丟失中恢復過來。
隨著網絡規模的與日俱增,以傳統的端到端TCP為基礎,改進擁塞控制算法,將是完善Internet擁塞控制最主流也是最有效的途徑。在現有擁塞控制機制的基礎上,一個有效的擁塞控制算法將帶來巨大的效益,這對于網絡的發展十分重要。因此,對于算法的改進和研究仍然是Internet擁塞控制中的一個重要課題。
[1]Andrew S.Tanenbaum 著.計算機網絡[M].潘愛民,譯.4版.北京:清華大學出版社,2004,8.
[2]徐昌彪,鮮永菊.計算機網絡中的擁塞控制與流量控制[M].人民郵電出版社,2007.
[3]章淼,吳建平,林闖.互聯網端到端擁塞控制研究綜述.
[4]李艷凌,江勇.TCP擁塞控制算法研究,2005,2.
[5][美]W.Richard Stevens著.TCP/IP詳解[M].胡谷雨,吳禮發,等譯.機械工業出版社,2000,9.