一是期望接收到的下一字節的序號n,該n代表接收方已經接收到了前n-1字節數據,此時如果接收方收到第n+1字節數據而不是第n字節數據,接收方是不會發送序號為n+2的ACK的。舉個例子,假如接收端收到1-1024字節,它會發送一個確認號為1025的ACK,但是接下來收到的是 2049-3072,它是不會發送確認號為3072的ACK,而依舊發送1025的ACK。二是當前的窗口大小m,如此發送方在接收到ACK包含的這兩個數據后就可以計算出還可以發送多少字節的數據給對方,假定當前發送方已發送到第x字節,則可以發送的字節數就是y=m-(x-n).這就是滑動窗口控制流量的基本原理.

- 稱窗口左邊沿向右邊沿靠近為窗口合攏。這種現象發生在數據被發送和確認時。
- 當窗口右邊沿向右移動時將允許發送更多的數據,我們稱之為窗口張開。這種現象發生在另一端的接收進程讀取已經確認的數據並釋放了T C P的接收緩存時。
- 當右邊緣向左移動時,稱之為窗口收縮。
二、擁塞窗口
迄今為止,在本章所有的例子中,發送方一開始便向網絡發送多個報文段,直至達到接收方通告的窗口大小為止。當發送方和接收方處於同一個局域網時,這種方式是可以的。但是如果在發送方和接收方之間存在多個路由器和速率較慢的鏈路時,就有可能出現一些問題。一些中間路由器必須緩存分組,並有可能耗盡緩存,[Jacobson 1988]證明了這種連接方式是如何嚴重降低了TCP連接的吞吐量的。現在,TCP需要支持一種被稱為“慢啟動(slow start)”的算法。該算法通過觀察到新分組進入網絡的速率應該與另一端返回確認的速率相同而進行工作。
慢啟動為發送方的TCP增加了另一個窗口:擁塞窗口(congestion window),記為cwnd。當與另一個網絡的主機建立TCP連接時,擁塞窗口被初始化為1個報文段(即另一端通告的報文段大小)。每收到一個ACK,擁塞窗口就增加一個報文段(cwnd以字節為單位,但是慢啟動以報文段大小為單位進行增加)。發送方取擁塞窗口與通告窗口中的最小值作為發送上限。擁塞窗口是發送方使用的流量控制,而通告窗口則是接收方使用的流量控制。
發送方開始時發送一個報文段,然后等待ACK。當收到該ACK時,擁塞窗口從1增加為2,即可以發送兩個報文段。當收到這兩個報文段的ACK時,擁塞窗口就增加為4。這是一種指數增加的關系。
---------
原文地址:http://blog.chinaunix.net/u3/93784/showart_2035478.html
https://blog.csdn.net/skc361/article/details/25890233