TCP擁塞控制簡析

        若網絡中對某一資源的需求超出了其傳輸能力,就會發送網絡擁塞,使得網絡性能下降。如果出現擁塞而不進行控制,整個網絡的吞吐量將隨輸入負荷的增大而下降。下圖爲吞吐量比較圖,網絡負載是存在上限的,此時網絡資源會被丟棄,吞吐量達到最大值,通常轉發節點緩存不夠大造成分組的丟失是網絡擁塞的徵兆。

                       

 

---------------------------------------------------------------------------------------

TCP四種擁塞控制算法

1、慢開始;2、擁塞避免;3、快速重傳;4、快速恢復

設定:1、數據爲單方向發送,接收端只發送確認

           2、接受端緩存足夠大,即發送端發送窗口大小隻由網絡擁塞程度決定

           3、TCP報文段作爲單位。

                           

  • 發送端維護擁塞窗口cwnd,大小動態變化,由網絡擁塞程度決定。網絡無擁塞現象則擴大該窗口;出現擁塞則減小窗口。是否擁塞由是否及時收到確認報文決定。
  • 發送端發送窗口與擁塞窗口大小一致
  • 設慢開始閾值ssthresh狀態變量,存在以下狀態描述:

          1、cwnd < ssthresh,使用慢開始算法

          2、cwnd > ssthresh,停止慢開始,改用擁塞控制算法

          3、cwnd = ssthresh,慢開始與擁塞控制都可以使用,二者取其一

---------------------------------------------------------------------------------------

慢開始

        假設當前發送方擁塞窗口cwnd的值爲1,而發送窗口swnd等於擁塞窗口cwnd,因此發送方當前只能發送一個數據報文段(擁塞窗口cwnd的值是幾,就能發送幾個數據報文段),接收方收到該數據報文段後,給發送方回覆一個確認報文段,發送方收到該確認報文後,將擁塞窗口的值變爲2。即收到多少確認報文就增加多少。所以擁塞窗口是以指數型增長的。一直到cwnd等於ssthresh閾值時啓動擁塞控制算法。如下圖,慢開始增長速度並不慢,只是開始時向網絡注入數據報文較少。

                                                                                 

---------------------------------------------------------------------------------------

擁塞避免

        進入擁塞避免階段時,cwnd每次只能加1。當出現報文丟失時,丟失的報文的重傳計時器超時後會被判斷出現擁塞,此時需要更改cwnd和ssthresh。規則如下:1、ssthresh更新爲出現擁塞時cwnd數值的一半;2、cwnd賦值爲1;3、重新執行慢開始算法。

        如下圖所示,初始ssthresh爲16,當cwnd小於ssthresh成指數型增長,當cwnd > ssthresh時,cwnd逐次增加1。當其值爲24時,出現丟包,此時判斷爲擁塞,將ssthresh調整爲出現擁塞時的一般,即12。之後cwnd賦值爲1,重新執行慢開始算法。由下圖仍可見,擁塞避免並不是完全避免擁塞,而是將擁塞窗口的增長變爲線性的,使網絡不容易出現擁塞。

               

---------------------------------------------------------------------------------------

        以上的兩個算法存在不足之處,當個別報文在網絡中丟失時,可能實際上網絡並未發生擁塞。這將導致發送端超時重傳,並誤以爲網絡發送擁塞。由於每次擁塞控制都會將cwnd設置爲1,這嚴重降低了傳輸效率。由此,新增了快速重傳算法和快速恢復算法。

---------------------------------------------------------------------------------------

快速重傳算法

        發送端每次發送數據報文,接收端都會返回確認報文,此報文是其想接受的數據報文序號的前一位。當發生報文丟失時,接收端會一直髮送亂序之前的確認報文。比如3號數據報文丟失,則接收端會一直髮送2號數據報文的確認報文。而發送端不會立即重傳,而是接着發4,5,6數據報文。當發完6號數據報文時,發送端會連續三次接收到2號數據報文的確認報文。此時發送端會立即重傳3號數據報文,接收端接收後,會立即發送6號數據確認報文。因爲4,5,6號數據報文是一直存在接收端的緩存中。這樣就避免了超時重傳,提高了效率。主要機制如下圖所示。

 

                        

---------------------------------------------------------------------------------------

快速恢復算法

        如下,發送端連續接收端三個確認報文後可以確認只是丟失了個別報文(確認報文可以傳回,網絡沒有擁塞),此時不需要啓動慢開始算法。此時將ssthresh和cwnd賦值爲此時的cwnd的一半,然後執行擁塞避免算法。具體機制如下圖所示。

                    

        當然也有的快速回復算法,將swnd的值增大3,即swnd = ssthresh + 3(ssthresh爲連續三次受到確認號時的swnd值的一半)。因爲接收端緩存中已經存在了三個數據報文,這三個報文不會再佔用網絡資源,所以擁塞窗口可以適當增大。這麼做也是爲了儘可能提高吞吐量。

 

學習自用:

轉自:TCP的擁塞控制(詳解)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章