【學習總結】網絡-TCP擁塞控制
tcp擁塞控制
-
出現擁塞的條件:
-
後果
- 網絡中許多資源同時呈現供應不足 -- 網絡性能變壞 -- 網絡吞吐量將隨着輸入負荷增大而降低。
-
定義:
- 擁塞控制,能夠防止過多數據注入網絡,以使網絡中的路由器或鏈路不致過載。
爲何有了滑動窗口還須要有擁塞窗口?
- 滑動窗口是對發送接收雙方的流量控制,若是中間的網絡設備的轉發性能達到極限是沒法感知到的,而tcp除了針對自身的收發能力作調整,還根據總體的網絡狀況作調整,因此有了擁塞窗口。
tcp擁塞控制與流量控制的區別
-
概述:
-
詳述:
- 擁塞控制是讓網絡可以承受現有的網絡負荷,是一個全局性的過程,涉及全部的主機、全部的路由器,以及與下降網絡傳輸性能有關的全部因素。
- 流量控制是指點對點的通訊量的控制,即接收端控制發送端,它所要作的是抑制發送端發送數據的速率,以便使得接收端來得及接收。
tcp擁塞控制的算法
-
擁塞控制的算法:慢開始、擁塞避免,快重傳,快恢復。
慢開始和擁塞控制
-
圖示:慢開始 -- 擁塞避免算法 -- 網絡擁塞的處理 -- 慢開始 -- 擁塞避免算法 -- ...
![](http://static.javashuo.com/static/loading.gif)
-
慢開始詳述:
- 以最大報文段長度MSS爲擁塞窗口cwnd的增加單位。
- 初始零擁塞窗口cwnd=1,而後每通過一個傳輸輪次(往返時延RTT),擁塞窗口都呈指數增大。
- 規定一個慢開始門限ssthread-slow start thread
- 一直增大擁塞窗口cwnd,直到慢開始門限ssthread,而後改用擁塞避免算法。
-
擁塞避免算法詳述:
- 加法增大:發送端的擁塞窗口cwnd每次通過一個傳輸輪次,就只增大一個MSS大小,即按照線性規律緩慢增大。
- 乘法減少:當出現網絡擁塞(即一次超時)時,令慢開始門限ssthread減少爲當前cwnd的一半,但不小於2
- 注意:更新慢開始門限,參考值是當前cwnd的一半,不是當前門限的一半!
- cwnd不一樣大小時,執行不一樣算法:
- cwnd<ssthread:慢開始
- cwnd=ssthread:能夠慢開始,也能夠擁塞避免(一般作法)
- cwnd>ssthread:擁塞避免
-
網絡擁塞的處理
- 更新ssthread值
- 擁塞窗口從新設置爲1,並從新開始執行慢開始算法。
- 目的:迅速減小主機發送到網絡中的分組數,使得發生擁塞的路由器有足夠的時間把隊列中積壓的分組處理完。
快重傳和快恢復
-
圖示:在慢開始和擁塞避免基礎上改進,慢開始 -- 快重傳 -- (跳過慢開始)快恢復 -- 擁塞避免 --
![](http://static.javashuo.com/static/loading.gif)
-
快重傳
- 快重傳:使用了冗餘ACK來檢查丟包的發生。
- 當發送方連續收到三個重複的ACK報文時,直接重傳對方還沒有收到的報文段,而沒必要等待重傳計時器超時。
- 注:快重傳並不是取消重傳計時器,而是在某些狀況下,可更早地重傳丟失的報文段。
-
快恢復
- 當發送端收到連續三個冗餘ACK(即重複確認)時,先乘法減少,把慢開始門限ssthread減少爲出現擁塞時發送方cwnd的一半。
- 不一樣之處:跳過了cwnd=1起始的慢開始過程,而是將cwnd的值設置爲慢開始門限ssthread改變後的值,而後開始執行擁塞避免算法(加法增大)
- 跳過了cwnd=1起始的慢開始過程,所以稱爲快恢復。
綜述
- 擁塞控制中,發送方發送窗口的大小 = min(接收端窗口rwnd, 擁塞窗口cwnd)
- 慢開始、擁塞避免、快重傳、快恢復是同時應用在擁塞控制機制之中的
- 當發送方檢測到超時:慢開始和擁塞避免;
- 當發送方接受到冗餘ACK時:快重傳和快恢復。
END
歡迎關注本站公眾號,獲取更多信息