SIP协议介绍
网络上很多应用需先建立“会话”再传输数据,而现实中用户可能移动、有多个联系方式、传输内容多样。SIP(会话初始协议)就是帮设备找人、发起邀请、建立会话的协议,借助代理服务器精准定位用户,轻量通用,可创建、修改、结束各类会话,不依赖底层网络和会话类型。
SIP协议功能概况
SIP是应用层控制协议,核心用于建立、修改、终止网络电话、视频会议等多媒体会话,可邀请他人加入会议、增减通话媒体。它支持用户移动,凭固定ID即可定位,无需关注实际网络地址,主要负责用户定位、有效性、能力核查,以及会话建立与管理,需配合其他协议实现完整服务,还具备安全防护,支持IPv4和IPv6。
SIP基本流程
通过简单的实操示例,讲解SIP完整实现流程,展示SIP定位终端、发起请求、协商参数、建立会话、结束会话的全步骤。
- 基础说明
本次示例为经典的SIP梯形模型。场景:小夏用电脑SIP软电话,拨打小杨的互联网SIP话机,全程经过两台SIP代理服务器完成连接。
呼叫依靠SIP URI(统一资源标识符),格式类似邮箱,由用户名+主机名组成:
| 地址 | 地址说明 |
|---|---|
| 小夏地址 | sip:xia@atlanta.com |
| 小杨地址 | sip:yang@biloxi.com |
| 加密安全地址 | sips:yang@biloxi.com(全程TLS加密传输) |
SIP采用请求-应答模式,和HTTP协议类似,一次通信包含一个请求,至少一个应答。
- 核心流程步骤
步骤1:发起呼叫(INVITE请求)
小夏软电话发送INVITE请求,发起通话邀请,报文示例:
INVITE sip:yang@biloxi.com SIP/2.0
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds
Max-Forwards:70
To: Yang <sip:yang@biloxi.com>
From: Xia <sip:xia@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710@pc33.atlanta.com
CSeq: 314159 INVITE
Contact: <sip:xia@pc33.atlanta.com>
Content-Type: application/sdp
Content-Length: 142
(小夏的SDP会话描述未展示)
核心字段释义:
| 字段 | 说明 |
|---|---|
| Via | 记录主叫设备地址,标识会话事务 |
| To/From | 被叫、主叫信息,附带唯一tag标记 |
| Call-ID | 全局唯一呼叫标识 |
| CSeq | 命令序列,请求序号递增 |
| Contact | 主叫直连地址 |
| Max-Forwards | 限制消息转发次数 |
| Content-Type/Length | 消息正文格式与长度 |
媒体参数(编码、采样率等)由SDP协议承载,附在SIP报文正文里,不直接由SIP描述。
步骤2:代理服务器转发请求
- 小夏设备未知小杨地址,先将INVITE发给自身代理服务器atlanta.com;
- atlanta.com回复100 Trying,告知已接收请求,通过DNS查找小杨服务器biloxi.com,转发INVITE;
- biloxi.com收到后,同样回复100 Trying,查询内部定位库,获取小杨实时IP,转发至小杨话机;
步骤3:振铃提示(180 Ringing)
小杨话机收到INVITE后开始振铃,同时返回180 Ringing消息,沿原代理服务器路径传回小夏,小夏终端响起回铃音。
步骤4:接听通话(200 OK+ACK确认)
小杨接听后,话机发送200 OK应答,携带自身SDP媒体参数,报文示例
SIP/2.0 200 OK
Via: SIP/2.0/UDP server10.biloxi.com;branch=z9hG4bKnashds8;received=192.0.2.3
Via: SIP/2.0/UDP bigbox3.site3.atlanta.com;branch=z9hG4bK77ef4c2312983.1;received=192.0.2.2
Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds ;received=192.0.2.1
To: Yang <sip:yang@biloxi.com>;tag=a6c85cf
From: Xia <sip:xia@atlanta.com>;tag=1928301774
Call-ID: a84b4c76e66710@pc33.atlanta.com
CSeq: 314159 INVITE
Contact: <sip:yang@192.0.2.4>
Content-Type: application/sdp
Content-Length: 131
(小杨的SDP会话描述未展示)
小夏收到200 OK后,发送ACK确认报文,完成INVITE-200 OK-ACK三方握手,会话正式建立。
此时双方媒体数据直接传输,无需经过代理服务器。
步骤5:会话修改(re-INVITE)
通话中,任意一方可发送re-INVITE请求,修改媒体属性(切换音视频、调整清晰度等)。对方同意回复200 OK,拒绝返回错误码,修改失败不影响当前通话。
步骤6:结束会话(BYE请求)
通话结束,小杨挂机并发送BYE消息,直接发给小夏设备(跳过代理)。小夏回复200 OK,会话终止,BYE请求无需ACK确认。
- SIP注册服务
注册是SIP核心功能,用于服务器定位用户:
- 小杨话机开机或定时,向biloxi.com服务器发送REGISTER报文,上报当前地址;
- 服务器将账号与地址绑定,存入定位服务库;
- 代理服务器通过库内信息,精准转发呼叫请求。
用户可多设备同时注册,代理支持多地址并发寻呼;注册仅做地址映射,不负责身份认证。此外,SIP还支持取消请求、查询服务器状态等功能,后续章节详解。
- 协议结构
SIP属于分层协议,由多个关联性较弱的处理层级组成,分层讲解是为了理清逻辑、方便理解,协议本身不规定具体的实现方式。这里提到的“包含某一层”,指的是符合该层的规则约束,并非每个SIP组件都必须包含所有层级。
另外,SIP定义的组件是逻辑组件,并非物理实体,一个物理设备,可以同时实现多个逻辑组件的功能。SIP自下而上,一共分为四层:
| 层次 | 说明 |
|---|---|
| 第一层:语法和编码层 | 这是SIP最底层,负责协议的语法规范与编码格式,采用扩展BNF范式来定义。完整的语法规后续继续学习 |
| 第二层:传输层 | 传输层是SIP的通信基础,所有SIP组件都具备这一层。它主要规定了客户端发送请求、接收应答的方式,以及服务器接收请求、回复应答的规则,详细内容后续继续学习 |
| 第三层:事务层 | 事务是SIP的核心组成单元,一个事务指客户端发送请求、服务器返回对应应答的完整过程。事务层负责处理请求重发、应答匹配、超时控制等工作。用户代理、有状态代理服务器包含事务层,无状态代理服务器不包含。事务层分为客户端事务和服务器事务,均可通过有限状态机处理指定请求,相关细则后续继续学习 |
| 第四层:事务用户(TU) | 事务层上方为事务用户,除无状态代理外,其余SIP实体都属于事务用户。事务用户可以创建、取消客户端事务,取消操作通过CANCEL请求实现,终止当前事务并回滚状态,相关细节则后续继续学习 |
核心组件与相关规范
- SIP核心组件包含用户代理客户端(UAC)、用户代理服务端(UAS)、有状态/无状态代理服务器、注册服务器。除无状态代理外,其余组件核心都属于事务用户。
- UAC负责发起请求,UAS负责处理请求并回复应答,处理REGISTER注册请求的UAS也叫注册服务器。
- 对话是两端用户之间持久的端到端SIP连接,能保证消息有序传输、路由准确,只有INVITE请求能建立对话。
- INVITE是SIP最关键的请求方法,用于创建会话;

3244

被折叠的 条评论
为什么被折叠?



