1 擁塞避免演算法
名稱解釋:
報文段---
TCP一次傳輸所發送的一定長度的位元組段。
TCP的滑動視窗機制,作為接收方管理髮送方發送資料量的手段,以防止接收方的接收緩衝區因為滿而溢出。
擁塞視窗(cwnd),
接收端通知視窗(rwnd),
慢啟動閥值(ssthresh),
慢啟動的特徵:1 cwnd被初始化為一個資料包大小
2 cwnd
指數增長
擁塞避免:1在一個RTT時間內cwnd只增加一個MSS大小
2 cwnd線性增長
快速重傳:連續收到三個重複的ack就認定資料包丟失,重傳資料包(不管RTO)。
1、擁塞避免演算法出現的原因
擁塞避免演算法是一種處理丟失分組的演算法。
1.1擁塞和丟失的關係
報文段丟失的認定標準就是:TCP發送逾時和連續收到三次重複的ACK(Jacondson演算法)。
兩個通訊主機之間如果有報文段丟失,就表示二者通訊存在擁塞。
2、擁塞發生後的處理
擁塞發生後,要做的就是降低分組進入網路的傳輸速率。而慢啟動演算法正好可以降低傳輸速率.
2.1 擁塞避免演算法和慢啟動演算法
2.1.1演算法圖解
2.1.2
存在的問題
在長延時的通訊環境中效率很低。根據TCP協議,串連建立後,首先根據慢啟動演算法對流量進行控制。按照慢啟動策略初始發送視窗大小為1個基本資料包,然後按指數增大接收視窗。這樣,從開始到恢複到最大發送視窗所需的時間為:慢啟動時間=RTT×1og2(max-win/MSS)其中:RTT為往返時延;max-win為TCP最大視窗;
MSS為每個資料包的長度。按照RTT=0.5s,max-win=64K位元組,MSS=512位元組,則侵啟動時間為3.5s。這說明在前3.5s內,TCP傳輸不可能達到峰值傳輸速率。在實際應用中,當發送視窗大於慢啟動門限視窗後,便進入了擁塞避免過程,在擁塞避免演算法中,視窗的增加速率更加緩慢,不再是慢啟動演算法中的指數增加,而是呈線性增加的。這一方面會引起網路的激烈振蕩,另一方面大大降低了網路的利用率。
2.1.2實際應用
Tahoe演算法是TCP的早期版本。它的核心思想是:讓cwnd以指數增長方式迅速逼進可用通道容量,然後慢慢接近均衡。Tahoe包括3個基本的擁塞控制演算法:“慢啟動”、“擁塞避免”和“快速重傳”。
(1)慢啟動:避免了串連建立時突發資料流對網路的衝擊。
初始設定cwnd為1,並按指數型方式增長,直至cwnd超過ssthresh。
當cwnd>=ssthresh時,Tahoe進入擁塞避免階段。
(2)擁塞避免:限制傳輸過程中無限制的速率增長,避免由此可能導致的擁塞。
cwnd以線性方式增長。
如果發生逾時或者連續收到3個重複ACK,Tahoe認為發生了擁塞。
對於逾時,置ssthresh為當前擁塞視窗的一半,cwnd=1,轉入慢啟動。
如果收到3個連續ACK,則Tahoe進入快速重傳階段。
(3)快速重傳:根據3個重複的應答報文來判斷丟包,減少了逾時重傳的發生,加快了源端對擁塞的響應,使得擁塞能快速消除。立即重傳丟失的分組,同時置ssthresh為當前擁塞視窗的一半,cwnd=1,轉入慢啟動。
2.2快速重傳與快速恢複演算法
Jacondson演算法(快速重傳演算法):
TCP傳輸中會統計接收到的重複ACK的次數,當次數大於三次時,說明此重複ACK中確認序號後的報文段丟失,立即重傳。
2.2.1重傳和快速恢複具體過程為
1. 當收到第3個重複的ACK包時,ssthreh置為阻塞視窗的一半;
2. 重傳丟失的包後,將擁塞視窗cwnd設定為sshresh+3*SMSS;
3. 對於每個接收到的重複的ACK包,cwnd相應增加SMSS,擴大擁塞視窗;
4. 如果新的擁塞視窗cwnd值大於接收方待確認資料大小,可以繼續發新包
5. 當收到下一個ACK確認了新資料時,將cwnd大小調整為sshresh,減少視窗;對接收方來說,接收到重發的TCP包後就要發此ACK確認當前接收的資料。
2.2.2
快速恢複演算法的特點
(1)與慢啟動不同cwnd不設定為1
而是設定為ssthresh+3
(2)如收到重複的ack(n>3),將cwnd設定為ssthresh+n
(3)如果發送視窗依然允許發送資料,則按擁塞避免演算法繼續發送資料
(3)如收到新的ack
將cwnd縮小為ssthresh。
2.2.3實際應用
針對Tahoe演算法的不足之處,1990年Jacobson在Tahoe的基礎上提出了改進演算法Reno。改進主要有兩個方面:一是對於收到連續3個重複ACK,演算法不經過慢啟動,而直接進入擁塞避免階段;二是增加了快速重傳/快速恢複機制。具體實現過程為:
(1)收到三個重複的ACK,進入快速重傳/快速恢複,此時ssthresh設定為當前擁塞視窗的一半。
(2)重傳丟失的資料包,共置cwnd=cwnd+ndup(ndup為收到的重複ACK數)。
(3)發送新的資料包。
(4)當收到非重複的ACK時,cwnd=ssthresh。
(5)進入擁塞避免階段。
從上面的過程可以看出,Reno在收到3個重複ACK後,就轉入快速重傳/快速恢複階段;而遇到逾時時,Reno和Tahoe一樣進入慢啟動階段。
Reno目前被廣泛採用,以其演算法的簡單、有效和魯棒性成為TCP源演算法的主流。但是如果在一個發送視窗內有多個包丟失時,該演算法不能有效恢複出來,為此提出了一些改進,如NewReno、Sack等
2.3 Reno與Tahoe的區別
Reno與Tahoe相比,增加了快速恢複階段,也就是說,完成快速重傳後,進入了擁塞避免階段而不是慢啟動階段。