為什麼要知道這些

你的 API 連不到資料庫,錯誤訊息是 Connection refused——這是第幾層的問題?

  • 第 3 層(網路層):IP 路由問題,ping 看看
  • 第 4 層(傳輸層):TCP 連線失敗,port 沒開?process 沒在聽?
  • 第 7 層(應用層):連通了但 SSL 握手失敗?authentication 問題?

有分層概念,就知道往哪個方向 debug。


OSI 7 層 vs TCP/IP 4 層

OSI 7 層(理論模型):

名稱例子
7應用層HTTP, FTP, DNS
6表示層SSL/TLS, JPEG
5會話層連線管理
4傳輸層TCP, UDP
3網路層IP, ICMP
2資料鏈路層Ethernet, WiFi
1實體層網路線, 光纖

TCP/IP 4 層(實際使用):

TCP/IP 層對應 OSI主要協議
應用層5-7HTTP, HTTPS, DNS, SMTP
傳輸層4TCP, UDP
網路層3IPv4, IPv6
網路存取層1-2Ethernet, WiFi

TCP 3-way Handshake

TCP 建立連線需要三次握手,確保雙方都能發送和接收:

客戶端              伺服器
  │────── SYN ────→ │   (1) 客戶端:我想連
  │ ←─── SYN+ACK ──│   (2) 伺服器:好,我收到了,你能收到嗎?
  │────── ACK ────→ │   (3) 客戶端:可以,連線建立
  │                 │
  │═══ 資料傳輸 ════│

TIME_WAIT 狀態:連線關閉後的等待期(2 倍 MSL,約 1-4 分鐘)。高並發服務大量短連線時,TIME_WAIT 會佔用 port,需要調整 net.ipv4.tcp_tw_reuse

Connection Refused vs Timeout

  • Connection refused:server 在那個 IP,但沒有 process 在監聽那個 port
  • Connection timeout:SYN 送出去沒有回應——可能是防火牆丟棄了 packet

TCP vs UDP

TCPUDP
連線需要建立(3-way handshake)無連線
可靠性保證順序、重傳遺失的 packet不保證,可能亂序或遺失
速度慢(有 overhead)
用途HTTP, 資料庫, 文件傳輸視訊通話, DNS query, 遊戲

為什麼 DNS 用 UDP? DNS query 很小(幾十 bytes),一來一往就完成,不需要 TCP 的握手開銷——建立連線比傳輸資料還費事。


Port:讓一台機器跑多個服務

IP 定位到機器,Port 定位到機器上的服務。

  • 0-1023:Well-known ports(HTTP 80, HTTPS 443, SSH 22, PostgreSQL 5432)
  • 1024-49151:Registered ports(應用程式常用)
  • 49152-65535:Dynamic ports(臨時 port,客戶端連線時使用)
# 查看哪個 port 被誰佔用
lsof -i :5432      # 哪個 process 在用 port 5432
netstat -tlnp      # 所有正在監聽的 TCP port
ss -tlnp           # 現代替代品(更快)

深入的網路運維(負載均衡、CDN、DNS 管理)在 infra/network-edge I01 章節,本篇是讓你讀那個章節之前的基礎概念準備。