TCP的一個關鍵部分就是擁塞控制機制,因為IP層不向端系統(tǒng)提供顯式的網(wǎng)絡擁塞反饋,因此TCP必須使用端到端擁塞控制而不是使用網(wǎng)絡輔助的擁塞控制。TCP Reno 就是廣受贊譽的TCP擁塞控制算法,該算法主要由三部分組成:
1.慢啟動;2. 擁塞避免;3.快速回復。
慢啟動和擁塞避免是TCP的強制部分,兩者的差異在于對收到的ACK做出反應時增加cwnd長度的方式,我們會發(fā)現(xiàn)慢啟動比擁塞避免更快地增加cwnd的長度,快速回復為推薦部分,對TCP發(fā)送方并非是必需的。
1.慢啟動
慢啟動是建立TCP連接后,采用的第一個調(diào)整發(fā)送速率的算法(模式)。在這個階段,cwnd通常被初始化為1MSS(Maximum Segment Size),用于對TCP發(fā)送方而言,可用帶寬可能比MSS/RTT大的多,慢啟動的目的就是盡快找到上限。
在慢啟動階段,發(fā)送方每接收到一個確認報文,就會將cwnd增加1MSS的大小,于是其情況就為:
- 初始cwnd=1MSS,所以可發(fā)送一個TCP最大報文段,成功確認后,cwnd = 2MSS;
- 此時可發(fā)送兩個TCP最大報文段,成功接收后,cwnd = 4 MSS;
- 此時可發(fā)送四個TCP最大報文段,成功接收后,cwnd = 8 MSS ……
由于TCP是一次性將窗口內(nèi)的所有報文發(fā)出,所以所有報文都到達并被確認的時間,近似的等于一個RTT。所以在這個階段,擁塞窗口cwnd的長度將在每過一個RTT后,發(fā)送速率翻倍。因此TCP發(fā)送速率起始慢,但在慢啟動發(fā)送速率將以指數(shù)級別增長。那在這個過程中何時結(jié)束這種指數(shù)增長,這又分幾種情況:
- 第一種:若在慢啟動的過程中,發(fā)生了數(shù)據(jù)傳輸超時(timeout),則此時TCP將ssthresh的值設置為cwnd / 2,然后將cwnd重新設置為1MSS,重新開始慢啟動過程,這個過程可以理解為試探上限;
- 第二種:第一步試探出來的上限ssthresh將用在此處。若cwnd的值增加到>= ssthresh時,此時若繼續(xù)使用慢啟動的翻倍增長方式可能過于魯莽,所以這個時候結(jié)束慢啟動,改為擁塞避免模式;
- 第三種:若發(fā)送方接收到了某個報文的三次冗余ACK(即觸發(fā)了快速重傳的條件),則進入到快速恢復階段;同時,ssthresh = cwnd / 2,然后cwnd = ssthresh + 3MSS;
2.擁塞避免
剛進入擁塞避免模式時,cwnd的大小近似的等于上次擁塞時的值的一半,即距離擁塞可能并不遙遠。所以,擁塞避免是一個速率緩慢且線性增長的過程,在這個模式下,每經(jīng)歷一個RTT,cwnd的大小增加1MSS。也就是說,假設cwnd包含10個報文的大小,則每接收到一個確認報文,cwnd增加1/10 MSS,因此在收到對所有10個報文段的確認后,擁塞窗口的值將增加一個MSS。那在這個過程中何時結(jié)束這種線性增長,這又分幾種情況:
- 第一種:在這個過程中,發(fā)生了超時,則表示網(wǎng)絡擁塞,這時候,ssthresh被修改為cwnd / 2,然后cwnd被置為1MSS,并進入慢啟動階段;
- 第二種:若發(fā)送方接收到了某個報文的三次冗余ACK(即觸發(fā)了快速重傳的條件),此時也認為發(fā)生了擁塞, 則進入到快速恢復階段;同時,ssthresh = cwnd / 2,然后cwnd = ssthresh + 3MSS;
3. 快速恢復
在快速恢復階段,每接收到一個冗余的確認報文,cwnd就增加1MSS,其余不變,而當發(fā)生以下兩種情況時, 將退出快速恢復模式:
- 第一種:在快速恢復過程中,計時器超時,那么ssthresh被修改為 cwnd / 2,然后cwnd被置為1MSS,并進入慢啟動階段;
- 第二種:若發(fā)送方接收到一條新的確認報文(不是冗余ACKS),則cwnd被置為ssthresh,然后進入到擁塞避免模式;
三種模式相互轉(zhuǎn)換狀態(tài)圖
下面給出一張三種模式互相轉(zhuǎn)換的狀態(tài)圖,途中箭頭上的是轉(zhuǎn)換的條件,條件有上下兩部分,橫線上方的是上面事件引起的轉(zhuǎn)換,而下方是轉(zhuǎn)換時發(fā)生的操作。
圖為Reno擁塞控制狀態(tài)機(狀態(tài)圖來源于計算機自頂向下書籍)文章來源:http://www.zghlxwxcb.cn/news/detail-438495.html
整個reno過程見下圖:文章來源地址http://www.zghlxwxcb.cn/news/detail-438495.html
到了這里,關于基于TCP Reno的擁塞控制的基本原理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!