1. 程式人生 > >TCP滑動視窗控制流量的原理 TCP滑動視窗控制流量的原理

TCP滑動視窗控制流量的原理 TCP滑動視窗控制流量的原理

 

TCP滑動視窗控制流量的原理

 

TCP的滑動視窗機制 
      TCP這個協議是網路中使用的比較廣泛,他是一個面向連線的可靠的傳輸協議。既然是一個可靠的傳輸協議就需要對資料進行確認。TCP協議裡視窗機制有2種:一種是固定的視窗大小;一種是滑動的視窗。這個視窗大小就是我們一次傳輸幾個資料。對所有資料幀按順序賦予編號,傳送方在傳送過程中始終保持著一個傳送視窗,只有落在傳送視窗內的幀才允許被髮送;同時接收方也維持著一個接收視窗,只有落在接收視窗內的幀才允許接收。這樣通過調整發送方視窗和接收方視窗的大小可以實現流量控制。

      TCP滑動視窗技術通過動態改變視窗大小來調節兩臺主機間資料傳輸。每個TCP/IP主機支援全雙工資料傳輸,因此TCP有兩個滑動視窗:一個用於接收資料,另一個用於傳送資料。TCP使用肯定確認技術,其確認號指的是下一個所期待的位元組。 假定傳送方裝置以每一次三個資料包的方式傳送資料,也就是說,視窗大小為3。傳送方傳送序列號為1、2、3的三個資料包,接收方裝置成功接收資料包,用序列號4確認。傳送方裝置收到確認,繼續以視窗大小3傳送資料。當接收方裝置要求降低或者增大網路流量時,可以對視窗大小進行減小或者增加,本例降低視窗大小為2,每一次傳送兩個資料包。當接收方裝置要求視窗大小為0,表明接收方已經接收了全部資料,或者接收方應用程式沒有時間讀取資料,要求暫停傳送。傳送方接收到攜帶視窗號為0的確認,停止這一方向的資料傳輸。

   


我們可以看下面一張圖來分析一下固定視窗大小有什麼問題。 
 

這裡我們可以看到假設視窗的大小是1,也是就每次只能傳送一個數據只有接受方對這個資料進行確認了以後才能傳送第2個數據。我們可以看到傳送方每傳送一個數據接受方就要給傳送方一個ACK對這個資料進行確認。只有接受到了這個確認資料以後傳送方才能傳輸下個數據。 這樣我們考慮一下如果說視窗過小,那麼當傳輸比較大的資料的時候需要不停的對資料進行確認,這個時候就會造成很大的延遲。如果說視窗的大小定義的過大。我們假設傳送方一次傳送100個數據。但是接收方只能處理50個數據。這樣每次都會只對這50個數據進行確認。傳送方下一次還是傳送100個數據,但是接受方還是隻能處理50個數據。這樣就避免了不必要的資料來擁塞我們的鏈路。所以我們就引入了滑動視窗機制,視窗的大小並不是固定的而是根據我們之間的鏈路的頻寬的大小,這個時候鏈路是否擁護塞。接受方是否能處理這麼多資料了。  
我們看看滑動視窗是如何工作的。我們看下面幾張圖。 

 

 
首先是第一次傳送資料這個時候的視窗大小是根據鏈路頻寬的大小來決定的。我們假設這個時候視窗的大小是3。這個時候接受方收到資料以後會對資料進行確認告訴傳送方我下次希望手到的是資料是多少。這裡我們看到接收方傳送的ACK=3(這是傳送方傳送序列2的回答確認,下一次接收方期望接收到的是3序列訊號)。這個時候傳送方收到這個資料以後就知道我第一次傳送的3個數據對方只收到了2個。就知道第3個數據對方沒有收到。下次在傳送的時候就從第3個數據開始發。這個時候視窗大小就變成了2 。 
 

這個時候傳送方傳送2個數據。 

 
看到接收方傳送的ACK是5就表示他下一次希望收到的資料是5,傳送方就知道我剛才傳送的2個數據對方收了這個時候開始傳送第5個數據。 
這就是滑動視窗的工作機制,當鏈路變好了或者變差了這個視窗還會發生變話,並不是第一次協商好了以後就永遠不變了。                 
滑動視窗協議 
滑動視窗協議,是TCP使用的一種流量控制方法。該協議允許傳送方在停止並等待確認前可以連續傳送多個分組。由於傳送方不必每發一個分組就停下來等待確認,因此該協議可以加速資料的傳輸。 
只有在接收視窗向前滑動時(與此同時也傳送了確認),傳送窗口才有可能向前滑動。    
收發兩端的視窗按照以上規律不斷地向前滑動,因此這種協議又稱為滑動視窗協議。    
當傳送視窗和接收視窗的大小都等於1時,就是停止等待協議。

注:轉載夕陽飛飛部落格(https://www.cnblogs.com/luoquan/p/4886345.html)

 

 

TCP的滑動視窗機制 
      TCP這個協議是網路中使用的比較廣泛,他是一個面向連線的可靠的傳輸協議。既然是一個可靠的傳輸協議就需要對資料進行確認。TCP協議裡視窗機制有2種:一種是固定的視窗大小;一種是滑動的視窗。這個視窗大小就是我們一次傳輸幾個資料。對所有資料幀按順序賦予編號,傳送方在傳送過程中始終保持著一個傳送視窗,只有落在傳送視窗內的幀才允許被髮送;同時接收方也維持著一個接收視窗,只有落在接收視窗內的幀才允許接收。這樣通過調整發送方視窗和接收方視窗的大小可以實現流量控制。

      TCP滑動視窗技術通過動態改變視窗大小來調節兩臺主機間資料傳輸。每個TCP/IP主機支援全雙工資料傳輸,因此TCP有兩個滑動視窗:一個用於接收資料,另一個用於傳送資料。TCP使用肯定確認技術,其確認號指的是下一個所期待的位元組。 假定傳送方裝置以每一次三個資料包的方式傳送資料,也就是說,視窗大小為3。傳送方傳送序列號為1、2、3的三個資料包,接收方裝置成功接收資料包,用序列號4確認。傳送方裝置收到確認,繼續以視窗大小3傳送資料。當接收方裝置要求降低或者增大網路流量時,可以對視窗大小進行減小或者增加,本例降低視窗大小為2,每一次傳送兩個資料包。當接收方裝置要求視窗大小為0,表明接收方已經接收了全部資料,或者接收方應用程式沒有時間讀取資料,要求暫停傳送。傳送方接收到攜帶視窗號為0的確認,停止這一方向的資料傳輸。

   


我們可以看下面一張圖來分析一下固定視窗大小有什麼問題。