網路協定大師班

由 20 年資深網路架構師帶您深入核心:ICMP / TCP / UDP

👨‍🏫 架構師開講

歡迎來到進階網路課程。很多學員只知道 ping 會有回應,或者知道看影片用 UDP,但作為架構師,我們必須理解這些協定在封包層級的行為。 今天我們不談死背,我會用我在業界 20 年的經驗,把這些生硬的協定變成你聽得懂的語言。

關鍵字: OSI L3/L4 三方交握 可靠性 vs 速度

一、核心概念 (Concept)

定義

網際網路控制訊息協定 (Internet Control Message Protocol)。用於在 IP 網路上傳送控制訊息,提供錯誤報告與網路診斷。

💡 生活化比喻:道路施工與路況回報員

ICMP 就像是高速公路上的「LED 告示牌」或「路況廣播」。它不運送貨物(不傳輸資料內容),而是告訴駕駛(傳送端):「前方橋樑斷裂 (Destination Unreachable)」或「施工改道 (Redirect)」。
Ping 就像是丟一顆網球出去,看它會不會彈回來,確認路通不通。

二、運作原理 (Mechanism)

  • 層級: 運作於 OSI 模型第 3 層 (Network Layer),雖然它被封裝在 IP 封包內,但它被視為 IP 的一部分。
  • 關鍵標頭欄位:
    • Type (類型):例如 Type 8 是 Echo Request (Ping 請求),Type 0 是 Echo Reply (Ping 回應)。
    • Code (代碼):進一步說明 Type。例如 Type 3 (Destination Unreachable) 中,Code 1 代表 Host Unreachable。
  • 無連接性: ICMP 不需要建立連線,發送即結束。

三、架構視覺化 (Visuals)

下圖展示標準的 Ping 流程,請注意箭頭方向代表封包流向:

sequenceDiagram autonumber participant Source as 💻 用戶端 (Source) participant Router as 🛤️ 路由器 (Gateway) participant Dest as 🖥️ 伺服器 (Destination) rect rgb(240, 255, 240) Note over Source, Dest: 🟢 情況 A: 網路暢通 (Ping 成功)
Source->>Dest: ICMP Request (Type 8) ➡️ 請問你在嗎? Dest-->>Source: ICMP Reply (Type 0) ⬅️ 我在! end rect rgb(255, 240, 240) Note over Source, Router: 🔴 情況 B: 網路不通 (Destination Unreachable)
Source->>Router: ICMP Request (Type 8) ➡️ 我要找伺服器... Router--xDest: ❌ 路徑中斷 / 防火牆阻擋 Router-->>Source: ICMP Dest. Unreachable (Type 3) ⬅️ 此路不通 end

四、實務應用場景 (Use Case)

案例:網路連線故障排除 (Troubleshooting)

當使用者抱怨「連不上 ERP 系統」時,網管人員的第一步通常不是檢查程式碼,而是:

  1. ping 127.0.0.1:檢查自己網卡堆疊是否正常。
  2. ping Default Gateway:檢查是否能出大門。
  3. ping 8.8.8.8:檢查外網是否通暢。
  4. tracert (Windows) / traceroute (Linux):利用 ICMP TTL Time Exceeded 訊息來追蹤路徑上的每一跳。
優點: 簡單、快速、幾乎所有設備都支援,是診斷神器。
缺點: 易被防火牆阻擋 (ICMP Deny),可能被用於 DDoS 攻擊 (Ping of Death, ICMP Flood)。

一、核心概念 (Concept)

定義

傳輸控制協定 (Transmission Control Protocol)。一種連線導向 (Connection-oriented)、可靠的傳輸層協定。

💡 生活化比喻:掛號信或打電話

TCP 就像寄送「雙掛號信」。
1. 你寄出去 (SYN)。
2. 對方收到並簽收,郵差通知你 (SYN-ACK)。
3. 你確認收到回條 (ACK)。
這保證了信件絕對送達,如果沒送達,郵局(TCP)會負責重寄,直到確認對方收到為止。

二、運作原理 (Mechanism)

  • 層級: OSI 第 4 層 (Transport Layer)。
  • 可靠性機制:
    • 三方交握 (3-Way Handshake): 建立連線前的必經儀式。
    • 序列號 (Sequence Number): 確保資料順序正確,不會亂掉。
    • 確認應答 (ACK): 收到封包要喊「有!」,沒喊就當作沒收到,發送端會重傳 (Retransmission)。
    • 流量控制 (Flow Control): 透過 Window Size 告訴對方「我現在很忙,傳慢一點」。

三、架構視覺化 (Visuals)

圖中背景色塊區分了三個階段,請留意箭頭標示的數據流向:

sequenceDiagram autonumber participant C as 💻 客戶端 (Client) participant S as 🖥️ 伺服器 (Server) rect rgb(235, 245, 255) Note over C, S: 🟢 第一階段:建立連線 (三方交握)
C->>S: SYN (Seq=x) ➡️ 哈囉,我想連線 S-->>C: SYN, ACK (Seq=y, Ack=x+1) ⬅️ 收到了,我也想連,這是我的號碼 C->>S: ACK (Seq=x+1, Ack=y+1) ➡️ 好,那我們開始吧 end Note right of C: ✅ 連線建立 (ESTABLISHED)
rect rgb(255, 250, 240) Note over C, S: 🔵 第二階段:資料傳輸 (可靠保證)
C->>S: Data (HTTP Request) ➡️ 請求網頁資料 S-->>C: ACK ⬅️ 收到請求了 S->>C: Data (HTTP Response) ⬅️ 給你網頁資料 C-->>S: ACK ➡️ 收到資料了 end rect rgb(255, 240, 245) Note over C, S: 🔴 第三階段:斷開連線 (四次揮手)
C->>S: FIN ➡️ 我講完了,要掛電話了 S-->>C: ACK ⬅️ 知道了,請稍等... S->>C: FIN ⬅️ 好,我也講完了 C-->>S: ACK ➡️ 好的,拜拜 end

四、實務應用場景 (Use Case)

案例:銀行交易資料傳輸 / 網頁瀏覽 (HTTP/HTTPS)

當你在轉帳時,絕對不能發生「封包掉了就不見了」這種事。TCP 保證每一個位元都準確無誤地到達。

優點: 高可靠性、資料完整、有序、擁塞控制避免網路癱瘓。
缺點: 標頭大 (20 Bytes)、建立連線慢、即時性較差 (重傳機制導致延遲)。

一、核心概念 (Concept)

定義

使用者資料包協定 (User Datagram Protocol)。一種非連線導向 (Connectionless)、盡力傳送 (Best-effort) 的傳輸層協定。

💡 生活化比喻:廣播或平信

UDP 就像「村長廣播」或是「丟紙飛機」。
村長拿著麥克風喊話,他只負責喊出去,不管你聽不聽得清楚,也不管你有沒有在聽。
講求的是「快」和「即時」,漏聽一兩個字通常不影響整體理解。

二、運作原理 (Mechanism)

  • 層級: OSI 第 4 層 (Transport Layer)。
  • 輕量化設計:
    • 無連線 (Connectionless): 發送前不需要握手,直接把資料丟出去。
    • 無狀態 (Stateless): 不追蹤封包順序,不負責重傳。
    • 低開銷 (Low Overhead): 標頭只有 8 Bytes (TCP 是 20 Bytes),處理速度極快。

三、架構視覺化 (Visuals)

UDP 的流程非常單純,沒有握手階段,就是單向持續發送:

sequenceDiagram autonumber participant Sender as 📹 直播主 (Sender) participant Receiver as 📺 觀眾 (Receiver) rect rgb(255, 248, 240) Note over Sender, Receiver: ⚡ 快速傳輸模式 (無須等待 ACK)
Sender->>Receiver: UDP Datagram (影像 Frame 1) ➡️ Sender->>Receiver: UDP Datagram (影像 Frame 2) ➡️ Sender-xReceiver: UDP Datagram (影像 Frame 3 - 遺失) ❌ Note right of Receiver: 沒收到就算了,畫面小卡頓不影響
Sender->>Receiver: UDP Datagram (影像 Frame 4) ➡️ end

四、實務應用場景 (Use Case)

案例:即時視訊會議 (Zoom/Teams) / 語音通話 (VoIP)

在視訊會議中,畫面偶爾馬賽克 (掉封包) 是可以接受的。但如果為了補救那個馬賽克而讓畫面停頓 3 秒 (TCP 重傳),會議就開不下去了。
另外,DNS 查詢DHCP 也常使用 UDP,因為請求很短,不需要建立複雜連線。

優點: 速度快、延遲低、消耗資源少。
缺點: 不可靠、無順序保證、無擁塞控制 (容易把頻寬塞爆)。

🎓 架構師隨堂測驗

請嘗試回答下列問題,點擊按鈕查看解析。

Q1. 哪一個協定在傳輸資料前,必須先進行「三方交握」?

  • UDP
  • ICMP
  • TCP
  • IP

Q2. 當我們使用 Ping 指令測試網路連通性時,底層使用的是哪種協定?

  • TCP Port 80
  • UDP Port 53
  • ICMP
  • ARP

Q3. 在 VoIP (網路語音) 或 直播應用中,通常首選哪種傳輸層協定?為什麼?

  • TCP,因為聲音不能斷斷續續。
  • UDP,因為即使遺失少量封包,即時性比完整性更重要。
  • ICMP,因為可以隨時回報錯誤。
  • HTTP,因為通用性最高。

Q4. 下列關於 Header (標頭) 大小的敘述,何者正確?

  • TCP 與 UDP 的標頭一樣大。
  • TCP 標頭最小為 20 Bytes,UDP 標頭固定為 8 Bytes。
  • UDP 標頭比 TCP 大,因為它要處理廣播。
  • ICMP 屬於 Layer 4,所以也有 Port Number。

Q5. 防火牆規則設定 `Deny Any` 後,為什麼 Ping 不到了?

  • 因為 TCP Port 7 被封鎖。
  • 因為 UDP 封包遺失。
  • 因為 ICMP 協定被防火牆阻擋。
  • 因為網路線被拔掉了。