擁塞控制算法

TCP超時重傳

  原理是在發送某一個數據以後就開啓一個計時器,在一定時間內如果沒有得到發送的數據報的ACK報文,那麼就重新發送數據,直到發送成功爲止。 
  影響超時重傳機制協議效率的一個關鍵參數是重傳超時時間RTO,Retransmission TimeOut)。RTO的值被設置過大過小都會對協議造成不利影響。 
  (1)RTO設長了,重發就慢,沒有效率,性能差。 
  (2)RTO設短了,重發的就快,會增加網絡擁塞,導致更多的超時,更多的超時導致更多的重發。 
  連接往返時間(RTT,Round Trip Time),指發送端從發送TCP包開始到接收它的立即響應所消耗的時間。

TCP滑動窗口

作用:(1)提供TCP的可靠性;(2)提供TCP的流控特性 

TCP的滑動窗口的可靠性也是建立在“確認重傳”基礎上的。 
發送窗口只有收到對端對於本段發送窗口內字節的ACK確認,纔會移動發送窗口的左邊界。 
接收端可以根據自己的狀況通告窗口大小,從而控制發送端的接收,進行流量控制。

TCP擁塞控制

  擁塞控制是一個全局性的過程; 流量控制是點對點通信量的控制 
  TCP擁塞控制4個核心算法:慢開始(slow start)、擁塞避免(Congestion Avoidance)、快速重傳(fast retransmit)、快速回復(fast recovery) 
  擁塞窗口(cwnd,congestion window),其大小取決於網絡的擁塞程度,並且動態地在變化。 
   
  慢開始算法的思路就是,不要一開始就發送大量的數據,先探測一下網絡的擁塞程度,也就是說由小到大逐漸增加擁塞窗口的大小。

爲了防止cwnd增長過大引起網絡擁塞,還需設置一個慢開始門限ssthresh狀態變量。ssthresh的用法如下: 
當cwnd < ssthresh時,使用慢開始算法。 
當cwnd > ssthresh時,改用擁塞避免算法。 
當cwnd = ssthresh時,慢開始與擁塞避免算法任意。

擁塞避免算法讓擁塞窗口緩慢增長,即每經過一個往返時間RTT就把發送發的擁塞窗口cwnd加1,而不是加倍。

無論是在慢開始階段還是在擁塞避免階段,只要發送方判斷網絡出現擁塞,就把慢開始門限設置爲出現擁塞時的發送窗口大小的一半。然後把擁塞窗口設置爲1,執行慢開始算法。如下圖: 
 
擁塞控制的具體過程如下: 
(1)TCP連接初始化,將擁塞窗口設置爲1 
(2)執行慢開始算法,cwnd按指數規律增長,直到cwnd=ssthresh時,開始執行擁塞避免算法,cwnd按線性規律增長 
(3)當網絡發生擁塞,把ssthresh值更新爲擁塞前ssthresh值的一半,cwnd重新設置爲1,按照步驟(2)執行

快重傳和快恢復

  快速重傳(Fast retransmit)要求接收方在收到一個失序的報文段後就立即發出重複確認(爲的是使發送方及早知道有報文段沒有到達對方),而不要等到自己發送數據時捎帶確認。 
  快重傳算法規定,發送方只要一連收到3個重複確認就應當立即重傳對方尚未收到的報文段,而不必繼續等待設置的重傳計數器時間到期。 
   
   
   
  快速恢復(Fast Recovery) 
  (1)當發送方連續收到三個重複確認,就執行“乘法減小”算法,把慢開始門限ssthresh減半。這是爲了預防網絡發生擁塞。請注意:接下去不執行慢開始算法。 
(2)由於發送方現在認爲網絡很可能沒有發生擁塞,因此與慢開始不同之處是現在不執行慢開始算法(即擁塞窗口cwnd現在不設置爲1),而是把cwnd值設置爲慢開始門限ssthresh減半後的數值,然後開始執行擁塞避免算法(“加法增大”),使擁塞窗口緩慢地線性增大。 

發送方窗口的上限值 = Min [ rwnd, cwnd ]
當rwnd < cwnd 時,是接收方的接收能力限制發送方窗口的最大值。
當cwnd < rwnd 時,則是網絡的擁塞限制發送方窗口的最大值。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章