TCP的擁塞視窗和快速恢復機制的一些備忘及一點想法

2022-04-14 23:11:58 字數 1908 閱讀 1771

rwnd(視窗,代表接收端的處理能力)、cwnd(擁塞視窗,從傳送端看當前網路整體承載能力)、ssthresh(快速增長切換成慢速增長的界限值)

1.慢啟動,是指數增長(對面確認多少個包,就增加多少),並不慢,只是它的起點低,所以慢啟動階段仍需要時間。實際是起點低(1),快增長階段,每一輪將當前擁塞視窗翻倍。

2.擁塞避免,引入了ssthresh(這個是個變數,初始往往是最大值65536,隨後續擁塞發生不斷調整),控制慢啟動階段區間是在視窗超過ssthresh之後,就開始線性增長(是讓cwnd緩慢的增加而不是如慢啟動時加倍的增長,每經歷過一次往返時間就使cwnd增加1,而不是加倍,這樣使cwnd緩慢的增長,比慢啟動要慢的多。 一種通用的方法是對於tcp傳送方無論何時到達乙個新的確認,就將cwnd增加乙個mss(mss/cwnd))。 實際是慢速逼近最大值。

3.擁塞狀態,rto超時且還沒有得到資料確認,tcp就會對該報文段進行重傳。 超時重傳的發生就是擁塞狀態進入標誌。

擁塞狀態發生後,1.把ssthresh降低為cwnd值的一半 2.把cwnd重新設定為1 3.重新進入慢啟動過程。

4.僅存在慢啟動和擁塞避免實際tcp也可以工作,不斷在慢啟動和擁塞避免之間迴圈:

慢啟動出現擁塞(ssthresh初始值65536,不會達到),重新進入慢啟動。

慢啟動cwnd超過ssthresh(ssthresh此時是上次丟包是cwnd的一般,可以超過),進入擁塞避免。

擁塞避免出現擁塞,重新進入慢啟動。

......

5.雖然慢啟動和擁塞避免 配合擁塞狀態也能工作,但發生擁塞後慢啟動的起點低,耗時仍比較長,所以有必要疊加快速重傳機制。

6.tcp利用3個相同的ack來判定資料報丟失,這個可以認為是擁塞狀態2,這個擁塞狀態由接收端判定觸發,此時rto並未超時,只是接收端認為收到了很多大於某個序號seqx的包,但是seqx本身卻沒收到。 此時進行快速重傳操作(每收到乙個後面的包就會發乙個未收到包的ack),快速重傳機制實際就是擁塞狀態2發生時的乙個處理機制,或者說,擁塞狀態2直接命名為快速重傳2也可以。

擁塞狀態2發生後,1.把ssthresh設定為cwnd的一半 2.把cwnd再設定為ssthresh的值(具體實現有些為ssthresh+3) 3.重新進入擁塞避免階段。

8.有了擁塞狀態2和快速重傳機制後,擁塞避免就可以再次進入擁塞避免,這種情況下避免慢啟動再次經歷耗費時間,對網路的短暫波動適應能力強:

出現擁塞1(超時),則進入慢啟動。

出現擁塞2(3ack),則進入擁塞避免。

可以猜想:

在報文傳送較少,低速狀態時,傳送了乙個包,後面又沒有什麼後續報文。倘若該報文被丟了,此時接收端並不會感知到啥,只能依靠擁塞1來檢測進入慢啟動了。實際此時慢啟動也關係不大,因為本身速率較低。

在報文傳送較多,高速狀態時,傳送了乙個包,後續還有很多後續報文。倘若該報文丟了,此時接收端可以更快感知到某個報文被丟棄,因為他會發現後續大部分甚至所有報文都到了,唯獨缺了這個報文,就正常分析看,那個報文被丟棄可能性很大。 由於接收端此時對於丟包感知更快,主要會依靠擁塞2來檢測,調整ssthresh和cwnd之後再次快速重傳進入擁塞避免階段。 這樣避免了重新經歷慢啟動,節約了部分時間,避免了對速率造成更大影響。

9.通過擁塞2進入擁塞避免會經歷快速恢復階段(也有一種提法根本就沒有快速恢復階段,所謂快速恢復只是指出現擁塞2時直接轉入擁塞避免的乙個處理機制)。

快速恢復的流程:

1.當收到3個重複ack時,把ssthresh設定為cwnd的一半,把cwnd設定為當前ssthresh的值加3,然後重傳丟失的報文段,加3的原因是因為收到3個重複的ack,表明有3個「老」的資料報離開了網路到達對岸。

2.再收到重複的ack時,擁塞視窗增加1。

3.當收到新的資料報的ack時,把cwnd設定為第一步中儲存的ssthresh的值。原因是因為該ack確認了新的資料,說明從重複ack時的資料都已收到,該恢復過程已經結束,可以回到恢復之前的狀態了,也即再次進入擁塞避免狀態。

tcp擁塞控制之快速恢復

具體來說快速恢復的主要步驟是 1.當收到3個重複ack時,把ssthresh設定為cwnd的一半,把cwnd設定為ssthresh的值加3,然後重傳丟失的報文段,加3的原因是因為收到3個重複的ack,表明有3個 老 的資料報離開了網路。2.再收到重複的ack時,擁塞視窗增加1。3.當收到新的資料報的...

TCP慢啟動 擁塞避免 快速重傳 快速恢復

慢啟動,是傳輸控制協議使用的一種阻塞控制機制。慢啟動也叫做指數增長期。慢啟動是指每次tcp接收視窗收到確認時都會增長。增加的大小就是已確認段的數目。這種情況一直保持到要麼沒有收到一些段,要麼視窗大小到達預先定義的閾值。如果發生丟失事件,tcp就認為這是網路阻塞,就會採取措施減輕網路擁擠。一旦發生丟失...

TCP的滑動視窗與擁塞視窗

一 滑動視窗 滑動視窗協議是傳輸層進行流控的一種措施,接收方通過通告傳送方自己的視窗大小,從而控制傳送方的傳送速度,從而達到防止傳送方傳送速度過快而導致自己被淹沒的目的。對ack的再認識,ack通常被理解為收到資料後給出的乙個確認ack,ack包含兩個非常重要的資訊 一是期望接收到的下一位元組的序號...