B02 · 網路與協議 詳細 ROADMAP
計畫文件,不會被 Quartz 渲染。
回主 roadmap → backend/ROADMAP.md
章節目標
後端工程師必須懂網路。不是記協議名字,是理解「封包從使用者鍵盤到你 handler 的完整路徑」。涵蓋 TCP/UDP / HTTP 三代演進 / DNS / TLS / WebSocket / gRPC / MQ 協議。讓讀者在 debug 連線問題、設計 API、選 real-time 方案時知道每一層在幹嘛。
🌱 基本介紹
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 01 | 後端網路是什麼 | 01-what-is-backend-network | 🌱 | 從 socket 到 HTTP handler 的完整堆疊、OSI 7 層對應實際工作 |
❓ 為什麼需要
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 02 | 為什麼不懂 TCP/UDP 會踩爆 | 02-why-tcp-udp-matters | 🌱 | Nagle / delayed ack 造成的延遲、TIME_WAIT、connection pooling 錯誤設定、UDP 丟包你不 retry 誰 retry |
| 03 | 為什麼要懂 HTTP 三代演進 | 03-why-http-evolution-matters | 🌱 | HTTP/1.1 的 head-of-line blocking、HTTP/2 多工但還有 TCP-level blocking、HTTP/3 over QUIC 真解決、影響 API 設計策略 |
| 04 | 為什麼不懂 DNS 會被半夜 Page 起床 | 04-why-dns-matters | 🌱 | DNS 快取失效、TTL 誤設、短 TTL 太多查詢、DNS pollution、Resolver 選擇的實際影響 |
🕰️ 演進
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 05 | HTTP 演進史 | 05-http-evolution | 🌱 | HTTP/0.9 → 1.0 → 1.1(keep-alive、pipelining)→ 2(binary / stream / push)→ 3(QUIC / UDP-based) |
| 06 | TLS 演進 | 06-tls-evolution | 🌱 | SSL 2/3 → TLS 1.0/1.1/1.2 → 1.3;handshake 從 2-RTT 到 1-RTT / 0-RTT;cipher suite 汰換 |
| 07 | Real-time 協議演進 | 07-realtime-protocol-evolution | 🌱 | Polling → Long Polling → SSE → WebSocket → WebTransport(HTTP/3 based) |
| 07-2 | 協議演進的驅動力(每個協議解了什麼痛點) | 07-2-protocol-evolution-drivers | 🌱 | 匯整視角:TCP 解封包遺失/亂序、HTTP/2 解 head-of-line blocking、HTTP/3 解 TCP-level HOL、TLS 1.3 解 RTT 延遲、WebSocket 解 polling 浪費、SSE 解雙向但簡單需求、gRPC 解 JSON 效能與型別、QUIC 解連線遷移。每個協議都是前代痛點的解法,不是憑空出現 |
🧠 知識型
F02-A 傳輸層
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 08 | TCP 基礎與三次握手 | 08-tcp-basics | 🌱 | SYN/SYN-ACK/ACK、狀態機(LISTEN / ESTABLISHED / TIME_WAIT)、Nagle / delayed ack / slow start |
| 09 | UDP 基礎 | 09-udp-basics | 🌱 | 無連線、無可靠傳輸、適用場景(DNS / QUIC / 遊戲 / 影音) |
| 10 | Connection Pool 原理 | 10-connection-pool | 🌱 | 為什麼要池化、idle connection 管理、keepalive、pool 大小怎麼算 |
F02-B 應用層協議
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 11 | HTTP/1.1 詳細 | 11-http1-1-deep | 🌱 | Request / Response line、header、body、chunked transfer、keep-alive、Connection / Upgrade header |
| 12 | HTTP/2 核心機制 | 12-http2-core | 🌱 | Binary framing、stream、multiplexing、HPACK header 壓縮、server push(為何後來被廢) |
| 13 | HTTP/3 / QUIC | 13-http3-quic | 🌱 | 為什麼從 TCP 換到 UDP、connection migration、0-RTT、跟 CDN 整合 |
| 14 | gRPC 深入 | 14-grpc-deep | 🌱 | Protobuf、4 種 streaming(unary / server / client / bidi)、HTTP/2 基礎、為什麼不用 REST |
| 15 | GraphQL vs REST vs gRPC 選型 | 15-api-protocol-selection | 🌱 | 三者的適用場景、混用策略、Gateway 整合 |
| 15-2 | 通訊協議選型(微服務) | ⛔️ micro-service/58-communication-protocols | 🌿 | 跨系列 |
F02-C 基礎設施協議
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 16 | DNS 運作機制 | ⛔️ infra/01-network-dns | 🌿 | 跨系列 |
| 17 | TLS 基礎 | ⛔️ infra/02-reverse-proxy-tls | 🌿 | 跨系列 |
| 18 | TLS 1.3 深入 | 18-tls-1-3-deep | 🌱 | Handshake 簡化、Forward Secrecy、cipher suite 選擇、mTLS 用途 |
| 19 | HTTPS 從頭到尾 | 19-https-end-to-end | 🌱 | ClientHello → Certificate → Key Exchange → Application Data;SNI、OCSP stapling |
F02-D Real-time 通訊
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 20 | WebSocket 深入 | ⛔️ fundamentals/websocket / micro-service/26-websocket-sse | 🌿 | 跨系列 |
| 21 | Server-Sent Events | 21-sse | 🌱 | HTTP 基礎單向推送、reconnect、跟 WebSocket tradeoff、AI chat streaming 為什麼愛用 SSE |
| 22 | WebTransport(HTTP/3 based) | 22-webtransport | 🌱 | 下一代 real-time;WebSocket + UDP datagram 合體;狀態:2026 各瀏覽器支援度 |
| 23 | Long Polling 跟它的坑 | 23-long-polling | 🌱 | 為什麼還有場景要用(老瀏覽器、proxy 限制)、實作陷阱 |
F02-E 訊息協議
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 24 | AMQP(RabbitMQ 用) | 24-amqp | 🌱 | Exchange / Queue / Binding、routing key、ack 機制 |
| 25 | MQTT(IoT 場景) | 25-mqtt | 🌱 | Publish / Subscribe、QoS 0/1/2、retained message、跟 AMQP 定位差異 |
| 26 | Kafka Protocol | 26-kafka-protocol | 🌱 | Log-based、partition / offset、跟 RabbitMQ 心智模型差異 |
🔧 小實作注意事項
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 27 | 用 Wireshark 看 TCP handshake | 27-wireshark-tcp | 🌱 | 實際抓包看 SYN → SYN-ACK → ACK、retransmission、TIME_WAIT |
| 28 | 用 curl / httpie 診斷 HTTP | 28-curl-http-debug | 🌱 | -v 看 header、--http2、--http3、-k 看 TLS chain |
| 29 | openssl 看 TLS handshake | 29-openssl-tls-debug | 🌱 | openssl s_client -connect、檢查 cert chain、OCSP stapling |
| 30 | connection pool 設定常見坑 | 30-connection-pool-pitfalls | 🌱 | pool 太小 vs 太大、idle timeout 沒對齊、server 端 keepalive 跟 client 不一致 |
💣 Anti-pattern
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 31 | 網路 Anti-patterns | 31-network-antipatterns | 🌱 | 每個 request 開新 TCP connection(沒用 pool)、硬上 WebSocket 解可以 SSE 的問題、DNS TTL 訂 0 或訂 1 週、gRPC bidirectional streaming 濫用做簡單 CRUD、忽略 TIME_WAIT 沒調 tcp_tw_reuse |
🧰 對應檢查工具
| # | 主題 | Slug | Stage | 大綱 |
|---|
| 32 | 網路診斷工具 | 32-network-tools | 🌱 | Wireshark、tcpdump、mtr / traceroute、dig、openssl、curl/httpie、k6(壓測)、wrk2 |
📎 補充
| # | 主題 | Slug | Stage | 大綱 |
|---|
| S01 | 為什麼 TCP 的 TIME_WAIT 存在 | s01-tcp-time-wait | 🌱 | 防止 old packet 誤認、怎麼調(tcp_tw_reuse / tcp_tw_recycle 的坑) |
| S02 | HTTP Cache 完整指南 | s02-http-cache | 🌱 | Cache-Control / ETag / Last-Modified / Vary / CDN behaviour |
| S03 | CORS 從頭到尾 | s03-cors | 🌱 | Preflight、credential、simple request、為什麼後端工程師一定要懂 |
章節進度統計
- 知識主題:32 + 3 補充 = 35 項
- 🌿 growing:2(跨系列)
- 🌱 seed:33
跨系列連結
- →
infra/01-network-dns、infra/02-reverse-proxy-tls(已有)
- →
backend/api-design/ B09(協議選型)
- →
backend/stress-testing/ B19(HTTP keep-alive / connection pool 壓測)
- →
frontend/browser/ CH4(前端的 Request flow 視角)
- →
micro-service/26-websocket-sse(WebSocket vs SSE 實戰)