滑動窗口

滑動窗口的作用呢主要是用來進行流量控制,提高吞吐量作用的,如果沒有滑動窗口這個特性的話我們就很有可能丟包或者網絡堵塞但是具體是怎麼滑動的呢讓我們來看下下圖
在這裏插入圖片描述
我們先來假設有兩臺計算機 一臺爲A(發送方) 以爲爲B(接收方)
首先是AB之間三次握手建立TCP連接。在報文的交互過程中,A將自己的緩衝區大小(窗口大小)發送給B,B同理,這樣雙方就知道了對端的窗口大小。但是大家千萬不要以爲這個時候就有滑動窗口特性了,實際上窗口滑動是出現在數據傳輸過程中的,也就是說滑動窗口協議是實際應用於數據傳輸階段而不是鏈路建立階段的。
如上圖 A接到了B說我能接收20個字節大小哈,A這個時候呢就把字節的發送緩衝區弄成了3份
已發送收到確認:[26-30]
發送窗口:[31-50]
不允許發送:[51-56]

同時B這個時候呢也把字節的接收緩衝區弄成了3份
已發送過確認:[26-30]
接送窗口:[31-50]
不允許接收:[51-56]

怎麼描述發送窗口的狀態呢如下圖
在這裏插入圖片描述

這個時候呢發送方就開始給接收方發送數據假如這個時候發了32,33,但是31沒發那麼這個時候接收方是如此狀態32,33紅色代表我暫時寫入緩存,等待31的數據過來,這個時候主機B只會一直髮送ack31的包過去,而不會發送32,3過去,因爲接收方只會發送確認包的最大值發送過去
在這裏插入圖片描述
這個時候如果31過來了那麼接收方就會把31,32,33這個數據交給應用程序,並且向前移動到34,並從接收緩衝區刪除31,32,33,並給A發送確認碼34,代表我已經把31,32,33確認好了哈,你A也可以移動了哈,這個時候狀態就變成如下圖了、
在這裏插入圖片描述
這個時候呢A收到了34的確認碼會怎麼樣呢,我想聰明的你一看下圖就知道怎麼回事了吧
ps:這個時候收到了34,發送方就把窗口向前移動了3位並刪掉31,32,33 到達了34的位置,並51,52,53加入了新的可以允許發送數據的窗口
在這裏插入圖片描述
還有一點有人會問如果接收方一直沒ACK確認碼過去,那麼A會什麼情況呢,這個時候其實A會有個定時器管着,超過了時間就會超時重傳數據給發送方

還有一點我們要切記,這個窗口大小可不是固定的。
他們各自的“接收窗口”大小取決於應用、系統、硬件的限制(TCP傳輸速率不能大於應用的數據處理速率)。各自的“發送窗口”則要求取決於對端通告的“接收窗口”

太晚了,都快凌晨1點了,明天在補充

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章