日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TCP 滑动窗口协议

發(fā)布時間:2025/3/21 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TCP 滑动窗口协议 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

什么是滑動窗口協(xié)議??
??? 一圖勝千言,看下面的圖。簡單解釋下,發(fā)送和接受方都會維護一個數(shù)據(jù)幀的序列,這個序列被稱作窗口。發(fā)送方的窗口大小由接受方確定,目的在于控制發(fā)送速度,以免接受方的緩存不夠大,而導(dǎo)致溢出,同時控制流量也可以避免網(wǎng)絡(luò)擁塞。下面圖中的4,5,6號數(shù)據(jù)幀已經(jīng)被發(fā)送出去,但是未收到關(guān)聯(lián)的ACK,7,8,9幀則是等待發(fā)送。可以看出發(fā)送端的窗口大小為6,這是由接受端告知的(事實上必須考慮擁塞窗口cwnd,這里暫且考慮cwnd>rwnd)。此時如果發(fā)送端收到4號ACK,則窗口的左邊緣向右收縮,窗口的右邊緣則向右擴展,此時窗口就向前“滑動了”,即數(shù)據(jù)幀10也可以被發(fā)送。

??? 下面就滑動窗口協(xié)議做出更詳細的說明,這里為了簡單起見設(shè)定發(fā)送方窗口大小為2,接受方大小為1。看下面圖:


? 一:初始態(tài),發(fā)送方?jīng)]有幀發(fā)出,發(fā)送窗口前后沿相重合。接收方0號窗口打開,等待接收0號幀;?
? 二:發(fā)送方打開0號窗口,表示已發(fā)出0幀但尚確認返回信息。 此時接收窗口狀態(tài)不變;?
? 三:發(fā)送方打開0、1號窗口,表示0、1號幀均在等待確認之列。至此,發(fā)送方打開的窗口數(shù)已達規(guī)定限度,在未收到新的確認返回幀之 前,發(fā)送方將暫停發(fā)送新的數(shù)據(jù)幀。接收窗口此時狀態(tài)仍未變;?
? 四:接收方已收到0號幀,0號窗口關(guān)閉,1號窗口打開,表示準備接收1號幀。此時發(fā)送窗口狀態(tài)不 變;?
? 五:發(fā)送方收到接收方發(fā)來的0號幀確認返回信息,關(guān)閉0號窗口,表示從重發(fā)表中刪除0號幀。此時接收窗口狀態(tài)仍不變?
? 六:發(fā)送方繼續(xù)發(fā)送2號幀,2號窗口 打開,表示2號幀也納入待確認之列。至此,發(fā)送方打開的窗口又已達規(guī)定限度,在未收到新的確認返回幀之前,發(fā)送方將暫停發(fā)送新的數(shù)據(jù)幀,此時接收窗口狀態(tài) 仍不變;?
? 七:接收方已收到1號幀,1號窗口關(guān)閉,2號窗口打開,表示準備接收2號幀。此時發(fā)送窗口狀態(tài)不變;?
? 八:發(fā)送方收到接收方發(fā)來的1號幀收畢的確認信 息,關(guān)閉1號窗口,表示從重發(fā)表中刪除1號幀。此時接收窗口狀態(tài)仍不變。

?

1比特滑動窗口協(xié)議??
??? 上面說的只是滑動窗口協(xié)議的理論,實際應(yīng)用中又有不同。首先就是停等協(xié)議(stop-and-wait),這時接受方的窗口和發(fā)送方的窗口大小都是1,1個比特就夠表示了,所以也叫1比特滑動窗口協(xié)議。發(fā)送方這時自然發(fā)送每次只能發(fā)送一個,并且必須等待這個數(shù)據(jù)包的ACK,才能發(fā)送下一個。雖然在效率上比較低,帶寬利用率明顯較低,不過在網(wǎng)絡(luò)環(huán)境較差,或是帶寬本身很低的情況下,還是適用的。看下面的流程圖:

?

后退n協(xié)議??
??? 停等協(xié)議雖然實現(xiàn)簡單,也能較好的適用惡劣的網(wǎng)絡(luò)環(huán)境,但是顯然效率太低。所以有了后退n協(xié)議,這也是滑動窗口協(xié)議真正的用處,這里發(fā)送的窗口大小為n,接受方的窗口仍然為1。具體看下面的圖,這里假設(shè)n=9:?
??? 首先發(fā)送方一口氣發(fā)送10個數(shù)據(jù)幀,前面兩個幀正確返回了,數(shù)據(jù)幀2出現(xiàn)了錯誤,這時發(fā)送方被迫重新發(fā)送2-8這7個幀,接受方也必須丟棄之前接受的3-8這幾個幀。?
??? 后退n協(xié)議的好處無疑是提高了效率,但是一旦網(wǎng)絡(luò)情況糟糕,則會導(dǎo)致大量數(shù)據(jù)重發(fā),反而不如上面的停等協(xié)議,實際上這是很常見的,具體可以參考TCP擁塞控制。

?

選擇重傳協(xié)議??
??? 后退n協(xié)議的另外一個問題是,當(dāng)有錯誤幀出現(xiàn)后,總是要重發(fā)該幀之后的所有幀,毫無疑問在網(wǎng)絡(luò)不是很好的情況下會進一步惡化網(wǎng)絡(luò)狀況,重傳協(xié)議便是用來解決這個問題。原理也很簡單,接收端總會緩存所有收到的幀,當(dāng)某個幀出現(xiàn)錯誤時,只會要求重傳這一個幀,只有當(dāng)某個序號后的所有幀都正確收到后,才會一起提交給高層應(yīng)用。重傳協(xié)議的缺點在于接受端需要更多的緩存。


from:?http://www.cnblogs.com/ulihj/archive/2011/01/06/1927613.html

總結(jié)

以上是生活随笔為你收集整理的TCP 滑动窗口协议的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。