目錄
1. TCP擁塞控制和TCP流量控制的區別
2. 檢測到擁塞該怎么辦
2.1 如何判斷網絡擁塞?
3. 慢開始算法 +?擁塞避免算法
4.快重傳事件->快恢復算法
5. 總結
1. TCP擁塞控制和TCP流量控制的區別
TCP流量控制是控制端對端的數據發送量。是局部的概念。
TCP擁塞控制是控制整個網絡中每臺主機的數據發送量。是整體的概念。
2. 檢測到擁塞該怎么辦
接收窗口代表數據的接收方接收數據的能力;擁塞窗口代表當前網絡傳輸數據的能力。
如果發送了網絡擁塞,應該減小擁塞窗口,也就間接減小了發送窗口。每一臺主機就會減少數據的發送量,網絡擁塞的情況就會有所緩解。?
2.1 如何判斷網絡擁塞?
①每個報文段發送以后都能得到ACK確認,不擁塞。
②發出的報文段未能按時收到ACK從而超時重傳,嚴重擁塞。
③收到冗余的ACK,引發快重傳,有點擁塞。
(假設接收窗口足夠大)
3. 慢開始算法 +?擁塞避免算法
嚴重擁塞的時候,迅速降低擁塞窗口? +?網絡不擁塞的時候,調大擁塞窗口。
解釋:
????????剛開始發送數據的時候設置擁塞窗口為1,擁塞閾值為16;此時發送一個報文段立即接受ACK,每收到一個ACK就讓擁塞窗口的值+1,所以第二次發送兩個報文段收到兩個ACK那么擁塞窗口的值+2,以此類推,每次擁塞窗口的值會翻倍;知道閾值窗口達到設定的擁塞閾值16。
? ? ? ? 達到擁塞閾值之后,在一個RTT內無論有多少個ACK一律全部把擁塞窗口的值+1。當返回16個ACK的時候,擁塞窗口的值+1。
? ? ? ? 假如擁塞窗口到了24的時候出現了超時重傳,此時網絡處于嚴重擁塞,我們這個時候立即啟用慢開始算法,把擁塞窗口降低到1,此時擁塞閾值的值會變成超時重傳之前的擁塞窗口的一半也就是12;后面就繼續翻倍,當擁塞窗口為8的時候,發送了8個報文段應該收到8個ACK,但是不能超過新的擁塞閾值12,所以只能加4到達閾值,到達閾值之后算法從慢開始變成了擁塞避免算法,后續不論收到多少ACK每次擁塞窗口只加1
4.快重傳事件->快恢復算法
有點擁塞的時候,適當減少擁塞窗口。
我們查看上圖,在RTT=12的時候此時發生了超時重傳,說明網絡擁塞特別嚴重,需要立即啟用慢開始算法,把擁塞窗口的值變為1,擁塞閾值變成之前擁塞窗口的一半。但是如果只是收到了冗余ACK發生了快重傳,說明網絡此時稍微有點擁塞,采用快恢復算法,把當前擁塞窗口變為原來的一半即可;擁塞閾值也變成擁塞窗口的一半,這樣一來擁塞窗口和擁塞閾值是相等的,就可以使用擁塞避免算法:即無論收到多少個ACK,擁塞窗口只+1。
5. 總結
????????一開始我們使用慢開始算法,使得擁塞窗口成倍數增加,當達到擁塞窗口=擁塞閾值的時候,我們需要切換算法為擁塞避免算法。我們需要進行分辨接下來的事件:
事件1:發生超時重傳,說明網絡非常擁塞,直接啟用慢開始算法,把擁塞窗口重新變為1,擁塞閾值變為原來擁塞窗口的一半。
事件2:發生快重傳事件,也就是收到多個重復ack,立即重傳;說明網絡有點擁塞,此時把擁塞窗口調整為原來的一半,擁塞閾值調整到原來擁塞窗口的一半,這樣一來擁塞閾值和擁塞窗口相等,就可以開始擁塞避免算法了。