滑动窗口——TCP可靠传输的实现[转]
生活随笔
收集整理的這篇文章主要介紹了
滑动窗口——TCP可靠传输的实现[转]
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
滑動(dòng)窗口——TCP可靠傳輸?shù)膶?shí)現(xiàn)[轉(zhuǎn)] 轉(zhuǎn)自:? http://hi.baidu.com/bellgrade/blog/item/935a432393b949ae4723e828.html (1).窗口機(jī)制? 滑動(dòng)窗口協(xié)議的基本原理就是在任意時(shí)刻,發(fā)送方都維持了一個(gè)連續(xù)的允許發(fā)送的幀的序號,稱為發(fā)送窗口;同時(shí),接收方也維持了一個(gè)連續(xù)的允許接收的幀的序 號,稱為接收窗口。發(fā)送窗口和接收窗口的序號的上下界不一定要一樣,甚至大小也可以不同。不同的滑動(dòng)窗口協(xié)議窗口大小一般不同。發(fā)送方窗口內(nèi)的序列號代表 了那些已經(jīng)被發(fā)送,但是還沒有被確認(rèn)的幀,或者是那些可以被發(fā)送的幀。下面舉一個(gè)例子(假設(shè)發(fā)送窗口尺寸為2,接收窗口尺寸為1): 分析:①初始態(tài),發(fā)送方?jīng)]有幀發(fā)出,發(fā)送窗口前后沿相重合。接收方0號窗口打開,等待接收0號幀;②發(fā)送方打開0號窗口,表示已發(fā)出0幀但尚確認(rèn)返回信 息。此時(shí)接收窗口狀態(tài)不變;③發(fā)送方打開0、1號窗口,表示0、1號幀均在等待確認(rèn)之列。至此,發(fā)送方打開的窗口數(shù)已達(dá)規(guī)定限度,在未收到新的確認(rèn)返回幀 之前,發(fā)送方將暫停發(fā)送新的數(shù)據(jù)幀。接收窗口此時(shí)狀態(tài)仍未變;④接收方已收到0號幀,0號窗口關(guān)閉,1號窗口打開,表示準(zhǔn)備接收1號幀。此時(shí)發(fā)送窗口狀態(tài) 不變;⑤發(fā)送方收到接收方發(fā)來的0號幀確認(rèn)返回信息,關(guān)閉0號窗口,表示從重發(fā)表中刪除0號幀。此時(shí)接收窗口狀態(tài)仍不變;⑥發(fā)送方繼續(xù)發(fā)送2號幀,2號窗 口打開,表示2號幀也納入待確認(rèn)之列。至此,發(fā)送方打開的窗口又已達(dá)規(guī)定限度,在未收到新的確認(rèn)返回幀之前,發(fā)送方將暫停發(fā)送新的數(shù)據(jù)幀,此時(shí)接收窗口狀 態(tài)仍不變;⑦接收方已收到1號幀,1號窗口關(guān)閉,2號窗口打開,表示準(zhǔn)備接收2號幀。此時(shí)發(fā)送窗口狀態(tài)不變;⑧發(fā)送方收到接收方發(fā)來的1號幀收畢的確認(rèn)信 息,關(guān)閉1號窗口,表示從重發(fā)表中刪除1號幀。此時(shí)接收窗口狀態(tài)仍不變。 若從滑動(dòng)窗口的觀點(diǎn)來統(tǒng)一看待1比特滑動(dòng)窗口、后退n及選擇重傳三種協(xié)議,它們的差別僅在于各自窗口尺寸的大小不同而已。1比特滑動(dòng)窗口協(xié)議:發(fā)送窗 口=1,接收窗口=1;后退n協(xié)議:發(fā)窗口>1,接收窗口>1;選擇重傳協(xié)議:發(fā)送窗口>1,接收窗口>1。 (2).1比特滑動(dòng)窗口協(xié)議 當(dāng)發(fā)送窗口和接收窗口的大小固定為1時(shí),滑動(dòng)窗口協(xié)議退化為停等協(xié)議(stop-and-wait)。該協(xié)議規(guī)定發(fā)送方每發(fā)送一幀后就要停下來,等待接收 方已正確接收的確認(rèn)(acknowledgement)返回后才能繼續(xù)發(fā)送下一幀。由于接收方需要判斷接收到的幀是新發(fā)的幀還是重新發(fā)送的幀,因此發(fā)送方 要為每一個(gè)幀加一個(gè)序號。由于停等協(xié)議規(guī)定只有一幀完全發(fā)送成功后才能發(fā)送新的幀,因而只用一比特來編號就夠了。其發(fā)送方和接收方運(yùn)行的流程圖如圖所示。 (3).后退n協(xié)議 由于停等協(xié)議要為每一個(gè)幀進(jìn)行確認(rèn)后才繼續(xù)發(fā)送下一幀,大大降低了信道利用率,因此又提出了后退n協(xié)議。后退n協(xié)議中,發(fā)送方在發(fā)完一個(gè)數(shù)據(jù)幀后,不停下 來等待應(yīng)答幀,而是連續(xù)發(fā)送若干個(gè)數(shù)據(jù)幀,即使在連續(xù)發(fā)送過程中收到了接收方發(fā)來的應(yīng)答幀,也可以繼續(xù)發(fā)送。且發(fā)送方在每發(fā)送完一個(gè)數(shù)據(jù)幀時(shí)都要設(shè)置超時(shí) 定時(shí)器。只要在所設(shè)置的超時(shí)時(shí)間內(nèi)仍收到確認(rèn)幀,就要重發(fā)相應(yīng)的數(shù)據(jù)幀。如:當(dāng)發(fā)送方發(fā)送了N個(gè)幀后,若發(fā)現(xiàn)該N幀的前一個(gè)幀在計(jì)時(shí)器超時(shí)后仍未返回其確 認(rèn)信息,則該幀被判為出錯(cuò)或丟失,此時(shí)發(fā)送方就不得不重新發(fā)送出錯(cuò)幀及其后的N幀。 從這里不難看出,后退n協(xié)議一方面因連續(xù)發(fā)送數(shù)據(jù)幀而提高了效率,但另一方面,在重傳時(shí)又必須把原來已正確傳送過的數(shù)據(jù)幀進(jìn)行重傳(僅因這些數(shù)據(jù)幀之前有 一個(gè)數(shù)據(jù)幀出了錯(cuò)),這種做法又使傳送效率降低。由此可見,若傳輸信道的傳輸質(zhì)量很差因而誤碼率較大時(shí),連續(xù)測協(xié)議不一定優(yōu)于停止等待協(xié)議。此協(xié)議中的發(fā) 送窗口的大小為k,接收窗口仍是1。 (4).選擇重傳協(xié)議 在后退n協(xié)議中,接收方若發(fā)現(xiàn)錯(cuò)誤幀就不再接收后續(xù)的幀,即使是正確到達(dá)的幀,這顯然是一種浪費(fèi)。另一種效率更高的策略是當(dāng)接收方發(fā)現(xiàn)某幀出錯(cuò)后,其后繼 續(xù)送來的正確的幀雖然不能立即遞交給接收方的高層,但接收方仍可收下來,存放在一個(gè)緩沖區(qū)中,同時(shí)要求發(fā)送方重新傳送出錯(cuò)的那一幀。一旦收到重新傳來的幀 后,就可以原已存于緩沖區(qū)中的其余幀一并按正確的順序遞交高層。這種方法稱為選擇重發(fā)(SELECTICE REPEAT),其工作過程如圖所示。顯然,選擇重發(fā)減少了浪費(fèi),但要求接收方有足夠大的緩沖區(qū)空間。
轉(zhuǎn)載于:https://www.cnblogs.com/songby/p/6811263.html
總結(jié)
以上是生活随笔為你收集整理的滑动窗口——TCP可靠传输的实现[转]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ UTF8和UTF16互转代码
- 下一篇: 高效5步走,高速搭建Hadoop2伪分布