擁塞控制用於防止過多的報文進入網路,造成路由或者鏈路過載。流量控制的重點是放在點到點鏈路的通訊量的區域性控制上,而擁塞控制的重點是放在進入網路報文總量的全域性控制上。
tcp協議滑動視窗是實現擁塞控制的最基本的手段。為了使討論簡單,假設報文是單方向傳輸,並且有足夠的快取空間,傳送視窗大小只由網路擁塞程度來確定。
擁塞視窗是傳送端根據網路擁塞程度確定的視窗值。傳送端在真正確定傳送視窗時,應該取「通知視窗(rwnd)」和「擁塞視窗(cwnd)」的較小值。在沒有發生擁塞的情況下,二者應該一致。
tcp協議的擁塞控制方法有慢開始(慢啟動)、擁塞避免、快重傳和快恢復。
慢開始和擁塞避免的aimd(加性增乘性減)演算法:如果傳送端發現超時,就判斷為網路出現擁塞,並將擁塞視窗置1,執行慢開始策略;慢啟動閾值(ssthresh)被設定為當前擁塞視窗大小的一半,以延緩擁塞的出現,然後繼續執行慢開始和擁塞避免演算法。
1、當cwnd2、當cwnd>ssthresh時,使用擁塞避免演算法。
3、當cwnd=ssthresh時,使用慢開始演算法也可以使用擁塞避免演算法。
如圖所示:a:ssthresh=16,b:出現超時,c : ssthresh=12
快重傳和快恢復:在上面的基礎上,當接收端發現報文段中間的某個報文丟失,丟失報文後面的報文都可以接收,這時候傳送端就不能根據這個丟失報文的確認的超時而認為網路發生擁塞。當傳送端連續接收到三個對某個丟失報文的重複確認時,即使丟失報文的重傳計時器沒有超時,也要盡快重傳未被確認的報文,這是快重傳。而快恢復是每當傳送端收到乙個重複確認時候直接進入擁塞避免階段,當前的ssthresh是收到重複確認時候擁塞視窗cwnd的一半。
如圖所示:
TCP擁塞控制之擁塞避免
tcp傳送方通過慢啟動確定傳送資料的視窗閾值,一旦達到這個閾值,就意味著雖然網路中可能有更多可用的資源,但是如果占用全部的資源,將會使共享路由器佇列的其他tcp連線出現嚴重的丟包和重傳情況,從而導致整個網路效能不穩定。為了傳輸更多的資源而不至於影響其他tcp連線的傳輸,tcp實現了擁塞避免演算法。一...
tcp擁塞控制 TCP 面試系列之擁塞控制
tcp 面試系列第六彈,tcp 擁塞控制的一般性原理。擁塞的定義。在某段時間,若對網路中某一資源的需求超過了該資源所能提供的可用部分,網路的效能就要變壞。這種情況就叫做擁塞。擁塞常常趨於惡化。舉個例子,如果乙個路由器沒有足夠的快取空間,它就會丟棄一些新到的分組。但當分組被丟棄時,傳送這一分組的源點就...
tcp擁塞控制演算法 WebRTC擁塞控制原理解析
webrtc包含三種擁塞控制演算法,gcc bbr和pcc。其中,bbr一開始是針對tcp的擁塞控制提出來的。它的輸入為ack sack,輸出為擁塞視窗 congestion window 傳送速度 pacing rate bbr是怎樣運用到udp,甚至運用到實時流 傳輸之上的?拜讀一下在webrt...