本文目录导读:

SIP(Session Initiation Protocol,会话发起协议)是一种用于建立、修改和终止多媒体会话(如语音、视频、即时消息)的信令协议,其核心会话发起流程通常包括 用户定位、能力协商、会话建立 等步骤。
以下是 SIP 会话发起的基本流程(以最常见的用户A呼叫用户B为例):
核心流程概览:
- 用户A 向 代理服务器 发送 INVITE 请求。
- 代理服务器 寻找 用户B 的位置(通过DNS、注册服务器等)。
- 用户B 振铃,并回复 180 Ringing(振铃)。
- 用户B 接听,回复 200 OK(包含其媒体能力,如支持的编解码)。
- 用户A 收到200 OK后,回复 ACK 确认。
- RTP/SRTP媒体流 开始直接(或通过中继)在A和B之间传输。
详细步骤(涉及组件:UAC, Proxy, Registrar, UAS)
注册阶段(可选,但通常需要)
- 用户B 启动时,会通过 REGISTER 请求向 注册服务器(Registrar) 注册自己的当前IP地址和端口。
- 注册服务器将其地址绑定到SIP URI(如
sip:b@example.com)。
用户A发起呼叫(INVITE)
- 用户A(UAC,User Agent Client)构造一个 INVITE 请求,包含:
- 请求行:
INVITE sip:b@example.com SIP/2.0 - 头域:
From: <sip:a@example.com>,To: <sip:b@example.com>,Call-ID: 12345@a-pc - 消息体(SDP,Session Description Protocol):描述A希望接收的媒体格式(如:音频用G.711编码,IP:192.168.1.10,端口:5004)。
- 请求行:
- 请求被发送到A的出站代理服务器(Outbound Proxy)。
代理服务器路由与查询
- 代理服务器 收到INVITE后:
- 检查请求,进行鉴权(如401/407挑战)。
- 通过 DNS 或 位置服务(从Registrar获取)查询用户B当前在哪儿。
- 将INVITE转发到用户B的IP地址。
用户B收到请求并振铃(100 Trying & 180 Ringing)
- 用户B的终端(UAS) 收到INVITE后:
- 立即回复 100 Trying(临时响应,表示已收到请求,正在处理)。
- 开始振铃,回复 180 Ringing(临时响应,表示正在提示用户)。
- 这些响应会沿原路返回给用户A,用户A听到回铃音。
用户B接听(200 OK)
- 当用户B接听电话时,终端回复 200 OK 最终响应。
- 200 OK的消息体(SDP)描述了B的媒体能力(音频使用G.711编码,IP:192.168.1.20,端口:4000)。
用户A确认(ACK)
- 用户A收到200 OK后,回复 ACK 请求(注意:ACK是直接发往用户B的,或通过代理,但通常通过代理简单转发)。
- 关键点:此时SIP信令会话建立完成,双方知道了对方的IP、端口和编码。
媒体流传输
- 根据协商好的IP、端口和编码,用户A和用户B开始通过 RTP(实时传输协议) 或 SRTP(安全实时传输协议) 直接建立音频/视频流。
- 注意:媒体流通常不经过SIP代理服务器,而是点对点的(除非使用B2BUA或媒体中继如TURN服务器)。
会话终止(BYE)
- 任何一方挂断时(如用户A),发送 BYE 请求。
- 对方回复 200 OK,会话结束。
简化时序图(文本版)
用户A (UAC) 代理服务器 (Proxy) 用户B (UAS)
| | |
|---- INVITE (SDP A) -->| |
| |--- INVITE (SDP A)->|
|<-- 100 Trying --------| |
| |<--- 180 Ringing ---|
|<-- 180 Ringing -------| |
| |<--- 200 OK (SDP B)|
|<-- 200 OK (SDP B) ----| |
|--- ACK (通常直接) ---->|---- ACK ----------->|
| | |
|<======= RTP 媒体流 (语音/视频) ==========>| // 点对点
| | |
|---- BYE ------------->|----- BYE ---------->|
| |<--- 200 OK --------|
|<-- 200 OK ------------| |
核心概念补充
- SDP (Session Description Protocol):不是SIP本身的协议,而是消息体,用于协商媒体类型(音频/视频)、编解码器(G.711, H.264)、IP地址、端口等,它“嵌入”在INVITE和200 OK中。
- 请求与响应:SIP使用基于文本的请求(INVITE, ACK, BYE, REGISTER, CANCEL, OPTIONS, SUBSCRIBE, NOTIFY, REFER, INFO, UPDATE, PRACK)和响应(100-699)。
- 代理服务器:路由信令,可以是无状态(不记录对话状态)或有状态(记录,更常见)。
- B2BUA (Back-to-Back User Agent):严格来说不是标准的SIP代理,它作为两个对话的端点,常用于NAT穿透、录音、转接(如FreeSWITCH, Asterisk)。
- 注册:使用
REGISTER请求将SIP URI绑定到当前IP地址和端口,以便被找到。
总结一句话:
SIP发起会话就是:呼叫方发INVITE(说“我们通话吧,我用这些编码”),被叫方振铃后回复200 OK(说“好,我用这些编码”),呼叫方回ACK确认,然后双方用协商好的媒体参数直接开始对话。
标签: SIP
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。