L06 ARQ 與重複交付
本實驗使用的程式:models.py。文中指令以課程根目錄為工作目錄;建議下載教材套件,解壓後在 computer-networking 目錄執行。
目的、環境與預測
對應單元:07、08。Python 3.10 以上,標準函式庫;在課程根目錄執行。資料性質:離線模型或人工資料分析。
本例採逐單位 ACK 的 Selective Repeat(SR),不是 Go-Back-N;以離散回合、無限接收 buffer 及一回合 timer 簡化。
sender 依序傳送序號 0–4 共五個資料單位,起始序號為 0,視窗為三個單位。在序號 1 首傳遺失、ACK 0 首回遺失的條件下,先畫回合表。
執行與紀錄
python3 labs/models.py L06
Windows 可用 py -3 替換 python3。將輸出儲存,記錄日期、Python 版本、參數與預測。
| 條件 | 執行前預測 | 實際輸出 | 差異與解釋 |
|---|---|---|---|
| 原始設定 | 自行填寫 | 貼關鍵欄位 | 寫出依據 |
| 修改設定 | 自行填寫 | 貼關鍵欄位 | 一次改一個變因 |
完成預測與紀錄後,再到解答冊的「預期輸出」核對。
變更與判讀
以 python3 labs/models.py L06 --no-ack-loss(或 --no-data-loss)去掉一項故障規則,比較重傳次數;以 --window 1 比較回合數,回合不是毫秒。
為何 ACK 遺失的 0 仍可在 receiver 交付?這個模型沒有包含哪幾項 TCP 功能?
驗證範圍與提交
輸出是明示假設下的模型或人工資料;不能當成真實封包擷取、OS 核心狀態或 Internet 量測。
提交預測、原始/修改輸出、兩個判讀答案與模型限制。評分:預測 20%、紀錄 30%、推理 35%、限制 15%。標準推理見解答冊;輸出中的埠與真實計時可以變動。