一、窗口控制
TCP以1個段爲單位,每發一個數據段進行一次ACK確認應答的處理,這樣的傳輸方式由一個缺點,就是包的往返時間越長通信的性能越差。
一發一答
解決這個問題,提高速度,TCP引入了窗口控制這個概念。具體做法就是連續發送上限爲窗口大小的數據,然後再一個一個ACK確認。即使在往返時間較長的情況下,它也能控制網絡性能的下降,提高速率。
窗口控制的多發多答
窗口大小:
指無需等待確認應答而可以繼續發送數據的最大值。如上圖窗口大小爲4個段。
滑動窗口:
收到確認應答的情況下,將窗口滑動到確認應答中的序號的位置。這樣可以順序地將多個段同時發送提高通信性能。
再窗口控制中,出現段丟失怎麼辦呢?
重發控制:
情況一:A向B發數據,A的數據已經發送到B端,B返回確認應答信號ACK未能到達A端情況下,是不需要進行重發的。
注意:如果是沒有使用窗口控制的時候,如果沒收到確認應答,數據是會重發的
情況2:A發數據到B,如果A發的數據丟失沒有達到B端,接收端B會返回沒收到數據的ACK給發送端A,來告訴A端接收數據失敗,要重新發送。
因此,在窗口比較大,又出現報文丟失的情況下,同一個序號的確認應答將會被重複不斷地返回,而發送端如果連續3次收到同一個確認應答,將會重新發送數據段。
二、流量控制
雙方在通信的時候,發送方的速率與接收方的速率是不一定相等,如果發送方的發送速率太快,會導致接收方處理不過來,這時候接收方只能把處理不過來的數據存在緩存區裏(失序的數據包也會被存放在緩存區裏)。
如果緩存區滿了發送方還在瘋狂着發送數據,接收方只能把收到的數據包丟掉,大量的丟包會極大着浪費網絡資源,因此,我們需要控制發送方的發送速率,讓接收方與發送方處於一種動態平衡纔好。
對數據發送方發送速率的控制,我們稱之爲流量控制
具體做法:
接收端向發送端通知自己接收數據的大小,於是發送端會發送不超過這個限度的數據,該大小限度就是窗口大小。
注意:窗口大小由接收方決定
TCP首部中有一個字段用來通知窗口大小
步驟:
1.通信雙方主機上都分別有一個“發送窗口”和一個“接收窗口”
2.TCP連接階段,雙方協商窗口尺寸
3.發送方根據協商的結果,發送符合窗口尺寸的數據字節流,並等待對方的確認,等待確認機制
4.發送方根據確認信息,改變窗口的尺寸
窗口探測:如果接收端返回的窗口大小爲0,即發送端會停止發送數據。要等接收到返回窗口大小不爲0的ACK(更新通知),發送端纔會繼續發送數據。
爲了避免更新通知在傳送途中丟失而導致發送端和接收端都處於互相等待狀態中。發送端會是不是發送一個叫窗口探測的數據,來查詢接收端的(更新通知)ACK應答。
三、擁塞控制
參考文獻:圖解TCP/IP