会话发起协议(Session Initiation Protocol,SIP)是 VoIP 和统一通信系统的核心信令协议。它负责建立、修改和终止多媒体会话,而实际的音视频数据通常由 RTP/RTCP 承载。理解 SIP 是构建呼叫中心、软电话、视频会议系统的第一步。

SIP 在协议栈中的位置

SIP 工作在应用层,基于 UDP 或 TCP 传输。它与 HTTP 类似,采用文本格式的请求-响应模型,但语义面向「会话」而非「资源」:

核心消息与方法

SIP 定义了六种基本方法,日常开发中最常遇到的是前四种:

  1. REGISTER:终端向 Registrar 注册自己的可达地址
  2. INVITE:发起呼叫,携带 SDP offer
  3. ACK:确认 INVITE 的最终响应(200 OK)
  4. BYE:终止已建立的会话
  5. CANCEL:取消尚未完成的 INVITE
  6. OPTIONS:查询对方能力,常用于保活探测
INVITE sip:bob@example.com SIP/2.0
Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776
From: Alice <sip:alice@example.com>;tag=1928301774
To: Bob <sip:bob@example.com>
Call-ID: a84b4c76e66710@192.168.1.100
CSeq: 314159 INVITE
Contact: <sip:alice@192.168.1.100:5060>
Content-Type: application/sdp
Content-Length: 142

v=0
o=alice 2890844526 2890844526 IN IP4 192.168.1.100
s=-
c=IN IP4 192.168.1.100
t=0 0
m=audio 49170 RTP/AVP 0 8

典型呼叫流程

两个 SIP 终端之间的直接呼叫遵循「三次握手」式的信令交换:

REGISTER → INVITE → 180 Ringing → 200 OK → ACK → RTP 媒体流 → BYE → 200 OK

在企业部署中,通常还会引入 SIP Proxy(路由转发)和 SIP Registrar(地址绑定)。Proxy 根据 Request-URI 和路由策略将 INVITE 转发到正确的下游节点,而 Registrar 维护 AOR(Address of Record)与 Contact 的映射关系。

状态码速查

SIP 响应码与 HTTP 高度相似,分为六类:

调试工具推荐

排查 SIP 问题离不开抓包和分析:

  1. Wireshark:过滤 siprtp 协议,Telephony → VoIP Calls 可还原通话
  2. sngrep:终端实时查看 SIP 信令,适合 Linux 服务器
  3. sipp:压力测试与回归验证

小结

SIP 的本质是会话信令协议,掌握 INVITE/ACK/BYE 流程、SDP 协商和状态码含义,就能读懂 80% 的 VoIP 问题。下一篇我们将讨论 SIP 与 WebRTC 的融合架构。