作用:
1. 提供TCP可靠性:對發送的數據進行確認
2. 流量控制:窗口大小隨鏈路變化
一、TCP窗口機制
TCP中窗口大小是指tcp協議一次傳輸多少個數據。因為TCP是一個面向連接的可靠的傳輸協議,既然是可靠的就需要傳輸的數據進行確認。TCP窗口機制有兩種,一種是固定窗口大小,另一種是滑動窗口。數據在傳輸時,TCP會對所有數據進行編號,發送方在發送過程中始終保持着一個窗口,只有落在發送窗口內的數據幀才允許被發送;同時接收方也始終保持着一個接收窗口,只有落在窗口內的數據才會被接收。這樣通過改變發送窗口和接收窗口的大小就可以實現流量控制。
二、TCP窗口大小
TCP的窗口滑動技術通過動態改變窗口的大小來調節兩台主機之間數據傳輸。每個TCP/IP主機支持全雙工數據傳輸,因此TCP有兩個滑動窗口,一個用於接收數據,一個用於發送數據。接收方設備要求窗口大小為0時,表明接收方已經接收了全部數據,或者接收方應用程序沒有時間讀取數據,要求暫停發送。
TCP在傳送數據時,第一次接受方窗口大小是由鏈路帶寬決定的,但是接收方在接收到的數據后,返回ack確認報文,同時也告訴了發送方自己的窗口大小,此時發送方第二次發送數據時,會改變自己的窗口大小和接收方一致。
當窗口過大時,會導致不必要的數據來擁塞我們的鏈路,但是窗口太小時,會造成很大的延時,比如為1時,發送方每發送一個數據,接收方就會返回一個ack報文,在發送方未接收到接收方的確認報文ack之前不會進行下一次發送。(當鏈路變好了或者變差了這個窗口還會發生變化,並不是第一次協商好了以后就永遠不變了。)【這句話不太理解】
三、窗口滑動協議
窗口滑動協議是TCP使用的一種流量控制方法。該協議允許發送方在停止並等待接收確認報文前可以連續發送多個分組。由於發送方不必每發一個分組就停下來等待確認,因此該協議可以加速數據的傳輸。只有在接收窗口向前滑動時(與此同時也發送了確認),發送窗口才有可能向前滑動。收發兩端的窗口按照以上規律不斷地向前滑動,因此這種協議又稱為滑動窗口協議。
四、滑動窗口原理
-
窗口大小是指無需等待確認就可以繼續發送數據的最大值,上圖的窗口大小是4000字節(4段)
-
發送前4段時,無需ACK,直接發送
-
收到第一個ACK后,滑動窗口向后移動,繼續發送第五段的數據
-
操作系統內核為了維護這個滑動窗口,需要開辟發送緩沖區來記錄當前還有哪些數據沒有應答,只有應答的數據才會從緩沖區中刪除
-
窗口越大,則網絡的吞吐率就越高
五、滑動窗口丟包原理
發送端丟包原理
當某一段報文丟失了,圖中(1001-2000)數據段丟失了,接收方沒有接收到該數據段,則會一直給發送端發送ACK(下一個是1001),如果發送端連續收到同樣的ACK(下一個是1001),就會將對應的(1001-2000)重新發送,這時候如果接收端收到1001后,再次返回的就是ACK(7001)。這種機制被稱為“高速重發機制”(快速重傳)
接收端丟包原理