可靠: 1. 傳輸數據的bit不會收到損壞或者丟失,而且所有數據都是按照其發送順序進行交付。
TCP是在不可靠的IP的端到端網絡之上實現的可靠數據傳輸協議。
構造可靠數據傳輸協議
rdt1.0 假設信道可靠
就是單純的發送和接受
rdt2.0 假設信道可能出現比特差錯,但是信道不會丟包
rdt2.0 停止-等待協議。
肯定確認和否定確定: 使得接收方可以讓發送方知道哪些內容被正確接受,哪些內容接受有誤並因此需要重復。
在計算機網絡環境中,基於這樣重傳機制的可靠數據傳輸協議被稱為 自動重傳請求(Automatic Repeat reQuest,ARQ)協議。
ARQ協議需要三種協議功能來處理存在比特差錯的情況:
- 差錯檢測: 檢驗和(2B
- 接收方反饋:1bit, 1: ACK 0: NAK
- 重傳: 接收方收到有差錯的分組時,發送方將重傳該分組文。
rdt2.0的致命缺陷: 沒有考慮到ACK或NAK分組受損的可能性。
考慮處理受損ACK和NAK的三種可能性:
- 考慮人會怎么解決。如果ACK和NAK壞了,那么人都不知道這個是啥意思,好像就不是很好解決。
- 增加足夠的檢驗和bit,使得發送方不僅可以檢測差錯,還可以恢復差錯。
- 當發送方收到含糊不清的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延時到達。動作都是: 重傳。
為了實現基於時間的重傳機制, 需要一個 倒計數計時期,在一個給定的時間過期后,可中斷發送方。
發送方需要能做到:
- 每次發送一個分組時,便啟動一個定時器
- 響應定時器中斷
- 終止定時器
流水線可靠數據傳輸協議
rdt3.0的問題是: 是一個停等協議
特殊的性能問題的一個簡單解決方法是: 不以停等方式運行,運行發送方發送多個分組而無須等待。
流水等待協議造成了一些影響:
1.必須增加序號范圍,因為每個輸送中的分組,必須有一個唯一的序號,而且也許有多個在輸送中的未確認報文。
2.協議的發送方和接收方兩端也許不得不緩存多個分組。發送方最低限度應當能緩沖哪些已發送但是沒有確認的分組。接收方也許需要緩存那些已正確接受的分組。
3.所需序號范圍和對緩沖的要求取決於數據傳輸協議如何處理丟失、損壞及延時過大的分組。
解決流水線的差錯恢復有兩種基本的方法: 回退N步(GBN)和選擇重傳(SR)
總結一下:
- 自動重傳協議是一種停止等待協議、信道利用率低。
rdt1.0假設信道是可靠的,就是單純的發送和接收數據報
rdt2.0假設信道不會丟包,但是會出現bit差錯,那么要保證可靠性,引入了:- ACK和NAK用於表示接受是否正確
- 檢驗和用於表示發送過程是否出現問題
- 重傳機制,檢驗和錯了
缺陷: 沒有考慮到ACK報文發生錯誤的情況,解決方法: - 加更多的檢驗和字段,妄圖去恢復
- 收到的這個ACK不是我要求的,那么我就去重傳它,帶來了冗余問題
解決冗余問題-> 增加sequence字段,代表接受的是不是上一個我發送的,還是重復發送的
rdt3.0假設信道可能出現丟包、也可能出現bit差錯,為了保證可靠性,引入了: - 計時器->只要在限定的時間內,沒有收到我要的ACK包,那么我就去重傳這個數據報。
那么需要做到: - 每一個分組都有一個計時器
- 能夠響應計時器的中斷
- 終止計時器
- 為了解決信道率利用低的問題: 引入了流水線可靠協議。
不以停等方式去運行,發送方可以發送很多個數據報而無須等待。
也帶來了一些問題:- 序號范圍
- 發送方和接收方需要去維護緩存
- 序號范圍與緩存大小取決於數據傳輸協議。
為了解決流水線可靠協議帶來的問題(差錯),一般有兩種處理方式:1 GBN(回退N步), 2 SR(選擇重傳)