TCP —— 擁塞控制

一、擁塞控制


擁塞控制機制之中的,當發送方檢測到超時的時候,就採用慢開始和擁塞避免,當發送方接收到冗餘ACK時,就採用快重傳和快恢復。

在這裏插入圖片描述

擁塞控制與流量控制的比較

  1. 都通過抑制發送方發送數據的速率,以便使接收端來得及接收
  2. 擁塞控制是因爲過多的數據注入網絡,使得接受方接收不到數據;流量控制是因爲發送方發送速率過快,導致接受方來不及接收
  3. 擁塞控制是讓網絡能夠承受現有的網絡負荷,是一個全局性的過程,涉及所有的主機、所有的路由器,以及與降低網絡傳輸性能有關的所有因素。相反,流量控制往往是指點對點的通信量的控制,即接收端控制發送端

在這裏插入圖片描述

二、慢開始和擁塞避免


(1)慢開始算法

在 TCP 剛剛連接好並開始發送 TCP 報文段時,先令擁塞窗口 cwnd=1,即一個最大報文段長度MSS。每收到一個對新報文段的確認後,將 cwnd 加1,即增大一個 MSS。用這樣的方法逐步增大發送方的擁塞窗口 cwnd,可使分組注入網絡的速率更加合理。

使用慢開始算法後,每經過一個傳輸輪次(即往返時延RTT),擁塞窗口 cwnd 就會加倍,即 cwnd 的大小指數式增長這樣,慢開始一直把擁塞窗口 cwnd 增大到一個規定的慢開始門限 ssthresh(閾值),然後改用擁塞避免算法。

(2)擁塞避免算法

擁塞避免算法的做法如下:發送端的擁塞窗口 cwnd 每經過一個往返時延 RTT 就增加一個 MSS 的大小,而不是加倍,使 cwnd 按線性規律緩慢增長(即加法增大),而當出現一次超時(網絡擁塞)時,令慢開始門限 ssthresh 等於當前cwnd的一半(即乘法減小)。

根據cwnd的大小執行不同的算法,可歸納如下:

  • 當cwnd< ssthresh時,使用慢開始算法。
  • 當cwnd> ssthresh時,停止使用慢開始算法而改用擁塞避免算法。
  • 當cwnd= ssthresh時,既可使用慢開始算法,又可使用擁塞避免算法(通常做法)。

(3)網絡擁塞的處理

網絡出現擁塞時,無論是在慢開始階段還是在擁塞避免階段,只要發送方檢測到超時事件的發生(未按時收到確認,重傳計時器超時)

  • 首先把慢開始門限 ssthresh設置爲出現擁塞時的發送方的 cwnd 值的一半(但不能小於2)。
  • 然後把擁塞窗口 cwnd 重新設置爲1,執行慢開始算法。

這樣做的目的是 迅速減少主機發送到網絡中的分組數,使得發生擁塞的路由器有足夠時間把隊列中積壓的分組處理完。

在這裏插入圖片描述

三、快重傳和快恢復


快重傳和快恢復算法是對慢開始和擁塞避免算法的改進

(1)快重傳

快重傳並非取消重傳計時器,而是在某些情況下可更早地重傳丟失的報文段。當發送方連續收到三個重複的ACK報文時,直接重傳對方尚未收到的報文段,而不必等待那個報文段設置的重傳計時器超時。

(2)快恢復

快恢復算法的原理如下:發送端收到連續三個冗餘 ACK(即重複確認)時,執行“乘法減小”算法,把慢開始門限 ssthresh 設置爲出現擁塞時發送方 cwnd 的一半。與慢開始(慢開始算法將擁塞窗口 cwnd 設置爲1)的不同之處是,它把cwnd的值設置爲慢開始門限 ssthresh 改變後的數值,然後開始執行擁塞避免算法(“加法增大”),使擁塞窗口緩慢地線性增大

在這裏插入圖片描述

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