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

TCP滑動視窗機制 流量控制

  • TCP滑動視窗機制

TCP滑動視窗機制分為兩種:固定大小視窗;滑動視窗(不固定大小)。

由於TCP傳輸是支援全雙工的,因此傳送方和接收方各維護了兩個滑動視窗(接收視窗和傳送視窗)。

滑動視窗會對資料幀進行編號,只有落在傳送視窗的資料才能被髮送,也只有落在接收視窗的資料才能被讀取。因此滑動視窗可以用來實現流量控制(動態改變滑動視窗的大小)。

TCP使用肯定確認機制,其確認號為下一個所期待的位元組。假設傳送方視窗此時大小為3,也就是說每次以三個資料包的方式傳送資料。傳送方傳送序列號為1、2、3的三個資料包,接收方裝置成功接收資料包,用序列號4確認。傳送方裝置收到確認,繼續以視窗大小3傳送資料。當接收方裝置要求降低或者增大網路流量時,可以對視窗大小進行減小或者增加,本例降低視窗大小為2,每一次傳送兩個資料包。當接收方裝置要求視窗大小為0,表明接收方已經接收了全部資料,或者接收方應用程式沒有時間讀取資料,要求暫停傳送。傳送方接收到攜帶視窗號為0的確認,停止這一方向的資料傳輸。

  • 固定大小視窗機制


從上圖可以看出,固定大小視窗機制在傳送資料時必須要先得到接收方的確認訊息才可以繼續傳送。當傳送的資料量很大時,如果視窗過小很容易就會造成網路延遲。而傳送視窗過大,接收視窗過小時,就容易造成網路擁塞。所以我們就引入了滑動視窗機制,視窗的大小並不是固定的而是根據我們之間的鏈路的頻寬的大小,這個時候鏈路是否擁護塞。接受方是否能處理這麼多資料了。

我們可以通過以下幾張圖分析滑動視窗機制。

  • 滑動視窗機制


如圖第一次傳送,連續傳送三個資料包,接收端接收資料包,併發送ACK確認.此時ACK=3,說明這是對資料包2的確認,資料包3丟棄。傳送方在下一次傳送時便知接收方只能接收2個數據包,因此下次傳送時將從第三個資料包開始傳送,傳送2個數據包。


此時傳送方接收到ACK之後將3、4的資料包傳送給接收方,接收方接收到資料包併發送ACK=5給傳送方。至此開始迴圈往復傳送和就收資料,中間可能滑動視窗大小可能還會改變,但原理同上。

  • 滑動視窗協議 

滑動視窗協議,是TCP使用的一種流量控制方法。該協議允許傳送方在停止並等待確認前可以連續傳送多個分組。由於傳送方不必每發一個分組就停下來等待確認,因此該協議可以加速資料的傳輸。 

只有在接收視窗向前滑動時(與此同時也傳送了確認),傳送窗口才有可能向前滑動。    

收發兩端的視窗按照以上規律不斷地向前滑動,因此這種協議又稱為滑動視窗協議。    

當傳送視窗和接收視窗的大小都等於1時,就是停止等待協議。

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

  • 本文參考自以下博文: