SIP vs HTTP:同樣是文字協定,為什麼 Method 完全不同?

# 前言

如果你有接觸過網頁開發,一定對 HTTP Methods 不陌生:GET 取資料、POST 送資料、DELETE 刪除……這套邏輯清晰又直覺。

但當你第一次看到 SIP(Session Initiation Protocol)封包,會發現裡面出現的是完全不同的詞彙:INVITEACKBYE……

它們看起來像在對話,因為 SIP 本來就是設計來「管理對話」的。


# HTTP Methods:操作資源

HTTP 的設計目的是操作網路上的「資源」(Resource),所以 Method 的命名圍繞著 CRUD(建立、讀取、更新、刪除):

Method 用途
GET 取得資源
POST 新增/提交資料
PUT 更新資源
DELETE 刪除資源
PATCH 部分更新
OPTIONS 查詢支援的方法

一個 HTTP 請求是無狀態的(Stateless),每次請求都是獨立的,Server 不記得你上一次做了什麼。


# SIP Methods:管理通訊會話

SIP 的設計目的則是建立、管理、終止多媒體通訊會話(Session),例如語音通話、視訊會議。

所以它的 Method 命名完全不同,反映的是「通話的生命週期」:

Method 用途
INVITE 發起通話(相當於「喂,你在嗎?」)
ACK 確認通話已建立(三次握手最後一步)
BYE 掛斷通話
CANCEL 取消尚未接通的通話
REGISTER 向 SIP 伺服器註冊自己的位置
OPTIONS 查詢對方能力(類似 HTTP OPTIONS)
INFO 傳送通話中的資訊(如 DTMF 按鍵音)
REFER 轉接通話
SUBSCRIBE 訂閱事件通知
NOTIFY 發送事件通知
MESSAGE 傳送即時訊息(SIP-based IM)
UPDATE 更新會話參數(不重建 session)

# 一通電話的完整流程

讓我們用實際的 SIP 流程看看這些 Method 如何協作:

Alice                    SIP Proxy                    Bob
  |                          |                          |
  |-------- INVITE --------->|                          |
  |                          |-------- INVITE --------->|
  |                          |<------- 180 Ringing -----|
  |<------- 180 Ringing -----|                          |
  |                          |<------- 200 OK ----------|
  |<------- 200 OK ----------|                          |
  |--------------- ACK ----->|---------> ACK ---------->|
  |                          |                          |
  |<========= RTP 音訊串流 =========================>|
  |                          |                          |
  |--------------- BYE ----->|---------> BYE ---------->|
  |                          |<------- 200 OK ----------|
  |<------- 200 OK ----------|                          |
  1. INVITE:Alice 打電話給 Bob,發出邀請
  2. 180 Ringing:回應狀態碼(像 HTTP 200 OK),表示 Bob 的電話在響
  3. 200 OK:Bob 接聽
  4. ACK:Alice 確認收到 200 OK,三次握手完成
  5. RTP 串流:真正的音訊/視訊走 RTP 協定(不是 SIP!)
  6. BYE:任一方掛斷,結束會話

# 為什麼 SIP 不傳音訊?

這是很多人第一次學 SIP 的疑問:SIP 只負責「信令」(Signaling),也就是談好「誰跟誰通話、用什麼格式、傳到哪個 IP/Port」。

真正的聲音走的是另一個協定:RTP(Real-time Transport Protocol),通常跑在 UDP 上。

可以這樣記:

  • SIP = 打電話前的「喂,你好,我打給你了」
  • RTP = 真正的通話聲音

# 小結

比較項目 HTTP SIP
設計目的 操作網路資源 管理通訊會話
狀態 無狀態 有狀態(Session)
傳輸層 TCP UDP / TCP
媒體傳輸 自己傳 交給 RTP
典型 Method GET, POST INVITE, ACK, BYE

SIP 是整個 IP 電話系統的骨架,搞懂它的 Method 之後,後面的 FreeSwitch、Asterisk、RTP、DTMF、REGISTER 流程 就都有脈絡可以掌握了。


本文是「IP 電話技術系列」第一篇,後續會繼續介紹 SIP 回應碼、RTP/SRTP、FreeSwitch 架構等主題,歡迎追蹤!

請我喝[茶]~( ̄▽ ̄)~*

Young 微信支付

微信支付

Young 支付寶

支付寶