什麼是 Protocol?

1
什麼是 Protocol?:通訊協定(Protocol)是程式設計與網路通訊中定義資料格式、傳輸規則與錯誤處理的標準化約定,確保不同系統、裝置或程式間能正確交換資訊。它就像電腦世界的「語言規則」,規定語法(格式)、語意(含義)與同步機制,讓異質環境也能無縫協作,是 TCP/IP、HTTP、WebSocket 等網路技術的基礎。

什麼是 Protocol?

通訊協定(Protocol)是程式設計與網路通訊中定義資料格式、傳輸規則與錯誤處理的標準化約定,確保不同系統、裝置或程式間能正確交換資訊。它就像電腦世界的「語言規則」,規定語法(格式)、語意(含義)與同步機制,讓異質環境也能無縫協作,是 TCP/IP、HTTP、WebSocket 等網路技術的基礎。

 

通訊協定的核心組成要素

優質協定包含四個關鍵元素:

  • 語法(Syntax):資料結構與編碼格式(如 JSON、Protobuf)

  • 語意(Semantics):操作含義(如 GET=讀取、POST=建立)

  • 時序(Timing):連線建立、超時、重試機制

  • 錯誤控制:校驗和、重新傳輸、狀態碼

 

OSI 七層協定模型

通訊協定依功能分層,每層獨立負責特定職責:

層級 名稱 職責 協定範例
7 應用層 應用程式通訊 HTTP、FTP、SMTP
6 表示層 資料序列化、加密 SSL/TLS、JPEG
5 工作階段層 連線管理 NetBIOS、RPC
4 傳輸層 可靠傳輸、流量控制 TCP、UDP
3 網路層 路由與位址 IP、ICMP
2 資料鏈結層 框架、錯誤偵測 Ethernet、WiFi
1 實體層 位元傳輸 光纖、同軸電纜

封包封裝過程

使用者資料 → HTTP → TCP → IP → Ethernet → 位元流
反向解封裝 → Ethernet → IP → TCP → HTTP → 顯示資料
 

常見網路通訊協定

應用層協定

# HTTP/1.1 請求格式
GET /api/users HTTP/1.1
Host: example.com
User-Agent: Chrome/120
Accept: application/json

 

HTTP 狀態碼

2xx 成功:200 OK、201 Created
3xx 重導向:301 永久、302 暫時
4xx 客戶端錯誤:400 Bad Request、404 Not Found
5xx 伺服器錯誤:500 Internal Error、502 Bad Gateway
 

傳輸層協定

  • TCP:可靠、有連線、順序保證(HTTP、SMTP)

三次握手:SYN → SYN-ACK → ACK
四次揮手:FIN → ACK → FIN → ACK
 

  • UDP:無連線、高速、無保證(DNS、串流媒體)

DNS 查詢:UDP 53 埠,68 位元組封包
 

自訂應用協定設計

二進位協定範例(遊戲伺服器):

封包結構:[Header(4B)][Type(1B)][Length(2B)][Payload][Checksum(4B)]
登入封包: [LOGIN][0x01][0x000C][username][password][CRC32]
 

程式實作

import struct
import crc32

def create_login_packet(username, password):
    payload = username.encode() + b'|' + password.encode()
    header = struct.pack('>I B H', 0xDEADBEEF, 0x01, len(payload))
    checksum = crc32(payload)
    return header + payload + struct.pack('>I', checksum)

# 解析封包
def parse_packet(data):
    header, type_id, length = struct.unpack('>I B H', data[:7])
    payload = data[7:7+length]
    checksum = struct.unpack('>I', data[-4:])[0]
    return type_id, payload, checksum
 

現代通訊協定技術

gRPC(Google Remote Procedure Call)

// user.proto
service UserService {
  rpc GetUser(GetUserRequest) returns (User);
}

message User {
  int32 id = 1;
  string name = 2;
}

 

優點:二進位、高效能、支援串流、多語言

WebSocket

握手:Upgrade: websocket
資料:Text/Binary Frame,雙向全雙工
用途:即時聊天、遊戲、股票報價

 

MQTT(IoT 協定)

輕量級:Publish/Subscribe 模式
QoS 等級:0(最多一次)、1(至少一次)、2(恰好一次)
用途:物聯網、智慧家居

 

協定設計原則(6 原則)

  1. 簡單性:最小化必要欄位,避免過度工程

  2. 可擴展性:版本欄位、向後相容

  3. 效能:二進位壓縮、零拷贝

  4. 安全性:加密、認證、速率限制

  5. 錯誤處理:明確錯誤碼、重試策略

  6. 觀測性:追蹤 ID、計時、計量

版本協定範例

[Version(1B)][Type(1B)][RequestID(8B)][Payload][Signature]
v1.0:JSON 格式
v2.0:Protobuf 格式(向後相容)
 

常見協定陷阱與解決方案

問題

  • 無版本控制:v1 → v2 客戶端相容性問題
  • 無錯誤碼:HTTP 500 無法區分 DB/網路錯誤
  • 無超時:請求掛起阻塞連線池
  • 無速率限制:API 被濫用
     

解決方案

{
  "version": "2.0",
  "request_id": "uuid-1234",
  "status": 400,
  "error_code": "VALIDATION_ERROR",
  "message": "Email format invalid",
  "timestamp": "2026-01-25T23:00:00Z"
}
 

協定效能優化技術

  1. 壓縮:gzip、brotli、zstd

  2. HTTP/2:多工、多路復用、Header 壓縮

  3. HTTP/3(QUIC):UDP 基礎,0-RTT 連線

  4. 連線池:復用 TCP 連線

  5. 零拷貝sendfile()splice()

 

協定安全性檢查清單

  • TLS 1.3+ 加密
  • mTLS(雙向認證)
  • JWT/OAuth2 授權
  • 速率限制(Rate Limiting)
  • 輸入驗證與消毒
  •  Header 安全(CSP、HSTS)
  •  日誌所有請求(含 IP、User-Agent)
     

通訊協定是分散式系統的契約,從 HTTP 到 gRPC,從 MQTT 到自訂二進位協定,它定義系統間的溝通語言。設計優良協定能大幅提升效能、安全性與可維護性;劣質協定則導致系統脆弱、除錯困難。掌握 語法-語意-同步-錯誤 四要素,就能打造可靠、高效的通訊基礎設施。

經典格言:「協定決定一切」(Protocol is King)。