什么是滑動(dòng)窗口滑動(dòng)窗口的機(jī)制
什么是滑動(dòng)窗口滑動(dòng)窗口的機(jī)制
滑動(dòng)窗口概念不僅存在于數(shù)據(jù)鏈路層,也存在于傳輸層,兩者有不同的協(xié)議,但基本原理是相近的。那么你對(duì)滑動(dòng)窗口了解多少呢?以下是由學(xué)習(xí)啦小編整理關(guān)于什么是滑動(dòng)窗口的內(nèi)容,希望大家喜歡!
滑動(dòng)窗口的概念
滑動(dòng)窗口(Sliding window)是一種流量控制技術(shù)。早期的網(wǎng)絡(luò)通信中,通信雙方不會(huì)考慮網(wǎng)絡(luò)的擁擠情況直接發(fā)送數(shù)據(jù)。由于大家不知道網(wǎng)絡(luò)擁塞狀況,同時(shí)發(fā)送數(shù)據(jù),導(dǎo)致中間節(jié)點(diǎn)阻塞掉包,誰(shuí)也發(fā)不了數(shù)據(jù),所以就有了滑動(dòng)窗口機(jī)制來(lái)解決此問(wèn)題。參見(jiàn)滑動(dòng)窗口如何根據(jù)網(wǎng)絡(luò)擁塞發(fā)送數(shù)據(jù)仿真視頻。圖片是一個(gè)滑動(dòng)窗口的實(shí)例:
滑動(dòng)窗口協(xié)議是用來(lái)改善吞吐量的一種技術(shù),即容許發(fā)送方在接收任何應(yīng)答之前傳送附加的包。接收方告訴發(fā)送方在某一時(shí)刻能送多少包(稱窗口尺寸)。
TCP中采用滑動(dòng)窗口來(lái)進(jìn)行傳輸控制,滑動(dòng)窗口的大小意味著接收方還有多大的緩沖區(qū)可以用于接收數(shù)據(jù)。發(fā)送方可以通過(guò)滑動(dòng)窗口的大小來(lái)確定應(yīng)該發(fā)送多少字節(jié)的數(shù)據(jù)。當(dāng)滑動(dòng)窗口為0時(shí),發(fā)送方一般不能再發(fā)送數(shù)據(jù)報(bào),但有兩種情況除外,一種情況是可以發(fā)送緊急數(shù)據(jù),例如,允許用戶終止在遠(yuǎn)端機(jī)上的運(yùn)行進(jìn)程。另一種情況是發(fā)送方可以發(fā)送一個(gè)1字節(jié)的數(shù)據(jù)報(bào)來(lái)通知接收方重新聲明它希望接收的下一字節(jié)及發(fā)送方的滑動(dòng)窗口大小。
滑動(dòng)窗口的機(jī)制
滑動(dòng)窗口協(xié)議的基本原理就是在任意時(shí)刻,發(fā)送方都維持了一個(gè)連續(xù)的允許發(fā)送的幀的序號(hào),稱為發(fā)送窗口;同時(shí),接收方也維持了一個(gè)連續(xù)的允許接收的幀的序號(hào),稱為接收窗口。發(fā)送窗口和接收窗口的序號(hào)的上下界不一定要一樣,甚至大小也可以不同。不同的滑動(dòng)窗口協(xié)議窗口大小一般不同。發(fā)送方窗口內(nèi)的序列號(hào)代表了那些已經(jīng)被發(fā)送,但是還沒(méi)有被確認(rèn)的幀,或者是那些可以被發(fā)送的幀。
下面舉例說(shuō)明,假設(shè)發(fā)送窗口尺寸為2,接收窗口尺寸為1:
分析:①初始態(tài),發(fā)送方?jīng)]有幀發(fā)出,發(fā)送窗口前后沿相重合。接收方0號(hào)窗口打開,等待接收0號(hào)幀;②發(fā)送方打開0號(hào)窗口,表示已發(fā)出0幀但尚確認(rèn)返回信息。此時(shí)接收窗口狀態(tài)不變;③發(fā)送方打開0、1號(hào)窗口,表示0、1號(hào)幀均在等待確認(rèn)之列。至此,發(fā)送方打開的窗口數(shù)已達(dá)規(guī)定限度,在未收到新的確認(rèn)返回幀之前,發(fā)送方將暫停發(fā)送新的數(shù)據(jù)幀。接收窗口此時(shí)狀態(tài)仍未變;④接收方已收到0號(hào)幀,0號(hào)窗口關(guān)閉,1號(hào)窗口打開,表示準(zhǔn)備接收1號(hào)幀。此時(shí)發(fā)送窗口狀態(tài)不變;⑤發(fā)送方收到接收方發(fā)來(lái)的0號(hào)幀確認(rèn)返回信息,關(guān)閉0號(hào)窗口,表示從重發(fā)表中刪除0號(hào)幀。此時(shí)接收窗口狀態(tài)仍不變;⑥發(fā)送方繼續(xù)發(fā)送2號(hào)幀,2號(hào)窗口打開,表示2號(hào)幀也納入待確認(rèn)之列。至此,發(fā)送方打開的窗口又已達(dá)規(guī)定限度,在未收到新的確認(rèn)返回幀之前,發(fā)送方將暫停發(fā)送新的數(shù)據(jù)幀,此時(shí)接收窗口狀態(tài)仍不變;⑦接收方已收到1號(hào)幀,1號(hào)窗口關(guān)閉,2號(hào)窗口打開,表示準(zhǔn)備接收2號(hào)幀。此時(shí)發(fā)送窗口狀態(tài)不變;⑧發(fā)送方收到接收方發(fā)來(lái)的1號(hào)幀收畢的確認(rèn)信息,關(guān)閉1號(hào)窗口,表示從重發(fā)表中刪除1號(hào)幀。此時(shí)接收窗口狀態(tài)仍不變。
若從滑動(dòng)窗口的觀點(diǎn)來(lái)統(tǒng)一看待1比特滑動(dòng)窗口、后退n及選擇重傳三種協(xié)議,它們的差別僅在于各自窗口尺寸的大小不同而已。1比特滑動(dòng)窗口協(xié)議:發(fā)送窗口=1,接收窗口=1;后退n協(xié)議:發(fā)送窗口>1,接收窗口=1;選擇重傳協(xié)議:發(fā)送窗口>1,接收窗口>1。
滑動(dòng)窗口流量控制
TCP的特點(diǎn)之一是提供體積可變的滑動(dòng)窗口機(jī)制,支持端到端的流量控制。TCP的窗口以字節(jié)為單位進(jìn)行調(diào)整,以適應(yīng)接收方的處理能力。處理過(guò)程如下:
TCP連接階段,雙方協(xié)商窗口尺寸,同時(shí)接收方預(yù)留數(shù)據(jù)緩存區(qū);
發(fā)送方根據(jù)協(xié)商的結(jié)果,發(fā)送符合窗口尺寸的數(shù)據(jù)字節(jié)流,并等待對(duì)方的確認(rèn);
發(fā)送方根據(jù)確認(rèn)信息,改變窗口的尺寸,增加或者減少發(fā)送未得到確認(rèn)的字節(jié)流中的字節(jié)數(shù)。調(diào)整過(guò)程包括:如果出現(xiàn)發(fā)送擁塞,發(fā)送窗口縮小為原來(lái)的一半,同時(shí)將超時(shí)重傳的時(shí)間間隔擴(kuò)大一倍。
滑動(dòng)窗口機(jī)制為端到端設(shè)備間的數(shù)據(jù)傳輸提供了可靠的流量控制機(jī)制。然而,它只能在源端設(shè)備和目的端設(shè)備起作用,當(dāng)網(wǎng)絡(luò)中間設(shè)備(例如路由器等)發(fā)生擁塞時(shí),滑動(dòng)窗口機(jī)制將不起作用。
看過(guò)“滑動(dòng)窗口的機(jī)制”的人還看了: