TCP/IP 學習筆記

來源:互聯網
上載者:User

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相比,增加了快速恢複階段,也就是說,完成快速重傳後,進入了擁塞避免階段而不是慢啟動階段。

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.