79、TCP四大擁塞控制算法總結?(極其重要)


四大算法

擁塞控制主要是四個算法:1)慢啟動,2)擁塞避免,3)擁塞發生,4)快速恢復。這四個算法不是一 天都搞出來的,這個四算法的發展經歷了很多時間,到今天都還在優化中。

慢熱啟動算法 – Slow Start

所謂慢啟動,也就是TCP連接剛建立,一點一點地提速,試探一下網絡的承受能力,以免直接擾亂了 網絡通道的秩序。

 

慢啟動算法:

1) 連接建好的開始先初始化擁塞窗口cwnd大小為1,表明可以傳一個MSS大小的數據。

2) 每當收到一個ACK,cwnd大小加一,呈線性上升。

3) 每當過了一個往返延遲時間RTT(Round-Trip Time),cwnd大小直接翻倍,乘以2,呈指數讓升。

4) 還有一個ssthresh(slow start threshold),是一個上限,當cwnd >= ssthresh時,就會進入“擁塞避免算 法”(后面會說這個算法)

 

擁塞避免算法 – Congestion Avoidance

如同前邊說的,當擁塞窗口大小cwnd大於等於慢啟動閾值ssthresh后,就進入擁塞避免算法。算法如下:

1) 收到一個ACK,則cwnd = cwnd + 1 / cwnd

2) 每當過了一個往返延遲時間RTT,cwnd大小加一。

過了慢啟動閾值后,擁塞避免算法可以避免窗口增長過快導致窗口擁塞,而是緩慢的增加調整到網絡的最佳值。

 

擁塞發生狀態時的算法

一般來說,TCP擁塞控制默認認為網絡丟包是由於網絡擁塞導致的,所以一般的TCP擁塞控制算法以 丟包為網絡進入擁塞狀態的信號。對於丟包有兩種判定方式,一種是超時重傳RTO[Retransmission Timeout]超時,另一個是收到三個重復確認ACK。

超時重傳是TCP協議保證數據可靠性的一個重要機制,其原理是在發送一個數據以后就開啟一個計時 器,在一定時間內如果沒有得到發送數據報的ACK報文,那么就重新發送數據,直到發送成功為止。

但是如果發送端接收到3個以上的重復ACK,TCP就意識到數據發生丟失,需要重傳。這個機制不需 要等到重傳定時器超時,所以叫 做快速重傳,而快速重傳后沒有使用慢啟動算法,而是擁塞避免算法,所以這又叫做快速恢復算法。

超時重傳RTO[Retransmission Timeout]超時,TCP會重傳數據包。TCP認為這種情況比較糟糕,反應也比較強烈:

1.由於發生丟包,將慢啟動閾值ssthresh設置為當前cwnd的一半,即ssthresh = cwnd / 2.

2.cwnd重置為1

3.進入慢啟動過程

最為早期的TCP Tahoe算法就只使用上述處理辦法,但是由於一丟包就一切重來,導致cwnd又重置為 1,十分不利於網絡數據的穩定傳遞。

所以,TCP Reno算法進行了優化。當收到三個重復確認ACK時,TCP開啟快速重傳Fast Retransmit算 法,而不用等到RTO超時再進行重傳:

1.cwnd大小縮小為當前的一半

2.ssthresh設置為縮小后的cwnd大小

3.然后進入快速恢復算法Fast Recovery。

 

快速恢復算法 – Fast Recovery

TCP Tahoe是早期的算法,所以沒有快速恢復算法,而Reno算法有。在進入快速恢復之前,cwnd和 ssthresh已經被更改為原有cwnd的一半。快速恢復算法的邏輯如下:

1.cwnd = cwnd + 3 MSS,加3 MSS的原因是因為收到3個重復的ACK。

2.重傳DACKs指定的數據包。

3.如果再收到DACKs,那么cwnd大小增加一。

4.如果收到新的ACK,表明重傳的包成功了,那么退出快速恢復算法。將cwnd設置為ssthresh,然后進 入擁塞避免算法。

 

如圖所示,第五個包發生了丟失,所以導致接收方接收到三次重復ACK,也就是ACK5。所以將 ssthresh設置當當時cwnd的一半,也就是6/2 = 3,cwnd設置為3 + 3 = 6。然后重傳第五個包。當收到新的 ACK時,也就是ACK11,則退出快速恢復階段,將cwnd重新設置為當前的ssthresh,也就是3,然后進入 擁塞避免算法階段。

 

 


免責聲明!

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



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