TCP流量控制與擁塞控制

  爲了更好地對傳輸層進行擁塞控制,因特網建議標準定義瞭如下四種算法:慢啓動、擁塞避免、快重傳和快恢復。算法

1 接收窗口rwnd與擁塞窗口cwnd

  發送方在肯定發送報文段的速率時,既要根據接收方的接收能力,又要從全局考慮不要使網絡發生擁塞。由於,TCP協議要求發送方維護如下兩個窗口:網絡

  (1)接收窗口rwnd:接收方向發送方告知的當前還能接收的數據容量,通常所說的窗口大小即rwnd;事件

  (2)擁塞窗口cwnd:發送方根據本身估算的網絡擁塞程序而設置的窗口值,反映了網絡的當前容量。原理

  發送窗口的上限應當取接收窗口rwnd和擁塞窗口cwnd中較小的一個。程序

2 慢啓動與擁塞避免

  (1)慢啓動方法

  作法:TCP鏈接剛創建,開始發送TCP報文段時,先令擁塞窗口cwnd=1,即一個最大報文段長度MSS。而在每收到一個對新的報文段的確認後,將cwnd加1,即增大一個MSS。技術

  使用慢啓動算法後,每通過一個RTT,擁塞窗口cwnd就會加倍,即cwnd的大小呈指數形式增加。這樣慢啓動算法一直把擁塞窗口cwnd增大到一個規定的慢啓動門限ssthresh(閾值),而後改用擁塞避免算法。數據

  (2)擁塞避免協議

  作法:發送端的擁塞窗口cwnd每通過一個RTT就會增長一個MSS的大小,而不是加倍,使cwnd按線性規律緩慢增加,而當出現一次超時(網絡擁塞)時,則令慢啓動門限ssthresh等於當前cwnd的一半(但不能小於2),且此時擁塞窗口cwnd又變爲1。時間

  可概括以下:

  (1)當cwnd<ssthresh時,使用慢啓動算法;

  (2)當cwnd>ssthresh時,中止使用慢啓動算法而改用擁塞避免算法。

  (3)當cwnd=ssthresh時,既可使用慢啓動算法,也可以使用擁塞避免算法(一般作法)。

3 快重傳與快恢復

  快重傳和快恢復算法是對慢啓動和擁塞避免算法的改進。

  (1)快重傳

  有兩種事件會致使TCP對報文段進行重傳:超時和冗餘ACK。

  超時即超過了規定的時間沒有收到接收端對於某報文段的ACK。

  快重傳技術使用冗餘ACK方法來實現對未收到的報文段的快速重傳:當發送方連續收到三個重複的ACK報文時,表示該ACK對應的下一個報文段丟失,則沒必要等待那個報文段設置的重傳計時器,直接重傳該報文段。

  (2)快恢復

  原理:當發送端鏈接收到連續三個冗餘ACK(即發生超時)時,就將慢啓動門限ssthresh設置爲出現擁塞時發送方cwnd的一半,與慢啓動不一樣之處是它把cwnd的值設置爲慢啓動門限ssthresh改變後的數值,而不是1,而後開始執行擁塞避免算法。

  因爲跳過了cwnd從1起始的慢啓動過程,因此被稱爲快恢復。

相關文章
相關標籤/搜索