傳輸層協定 (TCP vs UDP)

特性比較

特性 TCP UDP
連線方式 面向連線(三次握手) 無連線
可靠性 保證交付 盡力而為(可能丟包)
順序 維護順序 不保證
流量控制
壅塞控制
標頭大小 20–60 bytes 8 bytes
速度 因額外開銷較慢
典型場景 幾乎所有應用 串流、遊戲、VoIP

TCP:網際網路的主力

TCP 提供可靠的、有序的、有錯誤檢查的資料交付。

連線建立(三次握手)
  C ──SYN──► S
  C ◄─SYN-ACK── S
  C ──ACK──► S

資料傳輸(保證確認)
  C ──Data──► S
  C ◄──ACK──── S   ← 未收到 ACK 則重傳

連線中的流叫「串流(stream)」——有序、有狀態
面試預設

預設使用 TCP,大多數面試官假設你用 TCP,不需要特別說明。


UDP:快速但不可靠

UDP 在 IP 之上幾乎沒有額外功能。「向前衝、聽天命」。

應用程式收到 UDP 封包時,只知道來源/目的 IP 和 port,其餘是 binary blob。

適合 UDP 的條件(需同時滿足):

  1. 低延遲至關重要
  2. 可以容忍偶爾丟包
  3. 不需要支援瀏覽器(或有瀏覽器替代方案)
瀏覽器的 UDP 限制

瀏覽器目前只能透過 WebRTC 使用 UDP,無法直接使用原生 UDP。
設計方案若依賴 UDP 但需要支援瀏覽器用戶,必須提供替代路徑(如批次 HTTP 串流)。


QUIC:現代化的 TCP

QUIC 是建立在 UDP 之上的新協定(HTTP/3 使用),目標是結合 TCP 的可靠性和 UDP 的效能。

面試策略

QUIC 和 HTTP/3 的了解能讓注重效能的面試官印象深刻,但大多數情況不需要主動提出。把 QUIC 視為「更好版本的 TCP」即可。


決策流程

需要使用哪個協定?
    │
    ▼
低延遲至關重要 + 可容忍丟包 + 無需瀏覽器支援?
    │
   No  ──► TCP(預設)
    │
   Yes
    │
    ▼
需要瀏覽器支援?
    │
   Yes ──► WebRTC(唯一可用的瀏覽器 UDP)
    │
   No  ──► 原生 UDP