工作中时常能听到 SIP 协议的名字,但对这个协议始终没有了解,这次便仔细地把这块协议了解一下
SIP 协议
SIP(Session Initiation Protocol,会话初始化协议)是由 IETF(Internet EnGineering Task Force,因特网工程任务组)制定的多媒体通信协议,是一个在 IP 网络上进行多媒体通信的应用层控制协议,它被用来创建、修改和中介一个或多个参加者参加的会话进程,与 SDP、TRP/TRCP、DNS 等协议配合,共同完成 IMS 中的会话建立与媒体协商。SIP 协议广泛应用于 CS(Circuit Switched,电路交换)、NGN(Next Generation Network,下一代网络)以及 IMS(IP Mutimedia Subsystem,IP 多媒体子系统)的网络中,可以支持并应用于语音、视频、数据等多媒体业务,同时也可以应用于 Presence(呈现)、Instant Message(即时消息)等特色业务。可以说,有 IP 网络的地方就有 SIP 协议的存在。
SIP 协议在协议栈中的位置
SIP 协议虽然属于应用层协议,然而 SIP 本身不提供任何服务。但是 SIP 是通信的基础,在 SIP 这个通信的基础上可以用来构建不同的服务。SIP 协议在建立和位置多媒体会话中,主要支持如下5个功能:
- 检查终端用户的位置。无论被叫放在哪里均能确保呼叫达到被叫放,进行任何描述信息到定位信息的转换;
- 检查用户参与会话的意愿程度。参与者在呼叫中能够引入其他用户加入或取消其他用户的连接;
- 检查媒体和媒体参数,允许与呼叫有关的组在支持特性上保持一致;
- 在呼叫与被叫双方建立会话;
- 发送和终止会话,修改会话参数,激活服务等会话管理操作;
SIP 协议特性
- 文本协议:易于调测,结构灵活
- 点对点协议:只需要一个相对简单(因此也高度可扩展的)核心网络
- 中性的底层传输协议:可用 TCP/UDP(推荐 UDP)
- 同时呼叫和媒体信息同时传送:媒体信息的传送由 SDP 传送
- 与许多其他协议协同工作,仅涉及通信会话的信令部分(control message)
SIP 相关协议
RTP(实时传输协议)
SDP(会话描述协议):描述了会话所使用流媒体细节,如:使用哪个 IP 端口,采用哪种编解码器等等
SIP 协议的一个典型用途:
SIP “会话”传输一些简单的经过封包的实时传输协议。RTP 本身才是语音或视频的载体。
业务过程和协议流程
注册流程
sequenceDiagram title:SIP 注册流程 participant 终端代理 A participant 代理服务器 终端代理 A -->> 代理服务器:REGISTER(1) 代理服务器 -->> 终端代理 A:401(2) 终端代理 A -->> 代理服务器:REGISTER(3) 代理服务器 -->> 终端代理 A:200 OK(4)
- 用户首次试呼时,终端代理 A 向代理服务器发送 REGISTER 注册请求;
- 代理服务器通过后端认证/计费中心获知用户信息不再数据库中,便向终端代理回送401 Unauthorized 质询消息,其中包含安全认证所需的令牌;
- 终端代理提示用户输入其标识和密码后,根据安全认证令牌将其加密后,再次用 REGISTER 消息报告给代理服务器;
- 代理服务器将 REGISTER 消息中的用户信息解密,通过认证/计费中心验证其合法后,将该用户信息登记到数据库中,并向终端代理返回成功响应消息200 OK。
注销流程
sequenceDiagram participant 终端代理 participant 代理服务器 终端代理 -->> 代理服务器:REGISTER(1) 代理服务器 -->> 终端代理:200 OK(2)
- 终端向代理服务器发送 REGISTER 消息注销,其中 EXPIRE 字段设置为0;
- 代理服务器在收到后送回 200 OK 响应,并将数据库中的用户有关消息注销。
基本呼叫建立过程
sequenceDiagram participant 终端代理 A participant 代理服务器 participant 终端代理 B 终端代理 A -->> 代理服务器: Invite(1) 代理服务器 -->> 终端代理 B: Invite(2) 代理服务器 -->> 终端代理 A: 100 Trying(3) 终端代理 B -->> 代理服务器: 100 Trying(4) 终端代理 B -->> 代理服务器: 180 Ringing(5) 代理服务器 -->> 终端代理 A: 180 Ringing(6) 终端代理 B -->> 代理服务器: 200 OK(7) 代理服务器 -->> 终端代理 A: 200 OK(8) 终端代理 A -->> 代理服务器: ACK(9) 代理服务器 -->> 终端代理 B: ACK(10) 终端代理 B --> 终端代理 A: 通话(11)
- 用户摘机发起一路呼叫,终端代理 A 向该区域的代理服务器发起 Invite 请求;
- 代理服务器通过认证/计费中心确认用户认证已通过后,检查请求消息中的 Via 头域中是否已包含其地址。若已包含,说明发生环回,返回只是错误的应答;若没有问题,代理服务器在请求消息的 Via 头域插入自身地址,并向 Invite 消息的 To 头域所指示的被叫终端代理 B 发送 Invite 请求;
- 代理服务器向终端代理 A 发送呼叫处理中的应答消息:100 Trying(防止请求发送到终端代理 B 时,终端代理 A 已经超时);
- 终端代理 B 向代理服务器发送呼叫处理中的应答消息:100 Trying;
- 终端代理 B 指示被叫用户振铃,用户振铃后向代理服务器发送 180 Ringing 振铃消息;
- 代理服务器向终端代理 A 转发被叫用户振铃消息;
- 被叫用户摘机,终端代理 B 向代理服务器返回表示连接成功的应答 200 OK;
- 代理服务器向终端代理 A 转发该成功指示 200 OK;
- 终端代理 A 收到信息后,向代理服务器发送 ACK 消息进行确认;
- 代理服务器将 ACK 确认消息转发给终端代理 B;
- 主被叫用户之间建立通信连接,开始通话。
正常呼叫释放流程
sequenceDiagram participant 终端代理 A participant 代理服务器 participant 终端代理 B 终端代理 A -->> 终端代理 B: 通话(1) 终端代理 B -->> 代理服务器: Bye(2) 代理服务器 -->> 终端代理 A: Bye(3) 终端代理 A -->> 代理服务器: 200 OK(4) 代理服务器 -->> 终端代理 B: 200 OK(5)
- 正常呼叫
- 用户通话结束后,被叫用户挂机,终端代理 B 向代理服务器发送 Bye 消息;
- 代理服务器转发 Bye 消息至终端代理 A,同时向认证、计费中心发送用户通话的详细信息,请求计费;
- 主叫用户挂机后,终端代理 A 向代理服务器发送确认挂断相应信息 200 OK;
- 代理服务器转发响应信息 200 OK.
会话更改流程
To be continued…
参考文献
[1]. 会话初始化协议(SIP)简介及应用
[2]. SIP协议详解
[3]. SIP 协议呼叫流程详解