發布時間: 2018-10-10 14:43:48
概念
滑動窗口是兩臺主機間傳送數據時的緩沖區。每臺TCP /IP 主機支持兩個滑動窗口,
一個用于接收數據, 另一個用于發送數據。窗口尺寸表示計算機可能緩沖的數據量大小。
工作原理
1. 滑動窗口工作過程
TCP 協議通過采用滑動窗口的方式控制數據流的傳輸。在傳輸層中, 數據按照一定的
格式打成大小相同的包。每一個滑動窗口中包含一定數目的數據包, 滑動窗口的大小可以
進行調整。每臺網絡上的主機維護一個發送窗口和一個接收窗口。發送方一次可發送相當于滑動窗口大小的數據包數目, 并在每個數據包前添加包頭信息, 然后等待接收方返回確認信息。由于TCP 是面向連接的協議, 可以保證數據傳輸的完整性和準確性, 當傳輸過程中發生丟包時, 接收方會要求發送方從斷點處重傳數據。
當TCP 從應用層中接收到數據時, TCP 將一個帶序列號的報頭加入數據包并將其交給
IP, 由IP 將它發送到目標主機。
當每一個數據包傳送時, 源主機設置重發計時器, 描述在重新發送數據包前將等待
ACK 的時間。在一般情況下, 當第一次發送失敗后, 重發計時器的重試時間將設置為前一
次的兩倍。在發送窗口中有每一個數據包的備份, 直到收到ACK。
當數據包到達目的主機接收窗口, 它們按照序列號放置。當目的主機接收到連續的數
據段時, 就向源主機發送一個關于數據的認可( ACK) 的應答報文, 其中帶有當前窗口尺寸。一旦源主機接收到數據包并認可, 發送窗口將進行滑動。如果在重發計時器設定的時
間內, 源主機沒有接收到對現存數據的認可, 數據將重新傳送。重發數據包將加重網絡和源主機的負擔。下面通過應用實例來了解其作用吧。
滑動窗口應用實例
“ 三次握手”的例子描述了一個典型的TCP 傳輸過程。TCP 可使用稱為滑動窗口的方法獲得更好的TCP 傳輸性能。在TCP“ 三次握手”的過程中, 兩臺主機交換傳輸窗口大小, 接收主機把它的接收窗口大小設置成和發送主機的傳輸窗口大小一致。窗口大小表明任何一次所能傳輸段的較大個數。窗口大小是通過TCP 協議的格式中“ 窗口”字段, 在傳輸給目標主機的每一個報文中給出的。
發送主機通過創建一個發送窗口, 以設置它的較大傳輸規模。例如, 如果發送主機設置
發送窗口的大小是6, 如下圖1所示,
這意味著發送主機一次最多可連續發送6 個數據段, 此時必須得到目標主機確認后, 才能繼續發送后續的數據段。
圖1發送窗口為6 的數據段的傳送
( 1) 第一次連續發送6 個數據段后( 即1 至6 段) , 發送主機必須等待接收主機的確認。
假如接收主機只收到段1, 2 和5, 則接收主機發回包含有序列號為3 的段進行確認, 確認的是1 和2 段。此時, 發送主機的滑動窗口向右滑過兩個確認的段, 7 和8 段出現在滑動窗口中。如圖2 所示。
圖2 發送窗口向右滑過兩個確認的段
( 2 ) 發送主機又連續發送6 個數據段( 即3 至8 段) 。假定這6 段均被正確收到, 接收
主機發回包含有序列號為9 的段進行確認, 即表示9 段前的數據段均已正確收到, 期待第9段的發送。此時, 發送主機的滑動窗口向右滑過6 個確認的段, 9 至14 段出現在滑動窗口中, 如圖3 所示。
圖3 發送窗口向右滑過6 個確認的段
通過上例可以看出, 借助于滑動窗口能夠提高TCP 數據的傳輸性能。因為TCP 無須對
每一數據段進行確認, 只需要對發送一個窗口寬度的段確認一次。
小結
滑動窗口的大小對網絡性能有很大的影響。如果滑動窗口過小, 則需要在網絡上頻繁
的傳輸確認信息, 占用了大量的網絡帶寬; 如果滑動窗口過大, 對于利用率較高、容易產生丟包現象的網絡, 則需要多次發送重復的數據, 這同樣耗費了網絡帶寬。
決定滑動窗口大小的因素, 包括網絡的帶寬、可靠性以及需要傳輸的數據量。
上一篇: {Docker}簡介
下一篇: {HTML5}常規選擇器-第一節