可靠數據傳輸基本原理(2)-解決數據丟失問題


網絡信道不可靠的點

1. 數據在傳輸的過程中有可能會受損(上一篇文章說明了如何解決這個問題)

2. 數據在傳輸的過程中有可能會丟失(本文說明如何解決這個問題)

傳輸層的可靠性協議就是解決上面兩個問題的。

消除NAK,用ACK代替NAK

在上一篇文章中如果接收方檢測數據有失真,直接回復一個NAK給發送方,當發送方收到NAK之后對數據進行重新傳遞,從而實現可靠性傳輸,如下圖所示。

 

 

在上一篇文章的最后對每一次發送的數據引入了序列號,在序列號的基礎上可以用ACK來代替NAK,徹底在數據傳輸過程中移除NAK。

  • 如果接收方檢查數據沒有損失,則直接ack當前數據的序列號
  • 如果接收方檢查數據有損失,則直接ack上次成功接受的數據的序列號。
    •   發送方如果收到的ack序列號和期望的不一致,則說明數據有損,直接重傳

具體如下圖所示。

數據在傳輸過程中丟失怎么處理

信道不穩定,或者路由器的緩存滿了等都有可能導致傳輸的數據丟失。、

具體到可靠性傳輸有兩種類型的數據丟失:

  1. 數據本身丟失
  2. ACK丟失

這兩種丟失都可以交給發送方進行處理:重傳。

具體實現是在發送方設置一個定時器,當數據發送出去后,開啟定時器,在給定的實際內(比如一個RTT)如果沒有收到ACK,則認為超時,這個時候發送方啟動重傳。

數據本身丟失

數據再傳輸過程中丟失了,超時沒有收到ack后發送方進行重新傳遞。

ACK丟失

ack丟失對於發送方來說和數據本身丟失是一樣的,都是重新傳送。

但是對於接收方來說,因為已經收到了數據,需要做冗余檢測,只需要簡單返回ack即可。

提前超時

提前超時,對於接收方來說,需要做冗余檢測 ,只需返回ack。對發送方,也會收到一個冗余的ack,直接忽略。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM