滑動窗口協(xié)議
窗口是緩存的一部分丑蛤,用來暫時存放字節(jié)流欲低。發(fā)送方和接收方各有一個窗口聪轿,接收方通過 TCP 報文段中的窗口字段告訴發(fā)送方自己的窗口大小,發(fā)送方根據(jù)這個值和其它信息設(shè)置自己的窗口大小笛质。
發(fā)送窗口內(nèi)的字節(jié)都允許被發(fā)送,接收窗口內(nèi)的字節(jié)都允許被接收捞蚂。如果發(fā)送窗口左部的字節(jié)已經(jīng)發(fā)送并且收到了確認妇押,那么就將發(fā)送窗口向右滑動一定距離,直到左部第一個字節(jié)不是已發(fā)送并且已確認的狀態(tài)洞难;接收窗口的滑動類似舆吮,接收窗口左部字節(jié)已經(jīng)發(fā)送確認并交付主機,就向右滑動接收窗口队贱。
接收窗口只會對窗口內(nèi)最后一個按序到達的字節(jié)進行確認色冀,例如接收窗口已經(jīng)收到的字節(jié)為 {31, 34, 35},其中 {31} 按序到達柱嫌,而 {32, 33} 就不是锋恬,因此只對字節(jié) 31 進行確認。發(fā)送方得到一個字節(jié)的確認之后编丘,就知道這個字節(jié)之前的所有字節(jié)都已經(jīng)被接收与学。
比特滑動窗口協(xié)議(停等協(xié)議)
當發(fā)送窗口和接收窗口的大小固定為1時彤悔,滑動窗口協(xié)議退化為停等協(xié)議(stop-and-wait)。該協(xié)議規(guī)定發(fā)送方每發(fā)送一幀后就要停下來索守,等待接收方已正確接收的確認(acknowledgement)返回后才能繼續(xù)發(fā)送下一幀晕窑。由于接收方需要判斷接收到的幀是新發(fā)的幀還是重新發(fā)送的幀,因此發(fā)送方要為每一個幀加一個序號卵佛。由于停等協(xié)議規(guī)定只有一幀完全發(fā)送成功后才能發(fā)送新的幀杨赤,因而只用一比特來編號就夠了。
回退N幀協(xié)議:
由于停等協(xié)議要為每一個幀進行確認后才繼續(xù)發(fā)送下一幀截汪,大大降低了信道利用率疾牲,因此又提出了后退n協(xié)議。后退n協(xié)議中衙解,發(fā)送方在發(fā)完一個數(shù)據(jù)幀后阳柔,不停下來等待應(yīng)答幀,而是連續(xù)發(fā)送若干個數(shù)據(jù)幀蚓峦,即使在連續(xù)發(fā)送過程中收到了接收方發(fā)來的應(yīng)答幀舌剂,也可以繼續(xù)發(fā)送。且發(fā)送方在每發(fā)送完一個數(shù)據(jù)幀時都要設(shè)置超時定時器枫匾。只要在所設(shè)置的超時時間內(nèi)仍收到確認幀架诞,就要重發(fā)相應(yīng)的數(shù)據(jù)幀。如:當發(fā)送方發(fā)送了N個幀后干茉,若發(fā)現(xiàn)該N幀的前一個幀在計時器超時后仍未返回其確認信息谴忧,則該幀被判為出錯或丟失,此時發(fā)送方就不得不重新發(fā)送出錯幀及其后的N幀角虫。
從這里不難看出沾谓,后退n協(xié)議一方面因連續(xù)發(fā)送數(shù)據(jù)幀而提高了效率,但另一方面戳鹅,在重傳時又必須把原來已正確傳送過的數(shù)據(jù)幀進行重傳(僅因這些數(shù)據(jù)幀之前有一個數(shù)據(jù)幀出了錯)均驶,這種做法又使傳送效率降低。由此可見枫虏,若傳輸信道的傳輸質(zhì)量很差因而誤碼率較大時妇穴,連續(xù)測協(xié)議不一定優(yōu)于停止等待協(xié)議。此協(xié)議中的發(fā)送窗口的大小為k隶债,接收窗口仍是1腾它。
選擇重傳協(xié)議:
在后退n協(xié)議中,接收方若發(fā)現(xiàn)錯誤幀就不再接收后續(xù)的幀死讹,即使是正確到達的幀瞒滴,這顯然是一種浪費。另一種效率更高的策略是當接收方發(fā)現(xiàn)某幀出錯后赞警,其后繼續(xù)送來的正確的幀雖然不能立即遞交給接收方的高層妓忍,但接收方仍可收下來虏两,存放在一個緩沖區(qū)中,同時要求發(fā)送方重新傳送出錯的那一幀世剖。一旦收到重新傳來的幀后定罢,就可以原已存于緩沖區(qū)中的其余幀一并按正確的順序遞交高層。這種方法稱為選擇重發(fā)(SELECTICE REPEAT)搁廓,其工作過程如圖所示引颈。顯然,選擇重發(fā)減少了浪費境蜕,但要求接收方有足夠大的緩沖區(qū)空間。
參考資料: