信道本身是不可靠的,可靠性傳輸就是在傳輸層在不可靠的信道基礎上實作可靠性傳輸,
網路信道不可靠的點
1. 資料在傳輸的程序中有可能回受損(本文主要說明這個問題)
2. 資料在傳輸的程序中有可能回丟失(下一篇文章說明)
傳輸層的可靠性協議就是解決上面兩個問題的
服務模型

從應用層的角度來,整個傳輸是可靠的,傳輸層屏蔽了不可靠的網路層
實作模型

rdt:reliable data transfer,udt:unreliable data transfer
傳輸層發布可靠傳輸的api給應用層,但是呼叫網路層的不可靠服務,通過可靠資料傳輸協議最終實作可靠傳輸,
可靠資料傳輸第一版
問題: 資料在傳輸程序中是受損,接收方
方案:停等協議(資料發出去后發送方等待發送方反饋,等反饋沒有問題后再進行下一組資料的傳輸)
ARQ(Automatic Repeat reQuest),自動重傳,如果資料受損,則重新再傳一次,
停等協議示意圖

實作ARQ需要實作三個功能:
- 差錯檢測:需要一種機制能夠讓接收方檢測資料是否正確,比如對發送的資料加入校驗和(checksum)
- 接收方反饋:當接收方做完差錯檢測后,要告知發送方資料是否OK,如果OK,發送ack(acknowledge),如果有損,則發送NAK(negative-acknowledge)
- 重傳:當發送方收到NAK以后,則對資料進行重傳

第一版的問題
接收方的ACK或者NAK如果有損,發送方無法識別怎么辦?
可靠資料傳輸第二版
針對第一版的問題,最簡單的辦法是:如果發送方無法識別也直接進行重傳,
這又會引入另外一個問題,接收方有可能已經正確收到了之前的資料,再次重傳回導致接收方無法區分當前資料是重新傳送的還是新資料,
所以需要給資料增加一個唯一標識:序列號,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/181274.html
標籤:其他
上一篇:CF 1423 K. Lonely Numbers(數學 + 思維)
下一篇:Redis事務
