1. 程式人生 > >可靠資料傳輸原理

可靠資料傳輸原理

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中顯式告知所確認的分組
    • 需要定時器

Rdt 3.0傳送方FSM

這裡寫圖片描述

Rtd3.0示例

這裡寫圖片描述

這裡寫圖片描述

Rdt 3.0效能分析

這裡寫圖片描述

Rdt 3.0: 停等操作

這裡寫圖片描述