擁塞視窗

擁塞視窗是衛星通信在網際網路中防止通信擁塞的一種措施,它是在發端採用了一種“擁塞避免”算法和“慢速啟動”算法相結合的機制。“擁塞視窗”就是“擁塞避免”的視窗,它是一個裝在傳送端的可滑動視窗,視窗的大小是不超過接收端確認通知的視窗。“慢速啟動”是在連線建立後,每收到一個來自收端的確認,就控制視窗增加一個段值大小,當視窗值達到“慢速啟動”的限值後,慢速啟動便停止工作,避免了網路發生擁塞。

擁塞視窗的大小取決於網路的擁塞程度,並且動態地在變化。傳送方讓自己的傳送視窗等於擁塞視窗。如果再考慮到接收方的接收能力,那么傳送視窗還可能小於擁塞視窗。

傳送方控制擁塞視窗的原則是:只要網路沒有出現擁塞,擁塞視窗就再增大一些,以便把更多的分組傳送出去。但只要網路出現擁塞,擁塞視窗就減少一些,以減少注入到網路中的分組數。

擁塞視窗大小變化算法

慢開始算法和擁塞避免算法

慢開始算法的思路就是,不要一開始就傳送大量的數據,先探測一下網路的擁塞程度,也就是說由小到大逐漸增加擁塞視窗的大小。

傳送方會維持一個擁塞視窗,剛開始的擁塞視窗和傳送視窗相等,一般開始均設定1,然後我們每收到一個確認,就讓擁塞視窗大小變為原來的兩倍,接著傳送分組也是原來的兩倍,以此類推,當視窗值等於16(慢開始門限ssthresh初始值),然後我們開始採用“加法增大”的策略,即不在以2倍的方式增加,而是轉變為每次加1的方式.直到網路擁塞。我們開始採用“擁塞避免”算法:讓新的慢開始門限值變為發生擁塞時候的值的一半,將擁塞視窗置為1,然後讓它再次重複,這時一瞬間會將網路中的數據量大量降低。

當cwnd<ssthresh時,使用慢開始算法。

當cwnd>ssthresh時,改用擁塞避免算法。

當接收方cwnd=ssthresh時,慢開始與擁塞避免算法任意。(既可使用慢開始算法,也可使用擁塞避免算法)

擁塞視窗 擁塞視窗

擁塞避免算法讓擁塞視窗緩慢增長,即每經過一個往返時間RTT就把傳送方的擁塞視窗cwnd加1,而不是加倍。這樣擁塞視窗按線性規律緩慢增長。

擁塞視窗 擁塞視窗

無論是在慢開始階段還是在擁塞避免階段,只要傳送方判斷網路出現擁塞(其根據就是沒有收到確認,雖然沒有收到確認可能是其他原因的分組丟失,但是因為無法判定,所以都當做擁塞來處理),就把慢開始門限設定為出現擁塞時的傳送視窗大小的一半。然後把擁塞視窗設定為1,執行慢開始算法。

提醒這裡只是為了討論方便而將擁塞視窗大小的單位改為數據報的個數,實際上應當是位元組。

快重傳算法和快恢復算法

擁塞視窗 擁塞視窗
快重傳可以提高網路的吞吐量而快恢復算法相當於擁塞避免算法的後半恢復部分的最佳化.
假設以下情況:如果在傳送方設定的逾時定時器到時間還沒有收到確認,那么有一種可能是網路發生堵塞,這種情況下,tcp會將擁塞視窗置為一,新的門限值變為發生阻塞時的一半並且開始執行慢開始算法.當我們使用快重傳的時候,要求接收方接收到一個失序的報文段後就立即發出 重複確認,(目的是讓對方早知道有報文段沒有到達)

假設傳送方傳送了M1–M4四個分組,接收方收到了M1和M2,以及M4,這些分組.
現在接收方不能確認M4,因為M3沒有收到,此時接收方可以什麼都不乾,也可以傳送對M2的確認,但是快重傳算法要求這樣做:
接收方應該及時傳送對M2的重複確認,這樣可以讓傳送方知道M3並沒有被傳過來,傳送方還會試著傳送M5,M6,接收方收到之後,我們會繼續傳送對M2的確認,這樣一共發了好幾個對M2的確認,按照規定,只要傳送方收到三個重複確認,就立即重傳對方未收到的報文段M3.這樣可以避免阻塞,並且提高我們網路的吞吐量.

快恢復算法與快重傳算法配合使用

當傳送方收到三個連續確認時,就執行”乘法減小”算法,把”慢開始門限”減半,注意接下來不會執行慢開始算法.

擁塞視窗 擁塞視窗

由於此時沒有傳送網路阻塞(要是發生阻塞的話就不會連續收到4個確認),因此此時不執行慢開始算法,並不會將擁塞視窗的值置為1,而是將它置為慢開始門限的 一半.然後再實行擁塞避免算法,每次收到確認之後+1.

快重傳配合使用的還有快恢復算法,有以下兩個要點:

①當傳送方連續收到三個重複確認時,就執行“乘法減小”算法,把ssthresh門限減半。但是接下去並不執行慢開始算法。②考慮到如果網路出現擁塞的話就不會收到好幾個重複的確認,所以傳送方現在認為網路可能沒有出現擁塞。所以此時不執行慢開始算法,而是將cwnd設定為ssthresh的大小,然後執行擁塞避免算法。

傳送方視窗的上限值

接收方的快取空間總是有限的。接收方根據自己的接收能力設定了接收視窗rwnd,並把這個視窗值寫入TCP首部中的視窗欄位,傳送給傳送方。因此接收視窗又稱為通知視窗(advertised window)。因此,從接收方對傳送方的流量控制的角度考慮,傳送方的傳送視窗一定不能超過對方給出的接收視窗值rwnd。

傳送方視窗的上限值=Min [rwnd,cwnd]

當rwnd<cwnd時,是接收方的接收能力限制傳送方視窗的最大值。

反之,當cwnd<rwnd時,則是網路的擁塞控制傳送方視窗的最大值。

也就是說,rwnd和cwnd中較小的一個控制傳送方傳送數據的速率。

相關詞條

熱門詞條

聯絡我們