会话发起协议(Session Initiation Protocol,SIP)是 VoIP 和统一通信系统的核心信令协议。它负责建立、修改和终止多媒体会话,而实际的音视频数据通常由 RTP/RTCP 承载。理解 SIP 是构建呼叫中心、软电话、视频会议系统的第一步。
SIP 在协议栈中的位置
SIP 工作在应用层,基于 UDP 或 TCP 传输。它与 HTTP 类似,采用文本格式的请求-响应模型,但语义面向「会话」而非「资源」:
- SIP:呼叫控制(注册、邀请、挂断、转移)
- SDP:媒体协商(编解码器、端口、IP 地址)
- RTP/RTCP:实际音视频流传输
- STUN/TURN/ICE:NAT 穿透与连通性检测
核心消息与方法
SIP 定义了六种基本方法,日常开发中最常遇到的是前四种:
- REGISTER:终端向 Registrar 注册自己的可达地址
- INVITE:发起呼叫,携带 SDP offer
- ACK:确认 INVITE 的最终响应(200 OK)
- BYE:终止已建立的会话
- CANCEL:取消尚未完成的 INVITE
- 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 高度相似,分为六类:
- 1xx 临时响应:100 Trying、180 Ringing、183 Session Progress
- 2xx 成功:200 OK
- 3xx 重定向:302 Moved Temporarily(呼叫转移场景常见)
- 4xx 客户端错误:401 Unauthorized、404 Not Found、486 Busy Here
- 5xx 服务端错误:503 Service Unavailable
- 6xx 全局失败:603 Decline
调试工具推荐
排查 SIP 问题离不开抓包和分析:
- Wireshark:过滤
sip或rtp协议,Telephony → VoIP Calls 可还原通话 - sngrep:终端实时查看 SIP 信令,适合 Linux 服务器
- sipp:压力测试与回归验证
小结
SIP 的本质是会话信令协议,掌握 INVITE/ACK/BYE 流程、SDP 协商和状态码含义,就能读懂 80% 的 VoIP 问题。下一篇我们将讨论 SIP 与 WebRTC 的融合架构。