2017-02-10 可靠數據傳輸原理、可靠數據傳輸協議、自動重傳請求協議、停等協議、冗餘分組、比特交替協議、滑動窗口協議
《計算機網絡-自頂向下方法》(原書第6版)
3.4 可靠數據傳輸原理
可靠數據傳輸協議(reliable data transfer protocol)。由於可靠數據傳輸協議的下層協議也許是不可靠的,因此這是一項困難的任務。
單向數據傳輸(unidirectional data transfer)即數據傳輸是從發送端到接收端的。
雙向數據傳輸(bidirectional data transfer)(即全雙工數據傳輸)
3.4.1 構造可靠數據傳輸協議
先假定發送的分組按其發送的順序被接收,且不丟失分組
1:經完全可靠信道的可靠數據傳輸
首先我們考慮最簡單的情況,即底層信道是完全可靠的。
有限狀態機(Finite-State Machine,FSM)
2:經具有比特差錯信道的可靠數據傳輸
肯定確認(positive acknowledgment)
否認確認(negative acknowledgment)
這些控制報文使得接收方可以讓發送方知道哪些內容被正確接收,哪些內容接收有誤並因此需要重複。在計算機網絡環境中,基於這樣重傳機制的可靠數據傳輸協議稱爲自動重傳請求(Automatic Repeat reQuest,ARQ)協議,這就需要差錯檢測、接收方反饋、重傳三個功能。
停等(stop-and-wait)協議:要等到上一個分組得到正確接收的確認後才能處理下一個分組。它存在一個致命的缺陷。尤其是我們沒有考慮到ACK或NAK分組受損的可能性。
考慮處理受損ACK和NAK的3種可能性
第一種:接收方對受損的ACK或NAK繼續做錯誤反饋,由於發出的錯誤反饋可能再次受損,這樣就有可能進入死循環。
第二種:增加足夠的檢驗和比特,使發送方不僅可以檢測差錯,還可以恢復差錯。對於會產生差錯但不丟失分組的信道,這就可以直接解決問題。
第三種:當接收方收到含糊不清的ACK或NAK分組時,只需重傳當前數據分組即可。這種方法在發送方到接收方的信道中引入了冗餘分組(duplicate packet)。冗餘分組的根本困難在於接收方不知道他上次所發送的ACK或NAK是否被髮送方正確的收到。因此他無法事先知道接收到的分組是新的還是一次重傳。
對於第三種情況,解決這個新問題的的簡單方法是在數據分組中添加一新字段,讓發送方對其數據分組編號,即將發送數據分組的序號(sequence number)放在該字段。
3.經具有比特差錯的丟包信道的可靠數據傳輸
冗餘數據分組(duplicate data packet)
從發送方的觀點來看,重傳是一種萬能靈藥。發送方不知道是一個數據分組丟失,還是一個ACK丟失,或者只是該分組或ACK過度延時。在所有這些情況下,動作是同樣的:重傳。
因爲分組序號在0和1之間交替,因此rdt3.0有時被稱爲比特交替協議(alternating-bit protocol)
3.4.2 流水線可靠數據傳輸協議
流水線(pipelining)流水線技術對可靠數據傳輸協議帶來如下影響:
1:必須增加序號範圍,因爲每個輸送中的分組(不計算重傳的)必須有一個唯一的序號,而且也許有多個在輸送中未確認的報文。
2:協議的發送方和接收方兩端必須緩存多個分組。發送方最低限度應當能緩衝那些已發送但是沒有確認的分組。如下討論,接收方或許也需要緩存那些已正確接收的分組。
3:所需序號範圍和對緩存的要求取決於數據傳輸協議如何處理丟失、損壞及延時過大的分組。解決流水線差錯恢復有兩種基本方法是:回退N步(Go-Back-N,GBN)和選擇重傳(Selective Repeat,SR)。
3.4.3 回退N步
窗口長度(window size),滑動窗口協議(sliding-window protocol)
序號空間可被看作是一個長度爲2的k次方的環,其中序號2的k次方減1緊接着序號0,TCP有一個32比特的序號字段,其中的TCP序號是按字節流中的字節進行計數的,而不是按分組計數。
基於事件的編程(event-based programming)
3.4.4 選擇重傳
GBN中單個分組的差錯就能夠引起GBN重傳大量分組,許多分組根本沒有必要重傳。
1:可靠數據傳輸協議(reliable data transfer protocol)、2:單向數據傳輸(unidirectional data transfer)、3:雙向數據傳輸(bidirectional data transfer)、4:有限狀態機(Finite-State Machine,FSM)、5:肯定確認(positive acknowledgment)、6:否認確認(negative acknowledgment)、7:自動重傳請求(Automatic Repeat reQuest,ARQ)協議、8:停等(stop-and-wait)協議、9:冗餘分組(duplicate packet)、10:分組的序號(sequence number)、11:比特交替協議(alternating-bit protocol)、12:流水線(pipelining)、13:窗口長度(window size)、14:滑動窗口協議(sliding-window protocol)、15:基於事件的編程(event-based programming)