滑動視窗協議

2021-09-01 12:43:42 字數 1602 閱讀 1007

同學 luffy 給你打**,讓你記下一串手機號碼,可是你記憶力不太好,你跟 luffy 約定,一次只最多只能報 4 個數字,luffy 念一遍,如果你聽到了就把他說的話重複一遍。接下來:

你:你一次最多報 4 個數字,多了我記不住啊!

luffy:139

你:139 (luffy 知道你聽到了)

luffy:7548

你:7538 (很明顯你聽錯了)

luffy:不對,是7548

你:7548

luffy : 2669

你:2669

最後,你接收到的完整的號碼就是 139-7548-2669.

1. 滑動視窗

上面的場景,你一次最多只能接受 4 個數字,表示你的滑動視窗大小就是 4. 在 tcp 協議中,也有這樣的滑動視窗,它的大小表示目前還能接收多少位元組的資料。

tcp 每次收到對方發來的報文,都會檢查視窗大小字段,見圖 1.

圖1 tcp 首部中有乙個字段——16 位視窗大小 

知道了對方的視窗大小後,就知道對方目前還能接收多少資料,接收的資料位元組序號是 tcp 段中的 ack 的值到 ack + 視窗大小,即 [ack,ack+視窗大小)[ack,ack+視窗大小).

比如,你給對方傳送了乙個段攜帶位元組序號為 [400, 500) 的資料。對方回送了乙個 tcp 段,ack = 500, win = 100,就表示,我已經收到 [400, 500) 的資料我還能接收位元組序號為 [500, 600) 之間的資料,見圖 2。

圖2 滑動視窗 

如果對方回送了乙個 tcp 段,ack = 500, win = 0,就表示,我已經收到了 [400, 500) 的資料,但是我現在不能再接收資料了,你待會再發。

圖3 對方回送 0 大小的視窗,接收端的反應 

2. 滑動視窗的目的

回顧本文開頭給出的打**的例子,為什麼你要告訴對方一次最多只能報 4 個數字?原因在於你的接受能力有限,不是說你無法記憶很多數字,只是在短期內,你記不住,你需要一段一段的記憶(一段一段的將資料放入緩衝區)。

所以,在 tcp 中,滑動視窗是為了實現流量控制。如果對方傳送資料過快,接收方就來不及接收(你來不急記住),接收方就需要通告對方,減慢資料的傳送(圖 3)。

需要特別注意的是,在學習滑動視窗的時候,我們假設網路無限好,不擁塞。只要你傳送了資料,對方一定可以收到。

再解釋一下網路擁塞的含義,它是指你傳送的資料滯留在網路中,遲遲未到達接收方。

3. 滑動視窗模擬

圖4 滑動視窗模擬 

修正:圖4 中最後乙個小圖修正一下文字,應該為『傳送方收到 ack=41, win=10, 知道對方希望接收序號為 [41, 51) 的資料』

滑動視窗協議

只有在接收視窗向前滑動時 與此同時也傳送了確認 傳送視窗才有可能向前滑動。收發兩端的視窗按照以上規律不斷地向前滑動,因此這種協議又稱為滑動視窗協議。當傳送視窗和接收視窗的大小都等於 1時,就是停止等待協議。當傳送視窗大於1,接收視窗等於1時,就是回退n步協議。當傳送視窗和接收視窗的大小均大於1時,就...

滑動視窗協議

百科名片 滑動視窗協議,是tcp使用的一種 流量控制方法。該協議允許傳送方在停止並等待確認前可以連續傳送多個分組。由於傳送方不必每發乙個分組就停下來等待確認,因此該協議可以加速資料的傳輸。只有在接收視窗向前滑動時 與此同時也傳送了確認 傳送視窗才有可能向前滑動。收發兩端的視窗按照以上規律不斷地向前滑...

滑動視窗協議

協議4 滑窗協議 全雙工協議 簡介 兩個視窗 預設視窗為1,序列號長度為3位的傳送過程 文字描述 接收方收到幀後,首先核對是否為預期幀號 frame expected 如果是的,則接收並frame expected 1,移動接收視窗 傳送端收到應答幀,核對響應幀號 next frame to sen...