TCP- 自動重傳協議(rdt1.0、rdt2.0、rdt3.0)、流水線


可靠: 1. 傳輸數據的bit不會收到損壞或者丟失,而且所有數據都是按照其發送順序進行交付。
TCP是在不可靠的IP的端到端網絡之上實現的可靠數據傳輸協議。

構造可靠數據傳輸協議

rdt1.0 假設信道可靠

就是單純的發送和接受

rdt2.0 假設信道可能出現比特差錯,但是信道不會丟包

rdt2.0 停止-等待協議。
肯定確認和否定確定: 使得接收方可以讓發送方知道哪些內容被正確接受,哪些內容接受有誤並因此需要重復。
在計算機網絡環境中,基於這樣重傳機制的可靠數據傳輸協議被稱為 自動重傳請求(Automatic Repeat reQuest,ARQ)協議。
ARQ協議需要三種協議功能來處理存在比特差錯的情況:

  1. 差錯檢測: 檢驗和(2B
  2. 接收方反饋:1bit, 1: ACK 0: NAK
  3. 重傳: 接收方收到有差錯的分組時,發送方將重傳該分組文。

rdt2.0的致命缺陷: 沒有考慮到ACK或NAK分組受損的可能性。
考慮處理受損ACK和NAK的三種可能性:

  1. 考慮人會怎么解決。如果ACK和NAK壞了,那么人都不知道這個是啥意思,好像就不是很好解決。
  2. 增加足夠的檢驗和bit,使得發送方不僅可以檢測差錯,還可以恢復差錯。
  3. 當發送方收到含糊不清的ACK和NAK分組時,只需重傳當前數據分組即可。 =>這種方法在發送方到接收方的信道中引入了 冗余分組
    冗余分組的根本困難在於接收方不知道它上次所發送的ACK或NAK是否被正確的接收到。
    為了解決冗余分組的問題: 是在數據分組中添加一個新的字段,讓發送方對其數據分組編號,即將發送數據分組的序號(sequence number)放在該字段。

rdt2.1 增加了sequence

發送方: 感覺很相似,就是多了一個sequence代表0或者1,然后會有相應的兩組狀態。

接收方: 也是一個接受0,一個接受1,成功之后變成另外一個狀態

rdt3.0 信道上不光可能出現bit出錯,也可能丟包

rdt3.0 比特交替協議
rdt2.2已經使用的技術:使用檢驗和、序號、ACK分組和重傳。這里解決丟包問題是讓 發送方負責監測和恢復丟包工作。
假設發送方傳輸一個數據分組,該分組丟失或者接收方對該分組的ACK發送了丟失。在這兩種情況下,發送方都收不到應當到來的接收方的響應。
如果發送方願意等待足夠長的時間以便確定分組已經丟失,則它只需要重傳該數據分組即可。
實踐中對於等待時間采取的方法是: 發送方明智地選擇一個時間值,以判定可能發送了丟包。
如果在這個時間內沒有收到ACK,則重傳該分組。那么之前的分組可能會晚到,這樣也會引入冗余分組的概念。
發送方不知道是數據分組丟失、ACK丟失、或者只是該分組或者ACK延時到達。動作都是: 重傳。
為了實現基於時間的重傳機制, 需要一個 倒計數計時期,在一個給定的時間過期后,可中斷發送方。
發送方需要能做到:

  1. 每次發送一個分組時,便啟動一個定時器
  2. 響應定時器中斷
  3. 終止定時器

流水線可靠數據傳輸協議

rdt3.0的問題是: 是一個停等協議
特殊的性能問題的一個簡單解決方法是: 不以停等方式運行,運行發送方發送多個分組而無須等待。
流水等待協議造成了一些影響:
1.必須增加序號范圍,因為每個輸送中的分組,必須有一個唯一的序號,而且也許有多個在輸送中的未確認報文。
2.協議的發送方和接收方兩端也許不得不緩存多個分組。發送方最低限度應當能緩沖哪些已發送但是沒有確認的分組。接收方也許需要緩存那些已正確接受的分組。
3.所需序號范圍和對緩沖的要求取決於數據傳輸協議如何處理丟失、損壞及延時過大的分組。

解決流水線的差錯恢復有兩種基本的方法: 回退N步(GBN)和選擇重傳(SR)

總結一下:

  1. 自動重傳協議是一種停止等待協議、信道利用率低。
    rdt1.0假設信道是可靠的,就是單純的發送和接收數據報
    rdt2.0假設信道不會丟包,但是會出現bit差錯,那么要保證可靠性,引入了:
    1. ACK和NAK用於表示接受是否正確
    2. 檢驗和用於表示發送過程是否出現問題
    3. 重傳機制,檢驗和錯了
      缺陷: 沒有考慮到ACK報文發生錯誤的情況,解決方法:
    4. 加更多的檢驗和字段,妄圖去恢復
    5. 收到的這個ACK不是我要求的,那么我就去重傳它,帶來了冗余問題
      解決冗余問題-> 增加sequence字段,代表接受的是不是上一個我發送的,還是重復發送的
      rdt3.0假設信道可能出現丟包、也可能出現bit差錯,為了保證可靠性,引入了:
    6. 計時器->只要在限定的時間內,沒有收到我要的ACK包,那么我就去重傳這個數據報。
      那么需要做到:
    7. 每一個分組都有一個計時器
    8. 能夠響應計時器的中斷
    9. 終止計時器
  2. 為了解決信道率利用低的問題: 引入了流水線可靠協議。
    不以停等方式去運行,發送方可以發送很多個數據報而無須等待。
    也帶來了一些問題:
    1. 序號范圍
    2. 發送方和接收方需要去維護緩存
    3. 序號范圍與緩存大小取決於數據傳輸協議。
      為了解決流水線可靠協議帶來的問題(差錯),一般有兩種處理方式:1 GBN(回退N步), 2 SR(選擇重傳)


免責聲明!

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



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