TCP協議詳解(五)

TCP可靠傳輸機制

TCP超時重傳

如果網絡異常救出出現超時或者丟包,TCP模塊必須能夠重傳在超時時間內對方未收到的TCP報文段。

  • TCP模塊爲每個TCP報文段維護一個重傳定時器:該定時器在TCP報文段第一次被髮送時啓動,如果超時時間內沒收到接收方的應答,TCP模塊將重傳TCP報文段,並重置定時器
  • 如果超時,則進行重傳,重新設置定時器

TCP擁塞控制

TCP模塊的任務

  • 提高網絡利用率
  • 降低丟包率
  • 擁塞控制

    其中擁塞控制,還有TCP的流量控制,這種控制機制都是爲了TCP的可靠傳輸設置的,擁塞控制的任務是確保子網能承載所到達的流量。這是一個全局性問題,涉及到各方面的行爲(剛興趣可以自己去搜索下,這裏就不做過多介紹)。

    關於擁塞控制我們進行詳細的講解:

    擁塞控制的反饋過程:

這裏寫圖片描述

擁塞控制的最終受控變量是發送端向網絡中一次連續寫入的數據量,我們稱爲我們稱爲發送窗口。不過發送窗口最終以TCP報文段來發送數據,進而發送端口就限定了連續發送的TCP報文段的數量,如圖所示,發送窗口被稱爲SWND,這些報文段的最大長度被稱爲MSS發送端需要合理的選擇發送窗口,如果發送窗口太小,就會出現網絡延遲現象,如果發送窗口過大,就容易導致網絡擁塞。接收方可以通過接收通告收窗口來控制發送端的發送窗口,但是這看起來也不夠,所以在發送端引入一個稱爲擁塞窗口的狀態變量,擁塞窗口簡稱CWND,接收通告窗口簡稱RWND。圖像中就顯示了擁塞控制的閉環反饋控制。

###幾種擁塞控制的方法:

  • TCP慢啓動
  • 擁塞避免
  • 快速重傳
  • 快速恢復

慢啓動,擁塞避免圖:

這裏寫圖片描述

我們知道那個發送端維持一個擁塞窗口的狀態變量,擁塞窗口簡稱CWND,擁塞窗口的大小取決於網絡的擁塞程度,並且動態的變化。CWND的處理原則就是隻要網絡中沒有出現擁塞現象,擁塞窗口就在大一些,以便把更多的分組發送出去。只要網絡中出現擁塞,擁塞窗口就減少一些。以減少注入到網絡分組中的數量。

我們現在來分析擁塞控制的算法:

  • 慢啓動:當主機開始發送數據時,如果把大量的字節注入到網絡,那麼就有可能引起網絡擁塞。因爲我們現在並不清楚網絡的負載情況。所以比較好的方法就是自動去探測一下,由小到大滿滿增大擁塞窗口的數值,通常在剛剛開始發送報文段的時候,先把擁塞端口設置爲一個最大報文段,而在每個在收到新的報文段的時候,把擁塞窗口的大小加1,按照指數規律增長,也就是增大一個最大報文段的數值。我們用同樣的方法逐漸增大發送端的擁塞窗口。可以使分組注入到網絡中的數據更加合理。

    對應到圖示中,橫座標從0->3都是滿啓動的狀態。我們爲了防止因爲增大造成的網絡擁塞,我們還需要設置一個滿啓動的ssthresh值,關於慢啓動的ssthresh用法就是如果擁塞窗口小於ssthresh值,就應用慢啓動算法。如果擁塞窗口大於ssthresh值,就停止應用慢啓動算法。而改用擁塞避免算法

  • 擁塞避免:擁塞避免算法爲了讓擁塞窗口緩慢的增長,就是每經過一個往返的時間,就把發送方的擁塞窗口加1,而不是成倍增長,這樣擁塞窗口是按照線性規律緩慢增長。對應到圖像中就是那個明顯的拐點以後,都是擁塞避免的算法執行。

僅僅應用 慢啓動和擁塞控制,不可能達到控制網絡擁塞

接下來介紹快速重傳,快速恢復

在很多情況下,TCP發送端都可以接受到重複的確認報文段,例如TCP報文段缺失等等,發送端如果連接接收到三個重複的確認報文段,就可以判斷網絡中發生了擁塞。這個時候使用快速重傳,快速恢復算法。快速重傳算法我先要求接受端每收到一個失去的報文到,就立即發送重傳確認。

擁塞發生或有三個處理不步驟:

擁塞發生後的處理過程:

  • 收到三個重複的確認處理過程:當收到三個重複的報文段時,重新計算滿啓動的ssthresh值,就是將ssthresh值減半,然後立即重傳重傳報文段。
  • 收到1個重複確認處理過程:將慢啓動的ssthresh值減半後,開始執行擁塞避免算法,而不是剛剛提到的慢啓動算法。
  • 收到新數據後的處理過程:重新設置慢啓動的ssthresh值,使得擁塞窗口等於當前設置的ssthresh值。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章