電腦網路與 Internet 通訊

單元 07 從遺失到可靠傳輸

學習目標與問題

先讀單元 02、06。你應能用狀態機解釋序號、ACK、逾時與重傳,計算 stop-and-wait 的效率,並比較 Go-Back-N 與 Selective Repeat。如何在可能遺失或重複的通道交付一次正確訊息?

7.1 偵測與恢復是不同責任

校驗可偵測部分資料損壞,卻不能恢復遺失內容;普通 checksum 也不抵抗惡意修改。ACK 回報接收狀態,序號讓接收端辨認重複與順序,計時器讓傳送端在沒有進展時再傳。可靠性需求必須說明「對傳輸接收端交付」還是「對業務執行一次」。後者往往還要交易 ID、持久化與去重。

7.2 Stop-and-wait 狀態機

傳送端先傳一個資料單位,再等待對應 ACK。接收端收到新序號就交付並 ACK;重複序號只重 ACK,不再次交付。資料遺失會使傳送端逾時;ACK 遺失也會逾時,重複資料由接收端去除。收到任何 ACK 就前進是不正確的:舊 ACK 可能延遲到達。

事件傳送端接收端
資料 0 到達等 ACK 0交付 0,回 ACK 0
ACK 0 遺失逾時重傳 0收到重複 0,不重複交付,重 ACK
有效 ACK 0 到達前進到資料 1準備接收下一序號

交替 bit 只用 0、1,需假設通道 FIFO、不重排,且舊資料不會存留任意久,否則重用序號會產生歧義。實際協定使用更大序號空間與生命週期規則。

7.3 完整效率例題

無遺失,資料長 1000 bytes、速率 10 Mb/s,資料傳送需 0.8 ms;假設從資料最後一個 bit 送出到 ACK 收齊需 40 ms,且 ACK 傳送開銷已包含在這 40 ms。每次週期 40.8 ms,goodput=8000/0.0408=約 196 kb/s,鏈路利用率約 1.96%。

視窗允許多個單位在途,就能讓等待時間和後續傳送重疊。若理想視窗 W 個同長單位,粗略上界為 min(R, W*L/(RTT+L/R)),L 以 bits 計量,此處 RTT 採上述等待定義。實際 TCP 的 RTT 取樣及視窗以 bytes 計量,本例不能直接替代 TCP 模型。

7.4 滑動視窗與兩種恢復方法

Go-Back-N 教學模型以累積 ACK,接收端只按序接收;缺口後的資料可丟棄,逾時重傳缺口起仍未確認的一段。Selective Repeat 可快取失序資料,只重傳缺少的單位,代價是更多狀態與序號管理。對於環狀序號空間大小 M,典型 Selective Repeat 模型要求視窗不超過 M/2,避免新舊視窗重疊。

例:送 0、1、2、3,1 遺失。GBN 接收端先交付 0,後續 2、3 不在預期位置;SR 可留住 2、3,重傳 1 到齊後按序交付。不要把教學 GBN/SR 完全等同於現代 TCP;TCP 累積 ACK 可搭配 SACK 和不同遺失恢復機制。

7.5 逾時與證據

逾時太短產生不必要重傳,太長使遺失恢復慢。延遲變動、重新排序、ACK 延遲和真正遺失可能產生相似觀察。重傳次數不是直接的線路丟包率。L06 是確定性的離散回合模型,故障規則由我們指定,這讓因果可重現,卻不能量測真實 TCP 的 RTO 或壅塞演算法。

實驗、習題與檢核

L02 比較不同視窗的 W/RTT 近似上界;它不含本節額外 L/R 的週期模型;L06 在資料和 ACK 各遺失一次時追蹤交付與重傳。

  1. ACK 遺失為何可能產生重複資料?接收端如何避免重複交付?
  2. 將例題等待時間改為 80 ms,求理想 goodput。
  3. 序號空間 16,典型 SR 的最大視窗是多少?理由為何?
  4. 「可靠串流」與「扣款剛好一次」需要的保障有何差別?

檢核:能把 sender、receiver 的狀態分開,指出 ACK 與 timer 如何改變狀態。延伸來源:RFC 2018(TCP SACK)、RFC 6298(RTO)。本章 ARQ 例題為教學模型。