擁塞窗口
擁塞窗口
擁塞窗口是衛星通信在網際網路中防止通信擁塞的一種措施,它是在發端採用了一種“擁塞避免”演演算法和“慢速啟動”演演算法相結合的機制。“擁塞窗口”就是“擁塞避免”的窗口,它是一個裝在發送端的可滑動窗口,窗口的大小是不超過接收端確認通知的窗口。“慢速啟動”是在連接建立后,每收到一個來自收端的確認,就控制窗口增加一個段值大小,當窗口值達到“慢速啟動”的限值后,慢速啟動便停止工作,避免了網路發生擁塞。
擁塞窗口的大小取決於網路的擁塞程度,並且動態地在變化。發送方讓自己的發送窗口等於擁塞窗口。如果再考慮到接收方的接收能力,那麼發送窗口還可能小於擁塞窗口。
發送方控制擁塞窗口的原則是:只要網路沒有出現擁塞,擁塞窗口就再增大一些,以便把更多的分組發送出去。但只要網路出現擁塞,擁塞窗口就減少一些,以減少注入到網路中的分組數。
慢開始演演算法的思路就是,不要一開始就發送大量的數據,先探測一下網路的擁塞程度,也就是說由小到大逐漸增加擁塞窗口的大小。
發送方會維持一個擁塞窗口,剛開始的擁塞窗口和發送窗口相等,一般開始均設置1,然後我們每收到一個確認,就讓擁塞窗口大小變為原來的兩倍,接著發送分組也是原來的兩倍,以此類推,當窗口值等於16(慢開始門限ssthresh初始值),然後我們開始採用“加法增大”的策略,即不在以2倍的方式增加,而是轉變為每次加1的方式。直到網路擁塞。我們開始採用“擁塞避免”演演算法:讓新的慢開始門限值變為發生擁塞時候的值的一半,將擁塞窗口置為1,然後讓它再次重複,這時一瞬間會將網路中的數據量大量降低。
當cwnd擁塞避免演演算法讓擁塞窗口緩慢增長,即每經過一個往返時間RTT就把發送方的擁塞窗口cwnd加1,而不是加倍。這樣擁塞窗口按線性規律緩慢增長。快重傳可以提高網路的吞吐量而快恢復演演算法相當於擁塞避免演演算法的後半恢復部分的優化.由於此時沒 有發送網路阻塞(要是發生阻塞的話就不會連續收到4個確認),因此此時不執行慢開始演演算法,並不會將擁塞窗口的值置為1,而是將它置為慢開始門限的 一半.然後再實行擁塞避免演演算法,每次收到確認之後+1.
當cwnd>ssthresh時,改用擁塞避免演演算法。
當接收方cwnd=ssthresh時,慢開始與擁塞避免演演算法任意。(既可使用慢開始演演算法,也可使用擁塞避免演演算法)
擁塞窗口
無論是在慢開始階段還是在擁塞避免階段,只要發送方判斷網路出現擁塞(其根據就是沒有收到確認,雖然沒有收到確認可能是其他原因的分組丟失,但是因為 無法判定,所以都當做擁塞來處理),就把慢開始門限設置為出現擁塞時的發送窗口大小的一半。然後把擁塞窗口設置為1,執行慢開始演演算法。
提醒這裡只是為了討論方便而將擁塞窗口大小的單位改為數據報的個數,實際上應當是位元組。
擁塞窗口
假設以下情況:如果在發送方設置的超時定時器到時間還沒有收到確認,那麼有一種可能是網路發生堵塞,這種情況下,tcp會將擁塞窗口置為一,新的門限值變為發生阻塞時的一半並且開始執行慢開始演演算法。當我們使用快重傳的時候,要求接收方接收到一個失序的報文段后就立即發出 重複確認,(目的是讓對方早知道有報文段沒有到達)假設發送方發送了M1–M4四個分組,接收方收到了M1和M2,以及M4,這些分組.
現在接收方不能確認M4,因為M3沒有收到,此時接收方可以什麼都不幹,也可以發送對M2的確認,但是快重傳演演算法要求這樣做:
接收方應該及時發送對M2的重複確認,這樣可以讓發送方知道M3並沒有被傳過來,發送方還會試著發送M5,M6,接收方收到之後,我們會繼續發送對M2的確認,這樣一共發了好幾個對M2的確認,按照規定,只要發送方收到三個重複確認,就立即重傳對方未收到的報文段M3.這樣可以避免阻塞,並且提高我們網路的吞吐量.
快恢復演演算法與快重傳演演算法配合使用
當發送方收到三個連續確認時,就執行”乘法減小”演演算法,把”慢開始門限”減半,注意接下來不會執行慢開始演演算法.
擁塞窗口
快重傳配合使用的還有快恢復演演算法,有以下兩個要點:
①當發送方連續收到三個重複確認時,就執行“乘法減小”演演算法,把ssthresh門限減半。但是接下去並不執行慢開始演演算法。②考慮到如果網路出現擁塞的話就不會收到好幾個重複的確認,所以發送方現在認為網路可能沒有出現擁塞。所以此時不執行慢開始演演算法,而是將cwnd設置為ssthresh的大小,然後執行擁塞避免演演算法。
接收方的緩存空間總是有限的。接收方根據自己的接收能力設定了接收窗口rwnd,並把這個窗口值寫入TCP首部中的窗口欄位,傳送給發送方。因此接收窗口又稱為通知窗口(advertised window)。因此,從接收方對發送方的流量控制的角度考慮,發送方的發送窗口一定不能超過對方給出的接收窗口值rwnd。
發送方窗口的上限值=Min [rwnd,cwnd]
當rwnd
反之,當cwnd
也就是說,rwnd和cwnd中較小的一個控制發送方發送數據的速率。
目錄