複製鏈接
請複製以下鏈接發送給好友

擁塞窗口

鎖定
擁塞窗口,是衞星通信在因特網中防止通信擁塞的一種措施,它是在發端採用了一種“擁塞避免”算法和“慢速啓動”算法相結合的機制。“擁塞窗口”就是“擁塞避免”的窗口,它是一個裝在發送端的可滑動窗口,窗口的大小是不超過接收端確認通知的窗口。“慢速啓動”是在連接建立後,每收到一個來自收端的確認,就控制窗口增加一個段值大小,當窗口值達到“慢速啓動”的限值後,慢速啓動便停止工作,避免了網絡發生擁塞。 [1] 
中文名
擁塞窗口
外文名
cwnd(congestion window)
定    義
衞星通信在因特網中防止通信擁塞的措施

擁塞窗口簡介

擁塞窗口的大小取決於網絡的擁塞程度,並且動態地在變化。發送方讓自己的發送窗口等於擁塞窗口。如果再考慮到接收方的接收能力,那麼發送窗口還可能小於擁塞窗口。
發送方控制擁塞窗口的原則是:只要網絡沒有出現擁塞,擁塞窗口就再增大一些,以便把更多的分組發送出去。但只要網絡出現擁塞,擁塞窗口就減少一些,以減少注入到網絡中的分組數。 [2] 

擁塞窗口變化算法

慢開始算法和擁塞避免算法
慢開始算法的思路就是,不要一開始就發送大量的數據,先探測一下網絡的擁塞程度,也就是説由小到大逐漸增加擁塞窗口的大小。 [3] 
發送方會維持一個擁塞窗口,剛開始的擁塞窗口和發送窗口相等,一般開始均設置1,然後我們每收到一個確認,就讓擁塞窗口大小變為原來的兩倍,接着發送分組也是原來的兩倍,以此類推,當窗口值等於16(慢開始門限ssthresh初始值),然後我們開始採用“加法增大”的策略,即不在以2倍的方式增加,而是轉變為每次加1的方式.直到網絡擁塞。我們開始採用“擁塞避免”算法:讓新的慢開始門限值變為發生擁塞時候的值的一半,將擁塞窗口置為1,然後讓它再次重複,這時一瞬間會將網絡中的數據量大量降低。 [4] 
當cwnd<ssthresh時,使用慢開始算法。
當cwnd>ssthresh時,改用擁塞避免算法。
當接收方cwnd=ssthresh時,慢開始與擁塞避免算法任意。(既可使用慢開始算法,也可使用擁塞避免算法)
擁塞窗口 擁塞窗口
擁塞避免算法讓擁塞窗口緩慢增長,即每經過一個往返時間RTT就把發送方的擁塞窗口cwnd加1,而不是加倍。這樣擁塞窗口按線性規律緩慢增長。
擁塞窗口 擁塞窗口
無論是在慢開始階段還是在擁塞避免階段,只要發送方判斷網絡出現擁塞(其根據就是沒有收到確認,雖然沒有收到確認可能是其他原因的分組丟失,但是因為無法判定,所以都當做擁塞來處理),就把慢開始門限設置為出現擁塞時的發送窗口大小的一半。然後把擁塞窗口設置為1,執行慢開始算法。
提醒這裏只是為了討論方便而將擁塞窗口大小的單位改為數據報的個數,實際上應當是字節。 [3] 
快重傳算法和快恢復算法
擁塞窗口 擁塞窗口
快重傳可以提高網絡的吞吐量而快恢復算法相當於擁塞避免算法的後半恢復部分的優化.
假設以下情況:如果在發送方設置的超時定時器到時間還沒有收到確認,那麼有一種可能是網絡發生堵塞,這種情況下,tcp會將擁塞窗口置為一,新的門限值變為發生阻塞時的一半並且開始執行慢開始算法.當我們使用快重傳的時候,要求接收方接收到一個失序的報文段後就立即發出 重複確認,(目的是讓對方早知道有報文段沒有到達)
假設發送方發送了M1–M4四個分組,接收方收到了M1和M2,以及M4,這些分組.
接收方不能確認M4,因為M3沒有收到,此時接收方可以什麼都不幹,也可以發送對M2的確認,但是快重傳算法要求這樣做:
接收方應該及時發送對M2的重複確認,這樣可以讓發送方知道M3並沒有被傳過來,發送方還會試着發送M5,M6,接收方收到之後,我們會繼續發送對M2的確認,這樣一共發了好幾個對M2的確認,按照規定,只要發送方收到三個重複確認,就立即重傳對方未收到的報文段M3.這樣可以避免阻塞,並且提高我們網絡的吞吐量.
快恢復算法與快重傳算法配合使用
當發送方收到三個連續確認時,就執行”乘法減小”算法,把”慢開始門限”減半,注意接下來不會執行慢開始算法.
擁塞窗口 擁塞窗口
由於此時沒有發送網絡阻塞(要是發生阻塞的話就不會連續收到4個確認),因此此時不執行慢開始算法,並不會將擁塞窗口的值置為1,而是將它置為慢開始門限的一半.然後再實行擁塞避免算法,每次收到確認之後+1. [4] 
快重傳配合使用的還有快恢復算法,有以下兩個要點:
①當發送方連續收到三個重複確認時,就執行“乘法減小”算法,把ssthresh門限減半。但是接下去並不執行慢開始算法。②考慮到如果網絡出現擁塞的話就不會收到好幾個重複的確認,所以發送方認為網絡可能沒有出現擁塞。所以此時不執行慢開始算法,而是將cwnd設置為ssthresh的大小,然後執行擁塞避免算法。 [3] 

擁塞窗口緩存空間

接收方的緩存空間總是有限的。接收方根據自己的接收能力設定了接收窗口rwnd,並把這個窗口值寫入TCP首部中的窗口字段,傳送給發送方。因此接收窗口又稱為通知窗口(advertised window)。因此,從接收方對發送方的流量控制的角度考慮,發送方的發送窗口一定不能超過對方給出的接收窗口值rwnd。
發送方窗口的上限值=Min [rwnd,cwnd]
當rwnd<cwnd時,是接收方的接收能力限制發送方窗口的最大值。
反之,當cwnd<rwnd時,則是網絡的擁塞控制發送方窗口的最大值。
也就是説,rwnd和cwnd中較小的一個控制發送方發送數據的速率。 [2] 
參考資料