本文目录导读:

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
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播