A. 滑動窗口協議的工作機制
TCP協議在工作時,如果發送端的TCP協議軟體每傳輸一個數據分組後,必須等待接收端的確認才能夠發送下一個分組,由於網路傳輸的時延,將有大量時間被用於等待確認,導致傳輸效率低下。為此TCP在進行數據傳輸時使用了滑動窗口機制。
TCP滑動窗口用來暫存兩台計算機間要傳送的數據分組。每台運行TCP協議的計算機有兩個滑動窗口:一個用於數據發送,另一個用於數據接收。發送端待發數據分組在緩沖區排隊等待送出。被滑動窗口框入的分組,是可以在未收到接收確認的情況下多送出的部分。滑動窗口左端標志X的分組,是已經被接收端確認收到的分組。隨著新的確認到來,窗口不斷向右滑動。
TCP協議軟體依靠滑動窗口機制解決傳輸效率和流量控制問題。它可以在收到確認信息之前發送多個數據分組。這種機制使得網路通信處於忙碌狀態,提高了整個網路的吞吐率,它還解決了端到端的通信流量控制問題,允許接收端在擁有容納足夠數據的緩沖之前對傳輸進行限制。在實際運行中,TCP滑動窗口的大小是可以隨時調整的。收發端TCP協議軟體在進行分組確認通信時,還交換滑動窗口控制信息,使得雙方滑動窗口大小可以根據需要動態變化,達到在提高數據傳輸效率的同時,防止擁塞的發生。稱窗口左邊沿向右邊沿靠近為窗口合攏,這種現象發生在數據被發送和確認時。
當窗口右邊沿向右移動時將允許發送更多的數據,稱之為窗口張開。這種現象發生在另一端的接收進程讀取已經確認的數據並釋放了TCP的接收緩存時。
當右邊沿向左移動時,稱為窗口收縮。Host Requirements RFC強烈建議不要使用這種方式。但TCP必須能夠在某一端產生這種情況時進行處理。
如果左邊沿到達右邊沿,則稱其為一個零窗口。 (1)發送方不必發送一個全窗口大小的數據。
(2)來自接收方的一個報文段確認數據並把窗口向右邊滑動,這是因為窗口的大小是相對於確認序號的。
(3)窗口的大小可以減小,但是窗口的右邊沿卻不能夠向左移動。
(4)接收方在發送一個ACK前不必等待窗口被填滿。
B. 瀵筎CP 錛孏BN錛孲R鐨勪竴鐐圭悊瑙f葷粨
娣卞叆鎺㈣═CP銆丟BN涓嶴R錛氶珮鏁堟暟鎹浼犺緭鐨勪笁澶фā鍨
鍦ㄦ繁鍏ョ爺絀躲婅$畻鏈虹綉緇滆嚜欏跺悜涓嬫柟娉曘嬫椂錛屾垜浠涓嶉毦鍙戠幇TCP銆丟BN鍜孲R榪欎笁涓鍗忚鍦ㄥ彲闈犳暟鎹浼犺緭涓鎵婕旂潃閲嶈佽掕壊銆傚畠浠鍚勮嚜鐨勭壒鐐瑰拰絳栫暐錛屽侴BN鐨勬祦閲忔帶鍒跺拰SR鐨勯珮鏁堥噸浼狅紝涓烘垜浠鐞嗚В緗戠粶閫氫俊鐨勬牳蹇冩満鍒舵彁渚涗簡鍏抽敭瑙嗚掋備笅闈錛岃╂垜浠閫愪竴鍓栨瀽榪欎笁涓妯″瀷錛岄嗙暐瀹冧滑鐨勫閥濡欎箣澶勩
GBN錛氭祦閲忔帶鍒朵笌鍥為N姝ユ満鍒
GBN鍗忚鐨勬牳蹇冨湪浜庨檺鍒舵湭紜璁ゅ垎緇勭殑鏁伴噺錛岄氳繃婊戝姩紿楀彛錛堢獥鍙i暱搴N錛夊疄鐜版祦閲忔帶鍒躲傚彂閫佹柟鍦ㄥ彂閫佹暟鎹鏃朵細媯鏌ョ獥鍙g姸鎬侊紝紿楀彛婊″垯鏆傚仠鍙戦侊紝鍚﹀垯鎸夊簭鍙戦佸苟鏇存柊銆傛敹鍒癆CK鍚庯紝鍙戦佹柟緔璁$『璁ゅ苟鍙鑳介噸浼犺秴鏃剁殑鍒嗙粍銆傛帴鏀舵柟鍒欎弗鏍兼寜搴忓勭悊錛屼涪寮冨け搴忓垎緇勶紝鍙璁板綍鏈夊簭鎺ユ敹鐨勫簭鍒楀彿銆
SR錛氶夋嫨鎬ч噸浼犱笌鎺ユ敹紿楀彛綆$悊
SR鍗忚鏄瀵笹BN鐨勪紭鍖栵紝瀹冨皢鎺ユ敹紿楀彛涓庡彂閫佺獥鍙e悓姝ワ紝浠呴噸浼犵枒浼間涪澶辯殑鍒嗙粍錛屼粠鑰岄伩鍏嶄笉蹇呰佺殑閲嶄紶銆係R閫氳繃涓烘瘡涓鍒嗙粍璁劇疆鐙絝嬭℃椂鍣錛屽綋鏀跺埌ACK鏃訛紝浠呯『璁ゅ凡鎺ユ敹鐨勫崟涓鍒嗙粍錛岃岄潪緔縐紜璁ゃ傝繖浣垮緱鎺ユ敹鏂瑰彲浠ョ紦瀛樺け搴忓垎緇勶紝鍙鍦ㄩ渶瑕佹椂榪涜岄噸浼犮
鍙戦佷笌鎺ユ敹鏂規搷浣滅殑綺懼欎簰鍔
鍙戦佹柟鍦ㄦ帴鏀跺埌涓婂眰鏁版嵁鍚庯紝浼氶夋嫨涓涓搴忓彿騫跺彂閫侊紝ACK鐨勫搷搴斾細鏇存柊紿楀彛騫跺彲鑳借Е鍙戦噸浼犮傛帴鏀舵柟鍒欑『淇濇帴鏀剁殑鍒嗙粍搴忓彿鍦ㄩ勮捐寖鍥村唴錛岄氳繃ACK鍛婄煡鍙戦佹柟鍝浜涘垎緇勫凡鎴愬姛鎺ユ敹銆傚煎緱娉ㄦ剰鐨勬槸錛屽彂閫佸拰鎺ユ敹紿楀彛鍙鑳戒笉涓鑷達紝榪欏氨瑕佹眰鍗忚璁捐¤呯簿蹇冨勭悊銆
紿楀彛闀垮害涓庡簭鍙風┖闂寸殑璋ㄦ厧璁捐
涓轟簡閬垮厤鏁版嵁娣蜂貢錛岀獥鍙i暱搴﹂渶灝忎簬鎴栫瓑浜庡簭鍙風┖闂寸殑涓鍗娿傚悓鏃訛紝鍒嗙粍閲嶆柊鎺掑簭鏄蹇呰佺殑錛岀『淇濈洿鍒扮『璁ゆ墍鏈夋棫鍒嗙粍涓嶅湪緗戠粶涓錛屽簭鍙峰簭鍒楃殑姝g『鎬с
GBN涓嶵CP/SR鐨勬瘮杈
GBN鐨勭壒鐐規槸鎶ユ枃孌甸敊璇鏃朵細閲嶄紶鏁翠釜搴忓垪錛屽苟閫氳繃緔璁ACK紜璁ゆ帴鏀惰寖鍥淬傜浉姣斾箣涓嬶紝TCP閲囩敤緔璁″簲絳旀満鍒訛紝鎺ユ敹絝緙撳瓨澶卞簭鍒嗙粍騫朵嬌鐢ㄥ揩閫熼噸浼犮係R鍒欏湪鎺ユ敹鏂圭紦瀛樺け搴忕殑鍚屾椂錛屽瑰崟涓鍒嗙粍榪涜岃℃椂閲嶅彂錛屽噺灝戜笉蹇呰佺殑閲嶄紶銆
瀛︿範璧勬簮涓庢墿灞曢槄璇
娣卞叆鐞嗚В榪欎簺鍗忚鐨勬渶浣抽斿緞鏄瑙傜湅璇︾粏鐨勫姩鐢繪紨紺猴紝濡GBN/SR鍔ㄧ敾鏁欑▼銆傛ゅ栵紝鎴戠殑鍗氬kai123wen.github.io涔熸彁渚涗簡鏇村氱浉鍏寵祫婧愬拰瑙i噴錛屽府鍔╀綘榪涗竴姝ユ帉鎻¤繖浜涘嶆潅鐨勭綉緇滈氫俊妯″瀷銆
閫氳繃榪欐墊敼鍐欙紝鎴戜滑鏇寸洿瑙傚湴灞曠ず浜員CP銆丟BN鍜孲R鍦ㄦ暟鎹浼犺緭涓鐨勫叧閿鐗規т笌鎿嶄綔錛屽府鍔╄昏呮洿濂藉湴鐞嗚В榪欎簺鍗忚鍦ㄥ疄闄呯綉緇滈氫俊涓鐨勫簲鐢ㄣ
C. 滾動預測和滑動窗口有區別嗎
有區別
在計算機網路中,滑動窗口協議是一種在網路上傳輸數據的方法。滑動窗口協議應用於OSI模型的數據鏈路層。在數據鏈路層,數據採用幀的形式。在聯網中,窗口僅表示具有需要傳輸的數據幀的緩沖區。
滾動預測不同於傳統預測,因為滾動預測是連續的,不考慮每年的財政年度結束期間。滾動預測包含的期間基於為滾動預測預定義的窗口滾動。這些期間通常是按月或季度定義的。