小議TCP的擁塞控制技術探討

時間:2022-07-01 07:03:00

導語:小議TCP的擁塞控制技術探討一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。

小議TCP的擁塞控制技術探討

摘要:tcp協議在控制數據流擁塞機制方面有一些不足,本文通過探討網絡擁塞出現的原因及TCP擁塞控制的基本策略,論述了TCP擁塞控制的改進方案,并提出了針對這種缺陷的改進方向。

關鍵詞:TCP擁塞控制重傳重傳超時

中圖分類號:文獻標識碼:文章編號:

TCP是Internet上通用的傳輸層協議之一,是目前應用最廣泛的傳輸控制協議,其核心是擁塞控制機制。INTERNET采用交換機作為不同網絡之間傳送信息的中介,以次來達到整個網絡資源的共享。這樣的方式便于在網絡中查找某個特定的主機,但隨著主機數量的增多和數據傳輸量的增大,就容易產生資源競爭,如果不及時處理,這樣的競爭就會導致網絡擁塞。TCP協議的一個組成部分就是為了解決這樣的擁塞問題,并提供了一個算法來最大限度地利用網絡帶寬。傳統的TCP中的擁塞控制機制主要是基于VanJacobson提出的“慢啟動”算法,“擁塞避免”算法和一個用于估計周轉RTT(roundtriptime)的算法。

“慢啟動”算法的核心思想就是:通過觀察到新分組進入網絡的速率應該與另一端返回確認的速率相同而進行工作。慢啟動為發送方的TCP增加了另一個窗口:擁塞窗口(congestionwindow),記為cwnd。當與另一個網絡的主機建立TCP連接時,擁塞窗口被初始化為1個報文段(即另一端通告的報文段大小)。每收到一個ACK,擁塞窗口就增加一個報文段(cwnd以字節為單位,但是慢啟動以報文段大小為單位進行增加)。發送方取擁塞窗口與通告窗口中的最小值作為發送上限。擁塞窗口是發送方使用的流量控制,而通告窗口則是接收方使用的流量控制。發送方開始時發送一個報文段,然后等待ACK。當收到該ACK時,擁塞窗口從1增加為2,即可以發送兩個報文段。當收到這兩個報文段的ACK時,擁塞窗口就增加為4,這是一種指數增加的關系。在某些點上可能達到了互聯網的容量,于是中間路由器開始丟棄分組。

“擁塞避免”算法是一種處理丟失分組的方法。該算法假定由于分組受到損壞引起的丟失是非常少的(遠小于1%),因此分組丟失就意味著在源主機和目的主機之間的某處網絡上發生了擁塞。有兩種分組丟失的指示:發生超時和接收到重復的確認。但是當擁塞發生時,我們希望降低分組進入網絡的傳輸速率,于是可以調用慢啟動來作到這一點。在實際中這兩個算法通常在一起實現。

慢啟動(slowstart)算法通過逐漸增加cwnd的大小來探測可用的網絡容量,防止連接開始時采用不合適的發送量導致網絡擁塞。然而有時該算法也會浪費可用的網絡容量,因為慢啟動算法總是從cwnd=l開始,每收到一個ACK,cwnd增加l,對RTT時間長的網絡,為使cwnd達到一個合適的值,需要花很長的時間,特別是網絡實際容量很大時,會造成浪費。為此可采用大的初始窗口,大的初始窗口避免了延遲ACK機制下單個報文段初始窗口的等待超時問題,縮短了小TCP流的傳輸時間和大延遲鏈路上的慢啟動時間。

在慢啟動階段,在每個RTT時間內,cwnd增加一倍,這樣當cwnd增加到一定的值時,就可能導致以網絡能夠處理的最大容量的2倍來發送數據,從而淹沒網絡。Hoe建議使用packet-pair算法和測量RTT來為ssthresh估計合適值,以此來適時地結束慢啟動階段。但是由于受各方面干擾,估算合理的ssthresh值并不容易,因此這個方法的效果是有限的。而Smooth-start較為平滑地從慢啟動過渡到擁塞避免階段,減少了報文段丟失和突發通訊量,提高了TCP擁塞控制的性能。

為了避免不必要的重傳超時,有人提出了一種受限傳輸機制:如果接收方的廣播窗口允許的話,發送方接收到一個或者兩個重復的ACK(acknowledgment)后,繼續傳輸新的數據報文段。受限的傳輸機制允許具有較小窗口的TCP連接進行錯誤恢復,而且避免了不必要的重傳。

如果TCP的發送方在重傳數據報文段一個RTT后發現接收方接收到了重傳數據報文段的兩個拷貝,則可以推斷重傳是不必要的。這時,TCP的發送方可以撤銷對擁塞窗口的減少。發送方可以通過將慢啟動門限增加到原始值,調用慢啟動規程使擁塞窗口恢復原先值。除了恢復擁塞窗口,TCP發送方還可以調整重復確認門限或者重傳超時參數來避免由于多次不必要的重傳而浪費帶寬。

對公平性的改進:在擁塞避免階段,如果沒有發生丟包事件,則TCP發送方的cwnd在每個RTT時間內大約可以增加一個報文段大小,但這樣會造成具有不同RTT時間或窗口尺寸的多個連接在瓶頸處對帶寬競爭的不公平性,RTT時間或窗口小的連接,相應的cwnd增長速度也相對緩慢,所以只能得到很小一部分帶寬。

對此,可以考慮從一下幾個方面去加以改進:

1、如果使用了路由器,可以使用公平隊列和TCP友好緩存管理來進行控制以增加公平性。

2、如沒有使用路由器,就要求TCP發送端的擁塞控制進行改變,在擁塞避免階段是共享同一資源的TCP連接以相同速度發送數據。

3、可以考慮引入發送優先級的概念,拒絕大范圍的同時發送同一共享資源,而是按照優先級有先后次序的逐個發送,優先級的使用可以仿造進程優先級的管理方式,動態變化,實時調整以加強有效利用率。