小村軟體有限公司
TCP101

用圖解與練習理解 TCP

「看得到逾時的記錄,卻查不出下一步」「打開封包擷取,也不知道 seq 或 ack 的數字在說什麼」— TCP 明明天天在用,內部卻出乎意料地難以說清楚。本課程不要求把 TCP 死背下來,而是以能夠自己用序號與視窗的視角,追蹤封包擷取與故障記錄為目標。先用圖掌握整體樣貌,再透過各章途中的小題與手算一路確認前進。

圖解 → 手算 → 模擬器 → 案例演習 共 43 題 瀏覽器內評分 localStorage 儲存
所需時間
3〜4 小時
題目數
共 43 題
形式
7 章 + 小題 + 模擬器
費用
免費
在會遺失、打亂、重複的 IP 之上疊著 TCP 與 UDP,由 TCP 提供 3 項承諾的層級結構圖

IP 只承諾到「大概會送到」。疊在其上的 TCP 代替應用程式守住 3 項承諾。先把這個分工放在腦中,之後的每一章都會更容易閱讀。

本課程的特色

本文正下方就有小題
讀完馬上解 2〜3 題的構成,讓你不容易在「自以為懂了」的狀態下繼續前進。
親手計算 seq / ack
用小的數字實際計算序號與 ACK 號碼、視窗的剩餘量、cwnd 的成長,培養讀得懂封包擷取數字的感覺。
滑動視窗的模擬器
在第 4 章的模擬器中調整 RTT、視窗、頻寬,就能親眼確認「1 個 RTT 能送多少」與吞吐量上限如何變化。
瀏覽器內評分、無需註冊
全部 43 題都在瀏覽器內評分,結果只儲存在你瀏覽器的 localStorage。不會向伺服器傳送任何資料。

貫穿本課程的 3 項承諾

TCP 的機制看起來很多,但全部都是為了守住 3 項承諾之一的工具。隨著章節推進,支撐各項承諾的零件也會逐漸增加。

1. 一定送達 — 沒送到就會發現
送出的位元組都有編號,對方會回報「收到了哪裡」。沒有回報就重傳。(第 2〜3 章)
2. 按照順序
即使途中發生超車或重複,接收端也會依靠編號把原本的位元組序列排好再交給應用程式。(第 3 章、第 6 章)
3. 配合對方與網路的步調
不會比對方緩衝區的狀況(流量控制)與路徑壅塞的狀況(壅塞控制)兩者所允許的速度更快。(第 4〜5 章)

本課程的口訣:看到封包擷取或故障記錄時,別停下思考,先問自己 — 現在快被打破的,是送達的承諾?順序?還是步調的配合?

章節構成

學習訣竅

  1. 請按照本文 → 正下方的小題的順序進行。讀完立刻解題,比累積起來之後再解更容易記住。
  2. 第 3〜5 章的計算題不要靠心算,把位元組的編號與視窗的兩端寫在紙上。「讀得懂」封包擷取數字的感覺是從手上來的。
  3. 第 4 章的模擬器,請在解小題的前後都操作一次。「視窗 ÷ RTT」這條式子會變成身體記憶。
  4. 在第 7 章的案例題卡住時,回到對應章節複習 1〜2 輪就好,不需要整個重來。

開始前的前提

  • 只要有一點用任何語言寫過程式的經驗就足夠。不以網路的專業知識為前提。
  • 會乘法、除法與「位元組數的加法」,就能完成所有手算。
  • 知道 IP 位址是「指向目的地的住址」就沒問題。不會深入路由的細節。