可靠資料傳輸原理
阿新 • • 發佈:2019-02-12
1 可靠資料傳輸概述
什麼是可靠?
不錯、不丟、不亂
可靠資料傳輸協議
- 可靠資料傳輸對應用層、傳輸層、鏈路層都很重要
- 網路Top-10問題
- 通道的不可靠特性決定了可靠資料傳輸協議(rdt)的複雜性
可靠資料傳輸協議基本結構:介面
可靠資料傳輸協議的設計
- 漸進地設計可靠資料傳輸協議的傳送方和接收方
- 只考慮單向資料傳輸
- 但控制資訊雙向流動
- 利用狀態機(Finite State Machine, FSM)刻畫傳輸協議
2 Rdt 1.0: 可靠通道上的可靠資料傳輸
- 底層通道完全可靠
- 不會發生錯誤(bit error)
- 不會丟棄分組
- 傳送方和接收方的FSM獨立
3 Rdt 2.0: 產生位錯誤的通道
- 底層通道可能翻轉分組中的位(bit)
- 利用校驗和檢測位錯誤
- 如何從錯誤中恢復?
- 確認機制(Acknowledgements, ACK): 接收方顯式地告知傳送方分組已正確接收
- NAK:接收方顯式地告知傳送方分組有錯誤
- 傳送方收到NAK後,重傳分組
- 基於這種重傳機制的rdt協議稱為ARQ(Automatic Repeat reQuest)協議
- Rdt 2.0中引入的新機制
- 差錯檢測
- 接收方反饋控制訊息: ACK/NAK
- 重傳
Rdt 2.0: FSM規約
4 Rdt 2.1
Rdt 2.0有什麼缺陷?
- 如果ACK/NAK訊息發生錯誤/被破壞(corrupted)會怎麼樣?
- 為ACK/NAK增加校驗和,檢錯並糾錯
- 傳送方收到被破壞ACK/NAK時不知道接收方發生了什麼,新增額外的控制訊息
- 如果ACK/NAK壞掉,傳送方重傳
- 不能簡單的重傳:產生重複分組
- 如何解決重複分組問題?
- 序列號(Sequence number): 傳送方給每個分組增加序列號
- 接收方丟棄重複分組
stop and wait:Sender sends one packet,then waits for receiver response。
Rdt 2.1: 傳送方, 應對ACK/NAK破壞
Rdt 2.1: 接收方, 應對ACK/NAK破壞
5 Rdt2.2
傳送方
- 為每個分組增加了序列號
- 兩個序列號(0, 1)就夠用,為什麼?
- 需校驗ACK/NAK訊息是否發生錯誤
- 狀態數量翻倍
- 狀態必須“記住”“當前”的分組序列號
接收方
- 需判斷分組是否是重複
- 當前所處狀態提供了期望收到分組的序列號
- 注意:接收方無法知道ACK/NAK是否被髮送方正確收到
Rdt 2.2: 無NAK訊息協議
我們真的需要兩種確認訊息(ACK + NAK)嗎?
- 與rdt 2.1功能相同,但是隻使用ACK
- 如何實現?
- 接收方通過ACK告知最後一個被正確接收的分組
- 在ACK訊息中顯式地加入被確認分組的序列號
- 傳送方收到重複ACK之後,採取與收到NAK訊息相同的動作
- 重傳當前分組
6 Rdt 3.0
如果通道既可能發生錯誤,也可能丟失分組,怎麼辦?
- ”校驗和 + 序列號 + ACK + 重傳”夠用嗎?
方法:傳送方等待“合理”時間
- 如果沒收到ACK,重傳
- 如果分組或ACK只是延遲而不是丟了
- 重傳會產生重複,序列號機制能夠處理
- 接收方需在ACK中顯式告知所確認的分組
- 需要定時器