概念
- 使用REGISTER方法进行注册和注销;
- 注册和注销应进行认证,认证方式应支持数字摘要认证方式,高安全级别的宜支持数字证书认证;
- 注册成后,SIP代理在注册过期时间到来之前,应向注册服务器进行刷新注册;
- 若注册失败,应在不短于60s的时间间隔内重新发起注册;
- 系统、设备注册过期时间可配置;
- SIP代理是否注册成功决定SIP服务器在离线状态;
- 对于处于开启网络地址转换(NAT)功能的路由器内侧的SIP代理,应该支持使用TCP发起SIP注册,并在注册成功后保持TCP连接不关闭,SIP代理及服务器在该TCP通道里发送所有请求及响应SIP消息。若TCP通道断开,则认为SIP代理异常掉线,SIP代理应在一定时间间隔内重新发起注册;
流程
注册
注册流程:
- SIP代理向SIP服务器发送REGISTER请求;
- SIP服务器向SIP代理响应401(未认证),返回的消息头里给出适合SIP代理的认证体制和参数;
- SIP代理重新向SIP服务器发送REGISTER请求,在请求的Authorization中给出信任书,包括认证信息;
- SIP服务对请求进行认证,如检测SIP代理身份合法,向SIP代理响应200 OK,如检测不合法发送拒绝服务应答;
注销
注销流程:
- SIP代理向SIP服务器发送REGISTER请求,Expires字段的值为0,表示SIP代理要注销;
- SIP服务器向SIP代理响应401(未认证),返回的消息头里给出适合SIP代理的认证体制和参数;
- SIP代理重新向SIP服务器发送REGISTER请求,在请求的Authorization中给出信任书,包括认证信息,Expires字段的值为0;
- SIP服务对请求进行认证,如检测SIP代理身份合法,向SIP代理响应200 OK,如检测不合法发送拒绝服务应答;
注册重定向(2022新增)
重定向流程:
- 设备或系统段的SIP代理向SIP重定向服务器发送REGISTER请求;
- SIP重定向服务器向SIP代理响应401(未认证),返回的消息头里给出适合SIP代理的认证体制和参数;
- SIP代理重新向SIP重定向服务器发送REGISTER请求,在请求的Authorization中给出信任书,包括认证信息;
- SIP重定向服务器验证请求,如检测SIP代理身份合法,SIP重定向服务器根据内部策略选择设备需注册的SIP服务器A,并回复注册请求响应302,响应消息携带Contact头域和Expires,Contact格式为sip:SIP服务器A编码@目的IP地址端口,在此头域中携带SIP服务A的地址;
- SIP代理收到302重定向请求后,向SIP服务器A发起注册;
- 6~8:完成注册重定向流程后,后续所有请求和响应动作由SIP服务器A和设备直接完成;
- 重定向后,如果SIP代理检测SIP服务器A离线或注册被SIP服务器拒绝,SIP代理应重新执行注册重定向流程,向SIP重定向服务器发起注册请求;
状态信息报送(包括心跳检测)
要求
- 当原设备发现工作异常时,应立即向本SIP监控域的SIP服务器发送状态信息;
- 无异常时,定时向本SIP监控域的SIP服务器发送状态信息;
- 状态信息报送采用MESSGAE方法;
- SIP设备宜在状态信息中携带故障子设备描述信息;
- 通过周期性的状态信息报送,实现注册服务器与原设备之间的状态检测,即心跳机制;
- 心跳发送发、接收方需统一配置心跳间隔参数,安装心跳间隔定时发送心跳消息,默认心跳间隔为60s;
- 心跳发送方、接收方需统一配置心跳超时次数参数,心跳消息连续超时达到心跳超时次数则认为对方下线,默认心跳超时次数为3次;
- 心跳接收方在心跳发送方上线状态下,检测到心跳消息连续超时达到配置次数则心跳发送方离线;
- 心跳发送方在心跳接收方上线状态下,检测不到心跳响应消息连续超时达到配置次数则认为心跳接收方离线;
流程
心跳流程:
- 源设备向SIP服务器发送设备状态信息报送命令,采用MESSAGE方法携带;
- SIP服务器收到命令后返回200 OK;
测试
准备
1)一台支持国标的海康设备;
2)自研的客户端界面程序+SIP服务端程序;
设备配置
如图为海康设备网页端配置,主要关注以下几个配置项:
- 本地SIP端口:默认5060,相机针对GB28181协议开放的通信端口;
- 传输协议:支持UDP和TCP协议;
- 勾选“启动”按钮,启用GB28181-2016协议;
- SIP服务器ID:服务器标识,详见GB28181协议定义;
- SIP服务域:SIP服务器ID的前10位;
- SIP服务器地址:SIP服务所在机器的IP地址;
- SIP服务端口:SIP服务端口;
启用GB28181后,设备定期对外发送REGISTER命令,如无服务端连接,由ICMP协议返回464目标不可达,抓包如下所示:
REGISTER命令分析
部分命令分析:
- 传输协议为UDP;
- 注册命令基于**SIP协议(Session Initiation Protocol)**传输;
- 注册命令的method为REGISTER;
- Expires:注册有效期,默认3600秒;
代码架构
工程目前主要分为3部分:
1)tinyXml:编译为静态库,用于xml解析。TinyXml是一个c++的xml解析库,是一个基于DOM模型、非验证的轻量级解释器;
2)mysipsdk:编译为动态库,基于开源库pjsip做二次封装,供客户端使用;
3)GB28181Client:基于qt开发的界面客户端,依赖于mysipsdk.dll;
界面展示
抓包分析
程序启动后,输入端口、域名等信息,点击连接,抓包可查看注册成功。