TCP 擁塞控制

2021-08-17 15:53:20 字數 2171 閱讀 1782

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

一、什麼是網路擁塞

是指在分組交換網路中傳送分組的數目太多時,由於儲存**節點的資源有限而造成網路傳輸效能下降的情況。當網路發生擁塞時,一般會出現資料丟失,時延增加,吞吐量下降,嚴重時甚至會導致「擁塞崩潰」(congestion collapse)。通常情況下,當網路中負載過度增加致使網路效能下降時,就會發生網路擁塞。

產生擁塞的原因:

1、物理鏈路的頻寬有限。

2、交換節點的快取有限。

3、節點的處理能力有限

歸根結底來說,當我們的上訴三點的需求 > 可用資源的時候就會產生網路擁塞。

其實解決上述問題,我們只需要保證兩個點就可以了,第一,我們傳送的 ip 包不能丟失,第二,還要保證傳送的速度最大化

tcp 處理網路擁塞,主要涉及到乙個動態變化的視窗(擁塞視窗,也可以叫滑動視窗),該視窗的數量與網路擁塞的程度有關,在網路情況好的時候,擁塞視窗不斷的增加,傳送方的視窗自然也隨著增加,但是接受方的接受能力有限,在傳送方的視窗達到某個大小時就不在發生變化了。一般的tcp協議,擁塞視窗的門限的數量為 65536,當小於這個值的時候,使用慢啟動演算法增加傳送 ip 包的數量,當大於或等於這個值的時候,使用擁塞控制演算法增加傳送 ip 包的數量。

傳送方如何判斷擁塞的:

當我們傳送一段報文的時候,如何在一段時間內,沒有收到確認報文,那麼我們就可以認為網路擁塞了。

慢啟動演算法:

傳送方開始傳送資料報時,如果立即將大量的資料注入到網路中,可能會出現網路的擁塞。慢啟動演算法就是在傳送方剛開始傳送資料報的時候先探測一下網路的狀況,如果網路狀況良好,傳送方每傳送一次文段都能正確的接受確認報文段。那麼就從小到大的增加擁塞視窗的大小,即增加傳送ip 包的數量。一般傳送 ip 包的數量是通過冪次方增加的。例如,

開始傳送方先設定cwnd(擁塞視窗)=1,傳送第乙個報文段m1,接收方接收到m1後,傳送方接收到接收方的確認後,把cwnd增加到2,接著傳送方傳送m2、m3,傳送方接收到接收方傳送的確認後cwnd增加到4,慢啟動演算法每經過乙個傳輸輪次(認為傳送方都成功接收接收方的確認),擁塞視窗cwnd就 * 2。

是讓cwnd緩慢的增加而不是加倍的增長,每經歷過一次往返時間就使cwnd增加1,而不是加倍,這樣使cwnd緩慢的增長,比慢啟動要慢的多。

擁塞避免:

上面我們說到乙個擁塞視窗數量的門限(ssthresh)一般為 65536,那麼就有如下演算法:

1.、當cwnd < ssthresh,使用慢啟動演算法,

2.、當cwnd > ssthresh,使用擁塞控制演算法,停用慢啟動演算法。

3.、當cwnd = ssthresh,這兩個演算法都可以。

當出現網路擁塞的時候,首先會把門限 ssthresh 的數量減半,然後 cwnd 的數量會變為 1,然後在使用慢啟動演算法,這樣做的目的能迅速的減少主機向網路中傳輸資料,使發生擁塞的路由器能夠把佇列中堆積的分組處理完畢。

例項:例如我們的 cwnd (也就是我們要傳送 ip 包的數量) 為1,然後我們的門限為 16。

1、在慢啟動演算法開始時,cwnd的初始值是1,每次傳送方收到乙個ack擁塞視窗就增加1,當 ssthresh = cwnd 時,就啟動擁塞控制演算法,擁塞視窗按照規律增長,

2、當 cwnd=24 時,網路出現超時,傳送方收不到確認ack,此時設定 ssthresh = 12,(二分之一 cwnd),設定 cwnd=1 ,然後開始慢啟動演算法,當 cwnd=ssthresh = 12 ,慢啟動演算法變為擁塞控制演算法,cwnd 按照線性的速度進行增長。 

快重傳演算法要求首先接收方收到乙個失序的報文段後就立刻發出重複確認,而不要等待自己傳送資料時才進行捎帶確認。接收方成功的接受了傳送方傳送來的m1、m2並且分別給傳送了ack,現在接收方沒有收到m3,而接收到了m4,顯然接收方不能確認m4,因為m4是失序的報文段。如果根據可靠性傳輸原理接收方什麼都不做,但是按照快速重傳演算法,在收到m4、m5等報文段的時候,不斷重複的向傳送方傳送m2的ack,如果接收方一連收到三個重複的ack,那麼傳送方不必等待重傳計時器到期,由於傳送方盡早重傳未被確認的報文段。

1、 當傳送發連續接收到三個確認時,就執行乘法減小演算法,把慢啟動開始門限(ssthresh)減半,但是接下來並不執行慢開始演算法。

TCP擁塞控制

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

TCP擁塞控制

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

TCP擁塞控制

tcp擁塞控制 擁塞檢測 congestion detection 擁塞控制 congestion prevention tcp擁塞原因 網際網路解決方案應該是認識到兩個潛在的問題的 網路容量 接收者容量,然後單獨地處理這兩個問題 為此,每個傳送者維護兩個視窗 慢啟動演算法 slow start 獲...