本文要解決的問題:.net
瞭解滑動窗口機制的原理和基本方法。blog
(1).窗口機制
滑動窗口協議的基本原理就是在任意時刻,發送方都維持了一個連續的容許發送的幀的序號,稱爲發送窗口;同時,接收方也維持了一個連續的容許接收的幀的序號,稱爲接收窗口。發送窗口和接收窗口的序號的上下界不必定要同樣,甚至大小也能夠不一樣。不一樣的滑動窗口協議窗口大小通常不一樣。發送方窗口內的序列號表明了那些已經被髮送,可是尚未被確認的幀,或者是那些能夠被髮送的幀。下面舉一個例子(假設發送窗口尺寸爲2,接收窗口尺寸爲1):it
分析:①初始態,發送方沒有幀發出,發送窗口先後沿相重合。接收方0號窗口打開,等待接收0號幀;②發送方打開0號窗口,表示已發出0幀但尚確認返回信息。此時接收窗口狀態不變;③發送方打開0、1號窗口,表示0、1號幀均在等待確認之列。至此,發送方打開的窗口數已達規定限度,在未收到新的確認返回幀以前,發送方將暫停發送新的數據幀。接收窗口此時狀態仍未變;④接收方已收到0號幀,0號窗口關閉,1號窗口打開,表示準備接收1號幀。此時發送窗口狀態不變;⑤發送方收到接收方發來的0號幀確認返回信息,關閉0號窗口,表示從重發表中刪除0號幀。此時接收窗口狀態仍不變;⑥發送方繼續發送2號幀,2號窗口打開,表示2號幀也歸入待確認之列。至此,發送方打開的窗口又已達規定限度,在未收到新的確認返回幀以前,發送方將暫停發送新的數據幀,此時接收窗口狀態仍不變;⑦接收方已收到1號幀,1號窗口關閉,2號窗口打開,表示準備接收2號幀。此時發送窗口狀態不變;⑧發送方收到接收方發來的1號幀收畢的確認信息,關閉1號窗口,表示從重發表中刪除1號幀。此時接收窗口狀態仍不變。效率
若從滑動窗口的觀點來統一看待1比特滑動窗口、後退n及選擇重傳三種協議,它們的差異僅在於各自窗口尺寸的大小不一樣而已。1比特滑動窗口協議:發送窗口=1,接收窗口=1;後退n協議:發窗口>1,接收窗口>1;選擇重傳協議:發送窗口>1,接收窗口>1。原理
(2).1比特滑動窗口協議定時器
當發送窗口和接收窗口的大小固定爲1時,滑動窗口協議退化爲停等協議(stop-and-wait)。該協議規定發送方每發送一幀後就要停下來,等待接收方已正確接收的確認(acknowledgement)返回後才能繼續發送下一幀。因爲接收方須要判斷接收到的幀是新發的幀仍是從新發送的幀,所以發送方要爲每個幀加一個序號。因爲停等協議規定只有一幀徹底發送成功後才能發送新的幀,於是只用一比特來編號就夠了。其發送方和接收方運行的流程圖如圖所示。方法
(3).後退n協議(GBN)im
因爲停等協議要爲每個幀進行確認後才繼續發送下一幀,大大下降了信道利用率,所以又提出了後退n協議。後退n協議中,發送方在發完一個數據幀後,不停下來等待應答幀,而是連續發送若干個數據幀,即便在連續發送過程當中收到了接收方發來的應答幀,也能夠繼續發送。且發送方在每發送完一個數據幀時都要設置超時定時器。只要在所設置的超時時間內仍收到確認幀,就要重發相應的數據幀。如:當發送方發送了N個幀後,若發現該N幀的前一個幀在計時器超時後仍未返回其確認信息,則該幀被判爲出錯或丟失,此時發送方就不得不從新發送出錯幀及其後的N幀。數據
從這裏不難看出,後退n協議一方面因連續發送數據幀而提升了效率,但另外一方面,在重傳時又必須把原來已正確傳送過的數據幀進行重傳(僅因這些數據幀以前有一個數據幀出了錯),這種作法又使傳送效率下降。因而可知,若傳輸信道的傳輸質量不好於是誤碼率較大時,連續測協議不必定優於中止等待協議。此協議中的發送窗口的大小爲k,接收窗口還是1。協議
(4).選擇重傳協議
在後退n協議中,接收方若發現錯誤幀就再也不接收後續的幀,即便是正確到達的幀,這顯然是一種浪費。另外一種效率更高的策略是當接收方發現某幀出錯後,其後繼續送來的正確的幀雖然不能當即遞交給接收方的高層,但接收方仍可收下來,存放在一個緩衝區中,同時要求發送方從新傳送出錯的那一幀。一旦收到從新傳來的幀後,就能夠原已存於緩衝區中的其他幀一併按正確的順序遞交高層。這種方法稱爲選擇重發(SELECTICE REPEAT),其工做過程如圖所示。顯然,選擇重發減小了浪費,但要求接收方有足夠大的緩衝區空間。
轉自:http://blog.csdn.net/sbq63683210/article/details/52100768