滑动窗口——TCP可靠传输的实现[转]
生活随笔
收集整理的這篇文章主要介紹了
滑动窗口——TCP可靠传输的实现[转]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
滑動窗口——TCP可靠傳輸的實現[轉] 轉自:? http://hi.baidu.com/bellgrade/blog/item/935a432393b949ae4723e828.html (1).窗口機制? 滑動窗口協議的基本原理就是在任意時刻,發送方都維持了一個連續的允許發送的幀的序號,稱為發送窗口;同時,接收方也維持了一個連續的允許接收的幀的序 號,稱為接收窗口。發送窗口和接收窗口的序號的上下界不一定要一樣,甚至大小也可以不同。不同的滑動窗口協議窗口大小一般不同。發送方窗口內的序列號代表 了那些已經被發送,但是還沒有被確認的幀,或者是那些可以被發送的幀。下面舉一個例子(假設發送窗口尺寸為2,接收窗口尺寸為1): 分析:①初始態,發送方沒有幀發出,發送窗口前后沿相重合。接收方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協議 由于停等協議要為每一個幀進行確認后才繼續發送下一幀,大大降低了信道利用率,因此又提出了后退n協議。后退n協議中,發送方在發完一個數據幀后,不停下 來等待應答幀,而是連續發送若干個數據幀,即使在連續發送過程中收到了接收方發來的應答幀,也可以繼續發送。且發送方在每發送完一個數據幀時都要設置超時 定時器。只要在所設置的超時時間內仍收到確認幀,就要重發相應的數據幀。如:當發送方發送了N個幀后,若發現該N幀的前一個幀在計時器超時后仍未返回其確 認信息,則該幀被判為出錯或丟失,此時發送方就不得不重新發送出錯幀及其后的N幀。 從這里不難看出,后退n協議一方面因連續發送數據幀而提高了效率,但另一方面,在重傳時又必須把原來已正確傳送過的數據幀進行重傳(僅因這些數據幀之前有 一個數據幀出了錯),這種做法又使傳送效率降低。由此可見,若傳輸信道的傳輸質量很差因而誤碼率較大時,連續測協議不一定優于停止等待協議。此協議中的發 送窗口的大小為k,接收窗口仍是1。 (4).選擇重傳協議 在后退n協議中,接收方若發現錯誤幀就不再接收后續的幀,即使是正確到達的幀,這顯然是一種浪費。另一種效率更高的策略是當接收方發現某幀出錯后,其后繼 續送來的正確的幀雖然不能立即遞交給接收方的高層,但接收方仍可收下來,存放在一個緩沖區中,同時要求發送方重新傳送出錯的那一幀。一旦收到重新傳來的幀 后,就可以原已存于緩沖區中的其余幀一并按正確的順序遞交高層。這種方法稱為選擇重發(SELECTICE REPEAT),其工作過程如圖所示。顯然,選擇重發減少了浪費,但要求接收方有足夠大的緩沖區空間。
轉載于:https://www.cnblogs.com/songby/p/6811263.html
總結
以上是生活随笔為你收集整理的滑动窗口——TCP可靠传输的实现[转]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ UTF8和UTF16互转代码
- 下一篇: linux 系统优化初始化配置