SIP vs HTTP:同樣是文字協定,為什麼 Method 完全不同?
# 前言
如果你有接觸過網頁開發,一定對 HTTP Methods 不陌生:GET 取資料、POST 送資料、DELETE 刪除……這套邏輯清晰又直覺。
但當你第一次看到 SIP(Session Initiation Protocol)封包,會發現裡面出現的是完全不同的詞彙:INVITE、ACK、BYE……
它們看起來像在對話,因為 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 ----------| |
- INVITE:Alice 打電話給 Bob,發出邀請
- 180 Ringing:回應狀態碼(像 HTTP 200 OK),表示 Bob 的電話在響
- 200 OK:Bob 接聽
- ACK:Alice 確認收到 200 OK,三次握手完成
- RTP 串流:真正的音訊/視訊走 RTP 協定(不是 SIP!)
- 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 架構等主題,歡迎追蹤!
