滑動窗口(Sliding window )是一種流量控制技術。早期的網絡通訊中,通訊雙方不會考慮網絡的擁擠狀況直接發送數據。因爲你們不知道網絡擁塞情況,一塊兒發送數據,致使中間結點阻塞掉包,誰也發不了數據。因此就有了滑動窗口機制來解決此問題。參見滑動窗口如何根據網絡擁塞發送數據仿真視頻。html
滑動窗口協議是用來改善吞吐量的一種技術,即允許發送方在接收任何應答以前傳送附加的包。接收方告訴發送方在某一時刻能送多少包(稱窗口尺寸)。 緩存
TCP中採用滑動窗口來進行傳輸控制,滑動窗口的大小意味着接收方還有多大的緩衝區能夠用於接收數據。發送方能夠經過滑動窗口的大小來肯定應該發送多少字節的數據。當滑動窗口爲0時,發送方通常不能再發送數據報,但有兩種狀況除外,一種狀況是能夠發送緊急數據,例如,容許用戶終止在遠端機上的運行進程。另外一種狀況是發送方能夠發送一個1字節的數據報來通知接收方從新聲明它但願接收的下一字節及發送方的滑動窗口大小。 網絡
(1).窗口機制 ide
滑動窗口協議的基本原理就是在任意時刻,發送方都維持了一個連續的容許發送的幀的序號,稱爲發送窗口;同時,接收方也維持了一個連續的容許接收的幀的序號,稱爲接收窗口。發送窗口和接收窗口的序號的上下界不必定要同樣,甚至大小也能夠不一樣。不一樣的滑動窗口協議窗口大小通常不一樣。發送方窗口內的序列號表明了那些已經被髮送,可是尚未被確認的幀,或者是那些能夠被髮送的幀。下面舉一個例子(假設發送窗口尺寸爲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。 htm
(4).選擇重傳協議 在後退n協議中,接收方若發現錯誤幀就再也不接收後續的幀,即便是正確到達的幀,這顯然是一種浪費。另外一種效率更高的策略是當接收方發現某幀出錯後,其後繼續送來的正確的幀雖然不能當即遞交給接收方的高層,但接收方仍可收下來,存放在一個緩衝區中,同時要求發送方從新傳送出錯的那一幀。一旦收到從新傳來的幀後,就能夠原已存於緩衝區中的其他幀一併按正確的順序遞交高層。這種方法稱爲選擇重發(SELECTICE REPEAT),其工做過程如圖所示。顯然,選擇重發減小了浪費,但要求接收方有足夠大的緩衝區空間。 blog
滑動窗口功能:確認、差錯控制、流量控制。進程
流量控制路由
TCP的特色之一是提供體積可變的滑動窗口機制,支持端到端的流量控制。TCP的窗口以字節爲單位進行調整,以適應接收方的處理能力。處理過程以下: 減少窗口尺寸it
(1)TCP鏈接階段,雙方協商窗口尺寸,同時接收方預留數據緩存區;
(2)發送方根據協商的結果,發送符合窗口尺寸的數據字節流,並等待對方的確認;
(3)發送方根據確認信息,改變窗口的尺寸,增長或者減小發送未獲得確認的字節流中的字節數。調整過程包括:若是出現發送擁塞,發送窗口縮小爲原來的一半,同時將超時重傳的時間間隔擴大一倍。
滑動窗口機制爲端到端設備間的數據傳輸提供了可靠的流量控制機制。然而,它只能在源端設備和目的端設備起做用,當網絡中間設備(例如路由器等)發生擁塞時,滑動窗口機制將不起做用。
(原文地址:http://blog.sina.com.cn/s/blog_7ab9fa9e01018af3.html)