前兩篇文章分別解釋了可靠性傳輸要解決的兩件事情:緩存
1:數據受損怎麼辦網絡
2:數據丟失怎麼辦性能
1:停等協議(等前一個完全確認發送成功後再發送下一組數據)spa
2:重傳(若是傳輸受損,重傳;若是傳輸丟失,重傳)blog
經過以上兩個方法外加序列號,校驗等已經實現了可靠性傳輸。可是有性能問題資源
信道利用率U=傳輸時間 /傳輸時間 + RTT。當RTT很大是,傳輸效率會很是低下。效率
把信道假設爲一條高速公路,停等相似於前一輛車到達終點後下一輛車才能開始進入高速公路,效率可想而知。原理
再也不以停等的形式進行發送,而是一次傳輸多個,下圖爲例,一次性傳輸三組數據使得信道的利用率提升了三倍。方法
一樣用高速公路做爲例子,車子一輛跟着一輛進入高速公路。im
1. 更多的序號,停等0,1就夠了。
2.發送的過程當中可能會亂序,發送方最低限度須要緩存已經發送可是沒有確認的數據分組,接收方也許也要緩存已經收到的數據。
下圖爲一個基本的滑動窗口在發送端的模型
GBN的好處就是簡單,接收方只須要維護一個期待的序列號便可。
最大的問題是資源浪費,上圖能夠看出即便分組3,4,5被正確接受了,可是由於分組2丟失了,致使2,3,4,5被所有重傳。
GBN中接收方直接丟棄失序分組,簡單可是資源浪費,SR協議就是爲了解決浪費。
解決浪費的核心就是不丟棄失序分組。可是做爲接收方,傳輸層要保證按序把數據傳輸給上層的應用層,因此相比GBN,SR最大的改造是在接受方增長和緩存。做爲發送方,SR在窗口內也有亂序的已經確認的數據分組。
接收方緩存了正確接收可是亂序的數據。當ReceiveBase(指望的正確分組)到達時,數據會被交付給上層應用,同時接受窗口會移動。Receivebase=ReceiveBase+1
以上,滑動窗口的基本原理已經介紹完畢,經過對比發現,無論時GNB仍是SR,爲了保證數據不會亂序,都有一個共同特色: