計算機網路 滑動視窗協議的視窗大小

2021-09-19 22:55:23 字數 1860 閱讀 8121

在學習滑動視窗協議的時候,我在鏈路層的滑動視窗這吃了不少苦頭,因為動態的視窗變化真的不適合看老師發的pdf(話說老師為什麼不能發ppt非得發pdf?)

雖然後來摸索著看懂了不少,但是到了視窗大小的問題上又矇圈了。在gbn(go back n)和sr(select repeat)中,我迷糊了特別久,最後終於搞明白了兩者的區別

現在開始看問題:假設傳送方和接收方約定好,傳送的幀的編號總共有n=3位,也就是說,有三個bit可以用來作為幀的編號,那麼就意味著,編號的範圍是0~7

先看如果大於7,會是什麼情況:假設視窗大小等於8:

傳送方給接收方傳送了幀編號0a,1a,2a,3a,4a,5a,6a,7a,共計8個幀,接收方均收到,並處理後提交給網路層,並向傳送方回饋ack 0a~7a,並期待下一輪的8個幀0b~7b

然而回饋電路被雷劈了,所以ack全部丟失,接收方等了好久,沒等到確認,認定自己工作失誤,發出去的東西沒有到達地點,於是重發了之前的0a~7a號幀

但是接收方不知道自己的通道被劈了啊!他還以為自己的ack(a系列)被對方接收到了,還在喜滋滋等著第二波新幀,沒想到來的居然還是上一批老人物。但是接收方臉盲啊,不把熟人當兄弟,一看來的還是八位大爺,打頭的正好編號和自己需要的一樣,也看不出是不是新來的,就還是全部接收並傳給了網路層

這不就出錯了嗎!

所以我們得想辦法防止這種事出現:

視窗如果等於7,就不會有這種狗東行為出現:

傳送方發出0a,1a,2a,3a,4a,5a,6a共計7個幀,接收方還是接收並傳送a系列的ack,且依舊全部丟失,傳送方超時重傳0a~6a

但是這次情況不同了!

接收方發現來的人雖然數量沒變,但是編號對不上了啊!自己等的帶隊的是7爺,怎麼來的是0爺?來的人不對,混日子的不是我的兄弟,不收!

於是資料傳輸斷裂,但至少不會出錯了……最後黑鍋由閃電完美背起,鼓掌

為什麼同樣是滑動視窗,你gbn的就可以比我大,我就得比你小?你說你演的比我好,要不你上來咱們比比?剛剛我來的時候還有小朋友問我……不對,串場了

問題的關鍵在於:選擇重傳是可以「跳著傳」的。

現在我們看,如果sr和gbn的視窗大小一樣,會是什麼情況

在同樣遇到幀丟失的時候,假設我們傳送了0~6號幀,並且倒霉的丟掉了2號幀,gbn協議裡,接收方沒有收到2號幀,就不會傳送2號幀的ack,傳送方直接把2到6號全部重傳,接收方也不需要擔心會不會有重複資料,因為第一批來的3號到6號幀因為少了2號幀,在接收方看來就是一堆廢物,直接給丟了去換新的,充分體現了某資本主義大國的浪費作風,需要點名批評。

現在看sr的協議

sr的協議有兩個特點:

1.不需要重發錯誤幀到結尾幀的所有幀,只需要重發錯誤的2號幀即可,充分體現了社會主義的勤儉節約習慣,點名表揚

2.如果2號幀沒有到,那麼3~6號雖然會被保留下來,但也不會被傳到網路層。乙個幀如果能夠被傳到網路層,前提是比他小的序號的幀都已經被傳輸到網路層了,類似「讓小孩先走」的道理。

所以在2號幀丟失這個問題上,sr和gbn似乎都不會出太大問題

但是還有一種情況:如果和(一)中的問題一樣,接收方的ack全部丟失,會是什麼情況?

gbn中,由於直接丟棄+重傳,不會受到影響。

但是sr似乎沒有這麼樂觀:假設接收方已經將0a到6a號傳給了網路層,但是ack全部丟失,那麼傳送方只好重傳0a到6a了

但是接收方等待的是7a,0b,1b,2b,3b,4b,5b,一看傳送方發來的東西,雖然不是完美貼合我想要的七個葫蘆娃們,但是似乎有6個也是編號0到5的……不管來的·是小矮人還是葫蘆娃,只要編號對上了,就是我的人……呸,我的幀了。

於是0a到5a又一次被納入後宮,資料出錯

但是如果傳送方視窗只有四個呢?

傳送方發來了0a到3a,依然沒有收到ack,重發0a~3a

接收方苦等4到7的編號幀,一看發來的乙個都沒有符合的,不收不收

皆大歡喜,完美!

計算機網路(7) 滑動視窗

接收視窗 在接收端設定接收視窗是為了控制可以接受哪些資料幀而不可以接收哪些幀。在接收方只有當收到的資料幀的序號落入接收視窗內才允許將該資料幀手下。若接收到的資料幀落在了接收視窗之外,則一律將其丟棄。在傳送端,每收到乙個卻認真,傳送視窗就向前滑動乙個幀的位置,當傳送視窗內沒有可以傳送的幀 即視窗內全部...

計算機網路之滑動視窗機制

1.首先我們知道tcp可靠傳輸原理中的停止等待協議,該協議就是傳送方每傳送乙個報文段後就停止傳送,一直等收到接收方的確認後再傳送下乙個報文段。tcp通訊是全雙工的,我們假定a為傳送方,b為接收方。a會有乙個傳送視窗,b有乙個接收視窗。傳送視窗表示在沒有收到b確認的情況下,a也可以連續把傳送視窗的資料...

計算機網路 視窗機制

引言 為什麼tcp需要有視窗這個機制?因為相對於udp,tcp需要提供穩定的服務,視窗 快取 機制就能提供這個功能。那麼為什麼要用視窗控制這個機制呢?因為tcp還要提供流控 務。首先先來說一哈 tcp是如何傳輸位元組流的 1 按報文段 segment 傳輸 報文段 若干位元組構成 2 ip是按分組 ...