計算機網絡 -- 運輸層(3)TCP流量控制與擁塞控制

1.流量控制

TCP提供流量控制服務,以消除發送方使接收方緩存溢出的可能。其就是一個速度匹配服務,即發送方的發送速率與接收方應用程序讀取速率匹配。

TCP讓發送方維護一個接受窗口變量來提供流量控制,接受窗口用於給發送方一個指示:該接收方還有多少可用的緩存空間。

由於TCP是全雙工通信,在連接兩端的發送方都各自維護一個接收窗口。

 

連接如何使用接收窗口實現流量控制的呢?

主機B通過把當前接收窗口的值放入它發送給主機A的報文段接收窗口字段中,通知主機A 它在該連接的緩存中還有多少可用空間。

 

2.擁塞控制

在某段時間,若對網絡中某資源的需求超過了該資源所能提供的可用部分,網絡的性能就要變壞。這種現象稱爲擁塞。

而分組重傳作爲網絡擁塞的徵兆。

 

2.1 擁塞控制方法

  • 端到端擁塞控制:TCP報文段丟失被認爲是網絡擁塞的一個跡象。
  • 網絡輔助的擁塞控制:網絡層構件(路由器)向發送方提供關於網絡擁塞狀態的顯式反饋信息。

 

2.2 TCP擁塞控制

TCP必須使用端到端擁塞控制而不是網絡輔助控制,因爲IP層不向端系統提供顯式的網絡擁塞反饋。

TCP採用的方法是讓每一個發送方根據所感知的網絡擁塞程度來限制其能向連接發送流量的速率。

 

2.2.1 TCP如何限制它向其連接發送流量的速率?

運行在發送方的TCP擁塞控制機制跟蹤一個額外的變量,即擁塞窗口cwnd,它對一個TCP發送方能向網絡中發送流量的速率進行限制。

通過以下方式約束限制了發送方未被確認的數據量,通過調節cwnd值,間接限制了發送發的發送速率:

LastByteSent - LastByteAcked <= min { cwnd, rwnd }

 

2.2.2 TCP發送方如何感知它到目的地之間的路徑存在擁塞?

當發送方出現丟包事件的時候,發送方就認爲在發送方和接收方路徑上出現了擁塞的指示。

將丟包事件定義爲:

  • 或 出現超時
  • 或 收到來自接收方的3個冗餘ACK

 

2.2.3 TCP感知到擁塞的時候,採用何種算法改變其速率?

  • 報文丟失意味着擁塞發生,此時降低發送速率。
  • 當對先前未確認的報文確認到達時,增加發送方的速率。
  • TCP可以探測帶寬速率,通過增加傳輸速率,探測擁塞發生時的帶寬速率。

以上方法引出了TCP擁塞控制算法,包括 慢啓動,擁塞避免, 快速恢復。

2.2.3.1 慢啓動

在慢啓動狀態,cwnd值以1個MSS開始,並且每當傳輸的報文段首次被確認就增加1個MSS。

這樣,每過一個RTT,發送速率就翻倍。因此,TCP發送速率起始慢,但在慢啓動階段以指數增長。

 

但是,何時結束這種指數增長?

  • 方法1:如果存在一個由超時指示的丟包時間,即擁塞,TCP發送方將cwnd值設置爲1,並重新開始慢啓動;還將慢啓動閾值ssthresh設置爲cwnd的值一半。
  • 方法2:直接與ssthresh的值相關聯,當cwnd值等於ssthread時,結束慢啓動並且TCP轉移到擁塞避免模式。
  • 方法3:檢測到3個用於ACK (出現丟包), 這時TCP執行一種快速重傳並進入快速恢復狀態。

 

2.2.3.2 擁塞避免

一旦進入擁塞避免狀態,cwnd值大約是上次遇到擁塞時的值一半。

因此,TCP無法每過一個RTT再將cwnd的值翻倍,而是每個RTT只將cwnd的值增加一個MSS, 進行線性增長。

 

但是,何時結束這種線性增長呢?

  • 方法1:當出現超時時,cwnd值被設置爲1個MSS;
  • 方法2:當丟包事件出現時,ssthresh的值被更新爲cwnd值的一半。

 

2.2.3.3 快速恢復

在快速恢復中,對於引起TCP進入快速恢復狀態的缺失報文段,對收到的每個冗餘ACK,cwnd的值增加一個MSS。

最終,當對丟失報文段的一個ACK到達時,TCP在降低cwnd後進入擁塞避免狀態。

如果出現超時事件,快速恢復在執行如同在慢啓動和擁塞避免中相同動作後,遷移到慢啓動狀態:當丟包事件出現時,cwnd的值被設置爲1個MSS,並且ssthresh的值設置爲cwnd值的一半。

 

2.2.2 TCP擁塞窗口變化

圖中,初始閾值ssthresh爲8MSS, 在前4個傳輸回合,擁塞窗口在慢啓動階段以指數速度快速爬升,在第4輪傳輸到達閾值,然後擁塞窗口以線性速度爬升,直到第8輪出現丟包。

此時,擁塞窗口cwnd值爲12MSS, 於是ssthresh的值被設置爲1/2cwnd = 6MSS。

在TCP Reno下,擁塞窗口cwnd被設置爲9MSS,然後線性增長。

在TCP Tahoe下,擁塞窗口被設置爲1個MSS,然後指數增長,直至到達ssthress爲止,在這個點它開始線性增長。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章