SIP协议九(SRTP,Session time处理流程)

SRTP,Session Time处理流程,

SRTP

SRTP,即安全实时传输协议(Secure Real-time Transport Protocol),其是在实时传输协议(Real-time Transport Protocol)基础上所定义的一个协议,旨在为单播和多播应用程序中的实时传输协议的数据提供加密、消息认证、完整性保证和重放保护。
由于实时传输协议和可以被用来控制实时传输协议的会话的实时传输控制协议(RTP Control Protocol)有着紧密的联系,安全实时传输协议同样也有一个伴生协议,它被称为安全实时传输控制协议(Secure RTCP或SRTCP);安全实时传输控制协议为实时传输控制协议提供类似的与安全有关的特性

加密方式:加密算法有两种加密模式,它们能将原始的AES块密文转换成流密文:分段整型计数器模式和f8模式。 除了AES加密算法,安全实时传输协议还允许彻底禁用加密,此时使用的是所谓的"零加密算法"。零加密算法并不进行任何加密,也就是说,加密算法把密钥流想像成只包含"0"的流,并原封不动地将输入流复制到输出流。这种模式是所有与安全实时传输协议兼容的系统都必须实现的。

为了进行消息认证并保护消息的完整性,安全实时传输协议使用了HMAC-SHA1算法。这种算法使用的是默认160位长度的HMAC-SHA1认证密钥。但是它不能抵御重放攻击;重放保护方法建议接收方维护好先前接收到的消息的索引,将它们与每个新接收到的消息进行比对,并只接收那些过去没有被播放过的新消息。

SRTP的协商:

协商一般以主叫方为主:
(1)主叫不启用SRTP,被叫不启用/启用但不强制都是不加密方式进行通话;
(2)主叫不启用SRTP,被叫使用允许且强制时,禁止呼叫,会接收到一个488的不接受应答;
(3)主叫开启SRTP但不强制,被叫为不启用/允许但不强制/允许且强制时,均使用加密方式;
(4)主叫开启SRTP且强制,被叫为不启用/允许但不强制/允许且强制时,均使用加密方式。
(5)加密方式协商不成功也会提示488不接受的应答,如服务器只支持AES 128 bit的加密方式,而设备采用AES 256 bit加密方式,则无法成功呼叫。
在这里插入图片描述
UDP注册模式下
SIP协议九(SRTP,Session time处理流程)_第1张图片
Invite包的SDP携带信息SRTP信息:
SIP协议九(SRTP,Session time处理流程)_第2张图片
200 OK包中的SDP携带SRTP信息:
SIP协议九(SRTP,Session time处理流程)_第3张图片
当使用TLS方式注册
wireshark在未解密的情况下是抓不到相关的SIP包的,而且互发语音包时,TLS一方并不是采用SRTP协议发送语音包,而是采用RTP转码的形式,直接将RTP设置为加密模式。如下图:
SIP协议九(SRTP,Session time处理流程)_第4张图片
因为该话机采用的是TLS注册方式,所以A所发的包为加密的包,wireshark没有解密就抓不到SIP包,现在抓到的包为B和UCM的SIP流程发包情况,但是在RTP流中,我们可以看到A(192.168.79.14)和UCM之间发送的包为RTP形式,而并非SRTP。那我们怎么判断该RTP是加密了的呢?那么我们就要看RTP包里的字段payload值了。通常情况下,正常的RTP包的payload值呈现出来的是一串比较规整的随机数,如图所示:
在这里插入图片描述

Session Time处理流程

Session Timer的功能:就是在通话过程中通过re-INVITE和UPDATE方法进行周期性的会话刷新,以判断通话两端是否存活。(A打给B,B挂断,A不知道B已经挂断,在这个模式下通过接受或者发送re-Invite和update的方法得知B已经挂断)

Session Timer主要引入两个参数:会话超时时间,最小超时时间
SIP协议九(SRTP,Session time处理流程)_第5张图片
(1) 会话超时表示会话超时时间,当已经协商确定会话超时值,那么该会话将在(会话超时/2)的时间用re-INVITE或者UPDATE的请求进行会话更新。一旦通话时间间隔= 会话超时时间,还没有通过UPDATE或 re-INVITE信息没有刷新,则通话自动结束。
(2) 最小超时表示会话间隔的最小值,以秒为单位。当它被用在INVITE或UPDATE请求中时,用来表示该会话所要使用的会话间隔的最小值。当它出现在请求或响应中,它的值不能小于90秒。如果这个头字段没有被指定,就取它的缺省值90秒。
(3)UAC指定刷新对象:主动拨打电话时,在Invite中携带会话超时和最小超时头域,并读取"UAC指定刷新对象"的值,如果是Omit则不带refresher头域,让被叫指定会话更新方,如果是UAS/UAC,则携带refresher=UAS/UAC,主叫指定会话更新方。
SIP通信中,在一个事务中,UAC(User Agent Client)用于发起请求,UAS(User Agent Server)用于接收请求。
(4)UAS指定刷新对象:被叫接听电话时,查看来电Invite 是否存在refresher,如果没有,则读取"UAS指定刷新对象"的值,携带在回复的200 ok中,如果有,则直接使用该值,携带在回复的200 ok中。
(5)UPDATE和re-INVITE方法 会话更新默认使用UPDATA方法进行刷新;如果需要使用INVITE方法进行会话更新,可以登录话机A的WEB,在账号的SIP设置界面,勾选"强制INVITE",那么在后面的通话中,话机A作为刷新者进行会话刷新时,会使用INVITE方法而不是UPDATE;

会话刷新者的协商

话机上开启会话超时,表示该话机支持Session Timer,需要请求Session Timer功能协商,需要在话机web页面勾选主叫请求计时(话机作为主叫时,在发送的INVITE中携带SessionTimer参数,请求会话刷新)或者勾选被叫请求计时(话机作为被叫时,在主叫未请求会话刷新的情况下,会在200OK中携带SessionTimer参数,请求会话刷新)。 而在通话中,由哪一方发送UPDATE和re-INVITE方法进行周期性的会话刷新,主要是通过会话建立的SIP信令协商。

UAC指定刷新对象

(1)话机A配置如下:
SIP协议九(SRTP,Session time处理流程)_第6张图片
(2)话机A向话机B发送INVITE请求,在发送的INVITE方法中的Supported头域中加入timer标签,并携带Session-Expire和Min-SE和refresher;
SIP协议九(SRTP,Session time处理流程)_第7张图片
(3)话机B收到A的INVITE后,检查话机A的Session-Expires值比自己的Min-SE值大,就在响应的200OK中写入话机A的Session-Expires值,且话机A的INVITE中有携带refresher=uac,此时B会忽略自己的"UAS指定刷新对象"选项值,而在200OK中写入话机A的refresher值,如下图:
SIP协议九(SRTP,Session time处理流程)_第8张图片
(4)Session Timer协商Session-Expires=180,refresher=UAC,所以在接下来的通话中,话机A每隔Session-Expires/2长的时间发送UPDATE进行会话刷新
SIP协议九(SRTP,Session time处理流程)_第9张图片
SIP协议九(SRTP,Session time处理流程)_第10张图片
(5)在通话中,如果话机B网络出现问题,话机A发送UPDATE后一直没有收到话机B响应的200 OK,在时间间隔了3/4 Session-Expires时,就发送bye请求拆断与话机B的通话

UAC没有指定刷新对象

(1)话机A配置如下:
SIP协议九(SRTP,Session time处理流程)_第11张图片
(2)话机A向话机B发送INVITE请求,在发送的INVITE方法中的Supported头域中加入timer标签,并携带Session-Expire和Min-SE。由于话机A没有指定刷新对象,所以INVITE中没有携带refresher;
SIP协议九(SRTP,Session time处理流程)_第12张图片
(3)话机B收到A的INVITE后,检查话机A的Session-Expire值比自己的Min-SE值大,就在响应的200OK中写入话机A的Session-Expires值,话机A的INVITE中没有携带refresher,所以话机B在200OK中写入自己的"UAS指定刷新对象"选项的值refresher=UAS,如下图:
SIP协议九(SRTP,Session time处理流程)_第13张图片
(4)Session Timer协商的最后结果为Session-Expires=180,refresher=UAS,所以在接下来的通话中,话机B每隔Session-Expires/2长的时间发送UPDATE进行会话刷新;从数据包中可以看到,此时话机B发送的UPDATE中,携带的refresher=UAC,因为此时是话机B向话机A发送UPDATE,在这个过程中话机B是请求发起者UAC,话机A是请求的接收者UAS,而在200 OK中协商的refresher是话机B,所以B发送UPDATE时,refresher=UAC。
在这里插入图片描述
SIP协议九(SRTP,Session time处理流程)_第14张图片
5)在上一个例子中提到,发送的UPDATE一直没有收到200 OK响应时,在时间间隔了3/4 Session-Expires时会自动拆断通话。还有一种情况,话机也会自动拆断通话。如:话机B网络断开,导致话机A在规定的周期时间(Session-Expires/2)里没有收到话机B发送的会话刷新UPDATE,话机A就可以判断话机B已经不在通话中,在3/4的Session-Expires时间发送bye请求拆断与话机B的通话,话机A退出通话界面。

422回应代码

422响应代码出现在会话协商过程中,当Session-Expires的间隔太小(小于UAS所支持的Min-SE头字段的值)时,UAS返回422代码要求UAC重新协商Session-Expires,UAC将422返回的Min-SE的值写入INVITE包含的Session-Expires字段,重新发送INVITE给UAS,请求会话刷新。
(1)话机A的配置如下:
SIP协议九(SRTP,Session time处理流程)_第15张图片
(2)话机B的配置如下:
SIP协议九(SRTP,Session time处理流程)_第16张图片
(3)话机A呼叫话机B,话机B收到A的INVITE后,检查到话机A的Session-Expiresr值180比自己的Min-SE值270小,不能接受,就响应422 Session Interval Too Small给话机A,并在422中写入自己能接受的Session-Expires值和Min-SE值
(4)话机A收到422响应后,会将422中携带的Session-Expires值和Min-SE写入INVITE中重新发给话机B,这样A请求Session-Expires值就在B可接受的范围,B响应200OK,与A成功协商建立通话;

你可能感兴趣的:(SIP)