TCP擁塞控制

2021-09-24 11:13:34 字數 2132 閱讀 1150

通常,tcp在建立新連線時執行慢啟動,直至有丟包時,執行擁塞避免進入穩定狀態。

傳送端維持乙個擁塞視窗cwnd(congestion window)的狀態變數。擁塞視窗的大小取決於網路的擁塞程度,並且在動態的變化。傳送方讓自己的傳送視窗等於擁塞視窗的大小。

擁塞視窗的原則是:只要網路沒有出現擁塞,擁塞視窗就可以再增大一點,但只要網路出現擁塞,擁塞視窗就減小一些。

在傳輸初始階段,對網路傳輸能力未知,所以先緩慢探測可用傳輸資源,防止短時間內大量資料注入導致阻塞。

剛開始將cwnd設定為1個最大報文段mss(maximum segment size)的大小,每經過乙個傳輸輪次,將擁塞視窗的大小增加一倍。傳輸輪次定義為將擁塞視窗cwnd所允許傳送的報文段都傳送出去,並受到對最後乙個報文段的確認。、

為了防止擁塞視窗過大引起擁塞,需要設定乙個慢啟動閾值ssthresh,超過閾值時,使用擁塞避免演算法。

資料傳輸起始超時重傳後丟包後,執行慢啟動。

快速確認——因為ack可能會延時到達,所以一些tcp操作旨在慢啟動階段完成後才返回ack,linux中被稱為「快速ack模式」

此時讓擁塞視窗cwnd緩慢增大,沒經過乙個rtt就把cwnd加1。

慢啟動階段,cwnd會快速增長,從而確定乙個慢啟動閾值。之後tcp會進入擁塞避免階段,cwnd每次的增長值近似於成功傳輸的資料段大小。成線性關係,累加增長

無論在慢啟動階段還是擁塞避免階段,只要判斷網路出現擁塞(即沒有收到最終的確認),就把ssthresh設定為出現擁塞時的cwnd的一半,然後將cwnd設定為1,執行慢啟動演算法,作用是減少主機傳送到網路中的分組,從而讓網路有足夠的時間處理積壓的分組

接收方每接受到乙個失序的報文段就立即發出重複確認,是讓傳送方及早知道有報文段沒有到達對方,而不要等到自己傳送資料時才捎帶確認。

傳送方收到連續三個重複確認就應當立即重傳對方為收到的報文段,而不必等到該報文段的重傳定時器到期(並沒有超時),是的傳送方今早重傳未被確認的分組。

與快重傳配合使用。

當傳送方收到連續三個重複確認報文段,執行乘法減小演算法,把慢啟動閾值ssthresh減半,但接下來不執行慢啟動演算法

而是將cwnd的值設定為慢啟動閾值ssthresh減半後的數值,然後開始執行擁塞避免演算法,是視窗大小線性增大。

慢啟動與擁塞避免的區別在於 當新的ack到達時,cwnd怎樣增長。慢啟動是加倍增長,而擁塞避免是累加增長

若出現重傳情況,tcp會認為操作視窗超過了網路傳輸能力,此時會將慢啟動閾值減少當前視窗的1/2

快恢復在將慢啟動閾值減半後不將cwnd設定為1,指定慢啟動演算法,而是將cwnd設定為減半後的ssthresh,直接使用擁塞避免演算法。

新的reno版本在快重傳之後使用快恢復演算法而不是慢啟動演算法。

使用快恢復演算法時,慢啟動演算法只是在tcp連線建立時和網路出現超時時才會使用。

窗 口大

小=mi

n(rw

nd,c

wnd)

視窗大小 = min(rwnd, cwnd)

視窗大小=m

in(r

wnd,

cwnd

)rwnd是傳送方接受視窗的大小,用於實現流量控制。

cwnd是擁塞串列埠大小,用於實現網路擁塞控制。

TCP擁塞控制

擁塞控制就是防止過多的資料注入到網路中,這樣可以使網路中的路由器或鏈路不致過載,擁塞控制要做的都有個前提,就是網路能夠承受現有的網路負荷。擁塞控制是個全域性性的過程。幾種擁塞控制方法 慢開始 擁塞避免 快重傳 快恢復 1.慢開始和擁塞避免 傳送方維持乙個叫做擁塞視窗的狀態變數,擁塞視窗取決於網路的擁...

TCP擁塞控制

計算機網路中的頻寬 交換結點中的快取和處理機等,都是網路的資源。在某段時間,若對網路中某一資源的需求超過了該資源所能提供的可用部分,網路的效能就會變壞。這種情況就叫做擁塞。擁塞控制就是防止過多的資料注入網路中,這樣可以使網路中的路由器或鏈路不致過載。擁塞控制是乙個全域性性的過程,和流量控制不同,流量...

TCP 擁塞控制

我們都知道 tcp 是傳輸層的協議,網路請求經過傳輸層到達網路層之後是通過 ip 包進行傳輸的。如果我們傳送方大量的 ip 包的時候,有可能我們的鏈路資源有限,那麼我們的 ip 包就有可能丟失或者被丟棄,這樣我們的請求就不是絕對安全的,那接下來我們就說一下,tcp是如何處理前面的情況的。一 什麼是網...