tcp視窗機制
視窗機制原理:
比如主機a給主機b傳送資料,為了更高的通話效率,主機a一次給主機b發了三次資料。(主機a給主機b傳送了一個大的資料);主機b收到資料以後限制於他的視窗大小隻能處理其中的一部分資料那麼主機b就會向主機a回覆一個確認值三個資料都收到了,但是他的視窗大小隻顯示處理了2個數據,那麼主機a收到以後就會做一個傳送處理,將資料調成傳送的量為2個進行傳送,這樣一來就解決了傳送多個而處理不完的現象。
tcp中視窗的分類有以下兩種
- 固定視窗
- 滑動視窗
下面現將固定視窗:
我們假設這個固定視窗的大小為1,也就是每次只能傳送一個數據,只有接收方對這個資料進行了確認後才能傳送第二個資料。在圖中我們可以看到,傳送方每傳送一個數據接收方就要給傳送方一個ACK對這個資料進行確認。只有接收了這個確認資料以後傳送方才能傳輸下個數據。
存在的問題:如果視窗過小,當傳輸比較大的資料的時候需要不停的對資料進行確認,這個時候就會造成很大的延遲。
如果視窗過大,我們假設傳送方一次傳送100個數據,但接收方只能處理50個數據,這樣每次都只對這50個數據進行確認。傳送方下一次還是傳送100個數據,但接受方還是隻能處理50個數據。這樣就避免了不必要的資料來擁塞我們的鏈路。
因此,我們引入了滑動視窗
二、滑動視窗(以位元組為單位)
1.概述
滑動視窗通俗來講就是一種流量控制技術。
它本質上是描述接收方的TCP資料報緩衝區大小的資料,傳送方根據這個資料來計算自己最多能傳送多長的資料,如果傳送方收到接收方的視窗大小為0的TCP資料報,那麼傳送方將停止傳送資料,等到接收方傳送視窗大小不為0的資料報的到來
第一次傳送資料這個時候的視窗大小是根據鏈路頻寬的大小來決定的。
假設這時候的視窗是3.這個時候接收方收到資料以後會對資料進行確認告訴哦傳送方我下次希望收到的資料是多少。
接收方傳送的ACK = 3(這是對傳送方傳送序列2的回答確認,下一次接收方期望接收到的是3序列訊號),這個時候傳送方收到這個資料以後就知道我第一次傳送的3個數據對方只收到了兩個,就知道第三個資料對方沒有收到,下次返送的時候就從第3個數據開始發。這時候視窗大小就變為了2.