TCP擁塞避免


TCP擁塞避免

擁塞控制就是防止過多的數據注入網絡中,這樣可以使網絡中的路由器或鏈路不致過載。擁塞控制是一個全局性的過程,和流量控制不同,流量控制指點對點通信量的控制。

超時重傳機制

超時重傳機制主要是為了解決數據包在傳輸過程中丟失的問題。

TCP每發送一個報文段,就會為這個報文段開啟一個定時器,如果定時器溢出時仍然沒有收到接收端的應答報文,那么TCP就認為這個報文段在傳輸過程中丟失,然后重新發送這個報文段。這便是超時重傳機制

舉例:客戶端請求發送”and hi”報文段時啟動了定時器,然而在規定的時間內沒有收到對端的回復,所以重新發送”and hi”報文段,並重啟定時器(重啟的定時器時間會增大)。

擁塞控制

超時重傳是為了解決數據丟失的問題,而數據丟失的原因很大程序上是由於傳輸路徑擁塞導致的。

在正常的傳輸過程中,數據是從一個路由器跳到下一個路由器,每個路由器都有自己的緩沖區,新來的數據會存放在緩沖區中,與此同時路由器也在不斷地將緩沖區中的數據發送給下一個路由器。但是如果某個路由器接收數據的速率大於發送數據的速率,就會導致緩沖區數據累積,最終填滿緩沖區。此時如果再有數據到來,緩沖區已經無法容納它們,只能將它們丟掉,造成數據丟失,這就是所謂的擁塞現象,本質就是傳輸路徑上的節點不平衡。為了解決這一問題,就需要當出現擁塞現象時立即減少發送端發送的數據量,為路徑上的某些節點提供清空緩沖區的時間,同時也避免了不必要的重傳。

但是,發送端如何才能得知網絡中發生了擁塞呢。因為由於硬件錯誤造成的數據丟失是很罕見的,所以發送端假定,如果出現了數據丟失,那么就可以認定發生了擁塞。

發送方維持一個叫做擁塞窗口cwnd(congestion window)的狀態變量。擁塞窗口的大小取決於網絡的擁塞程度,並且動態地在變化。發送方讓自己的發送窗口等於擁塞窗口,另外考慮到接受方的接收能力,發送窗口小於擁塞窗口。

慢啟動

慢開始算法的思路就是,不要一開始就發送大量的數據,先探測一下網絡的擁塞程度,也就是說由小到大逐漸增加擁塞窗口的大小。

這里用報文段的個數的擁塞窗口大小舉例說明慢開始算法,實時擁塞窗口大小是以字節為單位的。

如下圖:

當然收到單個確認但此確認多個數據報的時候就加相應的數值。所以一次傳輸輪次之后擁塞窗口就加倍。這就是乘法增長,和后面的擁塞避免算法的加法增長比較。

為了防止cwnd增長過大引起網絡擁塞,還需設置一個慢開始門限ssthresh狀態變量。ssthresh的用法如下:

當cwnd<ssthresh時,使用慢開始算法。

當cwnd>ssthresh時,改用擁塞避免算法。

當cwnd=ssthresh時,慢開始與擁塞避免算法任意。

擁塞避免

擁塞避免算法讓擁塞窗口緩慢增長,即每經過一個往返時間RTT就把發送方的擁塞窗口cwnd加1,而不是加倍。這樣擁塞窗口按線性規律緩慢增長。

無論是在慢開始階段還是在擁塞避免階段,只要發送方判斷網絡出現擁塞(其根據就是沒有收到確認,雖然沒有收到確認可能是其他原因的分組丟失,但是因為無法判定,所以都當做擁塞來處理),就把慢開始門限設置為出現擁塞時的發送窗口大小的一半。然后把擁塞窗口設置為1,執行慢開始算法。

如下圖:

再次提醒這里只是為了討論方便而將擁塞窗口大小的單位改為數據報的個數,實際上應當是字節。

快重傳

快重傳要求接收方在收到一個失序的報文段后就立即發出重復確認(為的是使發送方及早知道有報文段沒有到達對方)而不要等到自己發送數據時捎帶確認。快重傳算法規定,發送方只要一連收到三個重復確認就應當立即重傳對方尚未收到的報文段,而不必繼續等待設置的重傳計時器時間到期。

如下圖:

快恢復

快重傳配合使用的還有快恢復算法,有以下兩個要點:

  • 當發送方連續收到三個重復確認時,就執行“乘法減小”算法,把ssthresh門限減半。但是接下去並不執行慢開始算法。

  • 考慮到如果網絡出現擁塞的話就不會收到好幾個重復的確認,所以發送方現在認為網絡可能沒有出現擁塞。所以此時不執行慢開始算法,而是將cwnd設置為ssthresh的大小,然后執行擁塞避免算法。

如下圖:

與流量控制區別

TCP有一個叫做流量控制的機制,它與擁塞控制非常相似,但是仍然有一些差異

  • 流量控制是端對端的控制機制,兩端各自通知對方允許的窗口大小以防止對端發送過多數據導致自己來不及處理造成接收緩沖區被填滿
  • 擁塞控制不是端對端的控制機制,它是為了緩解從一端到另一端這條路徑上的擁堵問題

不過二者都是通過限制發送方發送的數據包個數來解決問題,所以上述算法無非就是降低發送端發送速率,緩解網絡壓力。

參考

TCP的擁塞控制

TCP/IP學習筆記(四)TCP超時重傳及擁塞控制

淺談 TCP 擁塞控制算法

TCP擁塞控制算法 優缺點 適用環境 性能分析

TCP擁塞控制ABC(Appropriate Byte Counting)的利弊說


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM