1、Sip 协议简介
SIP(Session Initiation Protocol)会话初始协议
它是一个基于文本的应用层控制协议,用于创建、修改和释放一个或多个参与者的会话。SIP 是一种源于互联网的IP 语音会话控制协议,具有灵活、易于实现、便于扩展等特点
SIP(Session Initiation Protocol,会话初始协议)是由IETF(Internet Engineering Task Force,因特网工程任务组)制定的多媒体通信协议。广泛应用于CS(Circuit Switched,电路交换)、NGN(Next Generation Network,下一代网络)以及IMS(IP Multimedia Subsystem,IP多媒体子系统)的网络中,可以支持并应用于语音、视频、数据等多媒体业务
,同时也可以应用于Presence(呈现)、Instant Message(即时消息)等特色业务。可以说,有IP网络的地方就有SIP协议的存在。
SIP是类似于HTTP
,SIP可以减少应用特别是高级应用的开发时间。由于基于IP协议的SIP利用了IP网络
,固定网运营商也会逐渐认识到SIP技术对于他们的远意义。
2、主要特点
- 独立于TCP或者UDP,使用自己应用层协议保证消息的可靠传送
- 消息体采用文本方式UTF-8
- 以客户-服务器方式建立会话
- 灵活的寻址方式
- 是应用层的控制协议,可以建立、修改和结束多媒体会话
- SIP没有媒体协商功能,往往需要集成SDP协议
- 可应用于视频、语音、即时通信、在线游戏和虚拟现实等多媒体交互式用户会话
- rfc3261为核心,但是扩展众多,可满足各种复杂应用
3、功能实体
User Agent(呼叫代理) 是SIP网络的终端,具体的分为UserAgent Client和UserAgent Server。UAC是客户端,表示主叫;UAS是服务端,表示被叫。
REGISTRAR SERVER(注册服务器):接受客户端的注册请求,将用户的地址信息写入数据库,并返回注册状态。
REDIRECT SERVER(重定向服务器): 接受SIP的请求,映射请求的原地址成零个或者多个IP地址,并且返回给客户端。 由客户端重新发起请求。
LOCATION SERVER(定位服务器): 管理若干数据库,接受由Redirect Server或者Proxy Server的路由查询。
Proxy Server(代理服务器):完成SIP消息的转接和转发功能,可以修改SIP消息内容。
4、消息的构成
请求:UAC -> UAS , 包括3个元素:请求行、消息头、消息体
响应:UAS ->UAC :状态行、消息头、消息体
备注:UAC/UAS的是相对的概念,可倒换
5、
SIP -UAC 6种基本方法
- INVITE——邀请用户加入呼叫
- BYE——终止一呼叫上的两个用户之间的呼叫
- OPTIONS——请求关于服务器能力的信息
- ACK——确认客户机已经接收到对INVITE的最终响应
- REGISTER——SIP地址注册,让服务器知道SIP端点的联系地址
- CANCEL——取消会话邀请
SIP -UAS 协议状态响应
- 1xx 临时响应 100 Trying 180 Ringing
- 2xx 成功响应 200 OK
- 3xx 重定向响应 302 Moved Temporarilly
- 4xx 客户端错误响应 403 Forbidden 404 Not Found
- 5xx 服务器错误响应 500 Server internal Error
- 6xx 全局错误响应 600 Busy Everywhere
6、三个重要概念
Dialog (对话) 指的是两个UA之间端到端的关系,它在Call ID、local tag和remote tag都产生之后被认为建立;
Transaction (事务)指的是一个请求的处理过程,当一个请求被发出,针对这个请求的响应也被处理之后,才是一个完整的事务,当然可能包含一个或多个临时响应或一个或多个最终响应;
Session (会话) 是SDP方面的概念,表示多媒体发送者和接收者通过媒体流进行交互的过程。
7、SIP之GB28181注册、注销详解
a) 1:SIP 代理向SIP 服务器发送 Register 请求;
b) 2:SIP 服务器向 SIP 代理发送响应401, 并在响应的消息头 WWW_Authenticate 字段中给出适合SIP 代理的认证体制和参数;
c) 3:SIP 代理重新向SIP 服务器发送 Register 请求, 在请求的 Authorization 字段给出信任书,包含认证息;
d) 4:SIP 服务器对请求进行验证, 如果检查出 SIP 代理身份合法, 向 SIP 代理发送成功响应
200 OK, 如果身份不合法则发送拒绝服务应答。
注:“SIP代理”这里指的UAC(User Agent Client) "SIP服务器"这里指的是UAS(User Agent Server)
当UAS接收到消息后,回送一个401消息“Unauthorized”在消息包头添加如下字段
WWW-Authenticate:
Digest realm="3402000000",qop="auth",nonce="52d33cd23eea89a9563618cdf31d720a"
其中realm指的是域名(根据自己项目的实际情况填写),Nonces是随机数
UAC向UAS注册,下面是注册消息
REGISTER sip:34020000002000000001@36.103.240.124:5060 SIP/2.0
Via: SIP/2.0/UDP 10.10.0.10:7081;rport;branch=z9hG4bK460266740
From: <sip:34020000002000000001@10.10.0.10:7081>;tag=845016216
To: <sip:34020000002000000001@10.10.0.10:7081>
Call-ID: 1688820428
CSeq: 1 REGISTER
Contact: <sip:34020000002000000001@10.10.0.10:7081>
Max-Forwards: 70
User-Agent:
Expires: 3600
Content-Length: 0
字段说明:
请求起始行:表示UAC向IP地址为36.103.240.124的服务器发起注册,SIP版本号为2.0
From字段:指明该REGISTER请求消息由UAS(IP地址:36.103.240.124)控制的UAC发起的。
To字段:指明REGISTER请求接收方的地址。此时REGISTER请求的接收方为IP地址为36.103.240.124的UAS。(这个值和To头域的值相同,除非这个请求是第三方发起的注册请求。)
Call-ID字段:UAC发出的给某个注册服务器(registrar)的所有注册请求都应该有相同的Call-ID头域值。如果相同的客户端用了不同的Call-ID值,注册服务器(registrar)就不能检测是否一个REGISTER请求由于延时的关系导致了故障。
Cseq字段:Cseq值保证了REGISTER请求的正确顺序。一个UA为每一个具备相同的Call-ID的REGISTER请求顺序递增这个Cseq字段。
Contact字段:在REGISTER请求中的Contact字段指明用户可达位置。
Expires字段:表示该登记生存期为3600s。
Content-Length字段:表明此请求消息消息体的长度为空,即此消息不带会话描述。
备注:一个合法的SIP请求必须至少包含如下头域:To、FROM、Cseq、Call-ID、Max-Forwards、Via
注销流程图描述如下:
a) 1:SIP 代理向SIP 服务器发送 Register 请求,Expires 字段的值为0, 表示SIP 代理要注销;
b) 2:SIP 服务器向 SIP 代理发送响应401, 并在响应的消息头 WWW_Authenticate 字段中给出适合SIP 代理的认证体制和参数;
c) 3:SIP 代理重新向SIP 服务器发送 Register 请求, 在请求的 Authorization 字段给出信任书,包含认证信息,Expires 字段的值为0;
d) 4:SIP 服务器对请求进行验证, 如果检查出 SIP 代理身份合法, 向 SIP 代理发送成功响应
200 OK, 如果身份不合法则发送拒绝服务应答。