通常,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是如何處理前面的情況的。一 什麼是網...