电子说
SIP
协议,即会话发起协议(Session Initiation Protocol
), 是一个应用层的 点对点协议 ,用于初始、管理和终止网络中的语音和视频会话, 属于 GB28181
的核心之一。
SIP
协议是由IETF
组织提出的IP
电话信令协议,IETFRFC2543
中对它的定义是一个基于文本的应用层控制协议, 独立于底层传输协议:TCP/UDP/SCTP
, 用于建立、修改和终止 IP
网上的双方或多方多媒体会话。借鉴了 HTTP
、SMTP
等协议,支持代理、重定向及登记定位用户等功能, 支持用户移动。
SIP
协议通过与 RTP/RTCP
、SDP
、RTSP
等协议及 DNS
配合, 从而支持语音、视频、数据、E-mail
、 状态、IM
、聊天、游戏等应用场景。
它可在 TCP
或 UDP
之上传送,由于 SIP
本身具有握手机制,一般情况下首选 UDP
传输协议。
从打电话的角度去理解
SIP
协议,推荐阅读:深入浅出SIP协议
本篇文章针对sip
协议的应用场景是建立在GB28181
协议的基础上来进行理解和解读的,如果理解有误,还请各位网友不吝指教!在评论区留下您的宝贵建议,谢谢!
sip协议的网络元素:
- 用户代理
- 代理服务器
- 注册服务器
- 重定向服务器
- 位置服务器
上图简单的勾勒出了sip
协议网络元素之间的关系,同时通过上图也可以了解到sip
会话的基本呼叫流程:
B
向注册服务器发送Register
请求,携带contact
地址;B
的地址,记录到位置服务器;A
向代理服务器发送invite
请求启动与用户代理B
的会话;A
发送响应100 Trying
的信息以避免A
重传invite
消息;B
的地址,获取到地址后会进一步转发A
的invite
请求;A
的请求转发到B
,B
向代理服务器响应180 Ringing
信息;B
的响应信息转发给A
,B
向代理服务器响应200 OK
信息;A
给B
发送ACK
请求,一个会话至此建立完成。关于GB28181
的"客户端对实时音视频点播"的流程,本质除sip
服务器以外的都是sip
客户端, 也可以理解为客户端对媒体发送端的基本呼叫流程,如下图:
在GB28181
标准中 中心信令服务器 (center control server
)就是一个基于sip
协议设计的负责核心sip
信令应用处理的SIP服务器, 信令安全路由网关 (secure signal routing gateway
)是一种具有安全功能的sip
服务器。
"组成中心信令控制的逻辑实体包括代理服务器、注册服务器、重定向服务器、背靠背用户代理等的一种或者几种,是负责核心SIP信令应用处理的SIP服务器" --引自《GB/T 28181-2016 公共安全视频监控联网系统 信息传输、交换、控制技术要求》
sip
协议包括六个主要请求和六类响应消息:
请求:
INVITE
BYE
REGISTER
CANCEL
ACK
OPTIONS
响应:
1xx: 临时/信息响应
2xx: 成功响应
3xx: 重定向响应
4xx: 客户端故障响应
5xx: 服务器故障响应
6xx: 全局故障响应
下面是GB28181
协议标准下较常用的的sip
请求:
INVITE
请求在GB28181
协议中是视频点播(包括实时预览和历史回放)流程中最重要的一个环节,在invite
请求中会包含SDP
协议的内容。SDP
协议(Session Description Protocol
)是用来描述媒体数据是如何使用的,它由3个部分组成,可分为:
v= (protocol version)
o= (owner/creator and session identification)
s= (session name)
i= (session information)
u= (URI of description)
e= (email address – contact detail)
p= (phone number – contact detail)
c= (connection information – not required if included in media description)
b= (session bandwidth information)
z= (time zone adjustments)
k= (encryption key)
a= (zero or more session attribute lines)
t= (time the session is active)
r= (repeat times)
m= (media name/ transport address)
i= (media title)
c= (connection information – not required if included in session description)
b= (bandwidth information)
k= (encryption key)
a= (zero or more media attribute lines)
sdp
字段的具体细节可参考链接:
sdp会话描述协议
sdp
协议参考文献:
《GB/T 28181-2016 公共安全视频监控联网系统 信息传输、交换、控制技术要求》附录F
SDP
定义
下面是在GB28181
协议中视频点播流程中的invite
数据包:
BYE
包是用来终止已经建立的会话,通常出现BYE
包的场景是媒体接收端主动发起实时音视频点播流程时出现。它不能由代理服务器发送,也不能发送到挂起的INVITE
或者未建立的会话。
具体的数据包流程分析如下图:
通过抓包可以查看到GB28181
一个完整的基本注册流程:
在GB28181
中它是采用RFC 3261
规范中基于数字摘要的CRAM
机制来进行注册,基本注册流程如下图:
具体的数据包分析如下图:
主要是用来终止未建立的会话。用户代理使用此请求取消之前发起的待处理的invite
。它可以由用户代理或代理服务器发送。
ACK
在RFC-3262
规范中是一个请求,它只有在INVITE
请求中出现,当INVITE
请求响应是200 OK
时, 后续的ACK
则是一个独立事务。
全部0条评论
快来发表一下你的评论吧 !