概念
只有在接收視窗向前滑動時(與此同時也傳送了確認),傳送視窗才有可能向前滑動。
收發兩端的視窗按照以上規律不斷地向前滑動,因此這種協定又稱為滑動視窗協定。
當傳送視窗和接收視窗的大小都等於 1時,就是停止等待協定。
當傳送視窗大於1,接收視窗等於1時,就是回退N步協定。
當傳送視窗和接收視窗的大小均大於1時,就是選擇重發協定。
協定中規定,對於視窗內未經確認的分組需要重傳。這種分組的數量最多可以等於傳送視窗的大小,即滑動視窗的大小n減去1(因為傳送視窗不可能大於(n-1),起碼接收視窗要大於等於1)。
工作機制
工作原理
TCP協定在工作時,如果傳送端的TCP協定軟體每傳輸一個數據分組後,必須等待接收端的確認才能夠傳送下一個分組,由於網路傳輸的時延,將有大量時間被用於等待確認,導致傳輸效率低下。為此TCP在進行數據傳輸時使用了滑動視窗機制。
TCP滑動視窗用來暫存兩台計算機間要傳送的數據分組。每台運行TCP協定的計算機有兩個滑動視窗:一個用於數據傳送,另一個用於數據接收。傳送端待發數據分組在緩衝區排隊等待送出。被滑動視窗框入的分組,是可以在未收到接收確認的情況下最多送出的部分。滑動視窗左端標誌X的分組,是已經被接收端確認收到的分組。隨著新的確認到來,視窗不斷向右滑動。
TCP協定軟體依靠滑動視窗機制解決傳輸效率和流量控制問題。它可以在收到確認信息之前傳送多個數據分組。這種機制使得網路通信處於忙碌狀態,提高了整個網路的吞吐率,它還解決了端到端的通信流量控制問題,允許接收端在擁有容納足夠數據的緩衝之前對傳輸進行限制。在實際運行中,TCP滑動視窗的大小是可以隨時調整的。收發端TCP協定軟體在進行分組確認通信時,還交換滑動視窗控制信息,使得雙方滑動視窗大小可以根據需要動態變化,達到在提高數據傳輸效率的同時,防止擁塞的發生。稱視窗左邊沿向右邊沿靠近為視窗合攏,這種現象發生在數據被傳送和確認時。
當視窗右邊沿向左移動時將允許傳送更多的數據,稱之為視窗張開。這種現象發生在另一端的接收進程讀取已經確認的數據並釋放了TCP的接收快取時。
當左邊沿向右移動時,稱為視窗收縮。Host Requirements RFC強烈建議不要使用這種方式。但TCP必須能夠在某一端產生這種情況時進行處理。
如果左邊沿到達右邊沿,則稱其為一個零視窗。
注意事項
(1)傳送方不必傳送一個全視窗大小的數據。
(2)來自接收方的一個報文段確認數據並把視窗向右邊滑動,這是因為視窗的大小是相對於確認序號的。
(3)視窗的大小可以減小,但是視窗的右邊沿卻不能夠向左移動。
(4)接收方在傳送一個ACK前不必等待視窗被填滿。