可靠數據傳輸基本原理(3)-滑動窗口

前兩篇文章分別解釋了可靠性傳輸要解決的兩件事情:緩存

1:數據受損怎麼辦網絡

2:數據丟失怎麼辦性能

可靠性傳輸核心解決辦法:

1:停等協議(等前一個完全確認發送成功後再發送下一組數據)spa

2:重傳(若是傳輸受損,重傳;若是傳輸丟失,重傳)blog

經過以上兩個方法外加序列號,校驗等已經實現了可靠性傳輸。可是有性能問題資源

停等協議的弊端

 

信道利用率U=傳輸時間 /傳輸時間 + RTT。當RTT很大是,傳輸效率會很是低下。效率

把信道假設爲一條高速公路,停等相似於前一輛車到達終點後下一輛車才能開始進入高速公路,效率可想而知。原理

引入流水線

再也不以停等的形式進行發送,而是一次傳輸多個,下圖爲例,一次性傳輸三組數據使得信道的利用率提升了三倍。方法

 

 一樣用高速公路做爲例子,車子一輛跟着一輛進入高速公路。im

停等和流水線運行時狀態

 

流水線須要面對的問題

1. 更多的序號,停等0,1就夠了。

2.發送的過程當中可能會亂序,發送方最低限度須要緩存已經發送可是沒有確認的數據分組,接收方也許也要緩存已經收到的數據。

滑動窗口基本模型

下圖爲一個基本的滑動窗口在發送端的模型

說明

  • 窗口大小爲N(窗口的大小在TCP中是在握手的階段接收方告訴發送方的,後續隨着網絡狀況和接收方讀取的速度,會實時進行調整)
  • Base下一個等待確認的序號。
  • NextSeqNum爲下一個即將要發送的序號。

行爲

  • 發送方緩存了已經發送可是沒有確認的數據分組(由於若是超時沒有確認,須要從新傳遞這些數據)
  • 當Base對應的序號確認後,窗口向右滑動一格,同時把序號爲NextSeqNum對應的數據分組發送出去:Base=Base+1,NextSeqNum=NextSeqNum+1.

滑動窗口之回退N步-GNB(Go-Back-To-N)

  • 累計確認:收到一個序號爲n的ack,表明接收方已經收到了序號爲n以及n之前的所有分組
  • 超時,若是發生超時,發送方從新傳遞全部已經發送可是還未確認的分組
  • 接收方丟棄全部失序的分組,若是接收方期待的是N,若是N+1到了,則直接丟棄。

示意圖

GBN的好處就是簡單,接收方只須要維護一個期待的序列號便可。

最大的問題是資源浪費,上圖能夠看出即便分組3,4,5被正確接受了,可是由於分組2丟失了,致使2,3,4,5被所有重傳。

滑動窗口之選擇重傳-SR(Selective Repeat)

GBN中接收方直接丟棄失序分組,簡單可是資源浪費,SR協議就是爲了解決浪費。

解決浪費的核心就是不丟棄失序分組。可是做爲接收方,傳輸層要保證按序把數據傳輸給上層的應用層,因此相比GBN,SR最大的改造是在接受方增長和緩存。做爲發送方,SR在窗口內也有亂序的已經確認的數據分組。

接收方窗口

接收方緩存了正確接收可是亂序的數據。當ReceiveBase(指望的正確分組)到達時,數據會被交付給上層應用,同時接受窗口會移動。Receivebase=ReceiveBase+1

發送方窗口

 示意圖

以上,滑動窗口的基本原理已經介紹完畢,經過對比發現,無論時GNB仍是SR,爲了保證數據不會亂序,都有一個共同特色:

  • 發送方,只有發送Base序號的數據確認後,窗口才會移動
  • 接收方,只有接收Base序號的數據收到後,纔會把數據交給上層(GNB中,非Base序號的會丟棄。
相關文章
相關標籤/搜索