Session Timer机制分析

功能介绍

会话初始化协议(SIP)并没有为所建立的会话定义存活机制。尽管用户代理可以通过会话特定的机制判断会话是否超时,但是代理服务器却做不到这点。如此一来,代理服务器有时会无法判断会话是否还是活动的。例如,当一个用户代理在会话结束时发送BYE消息失败,或者由于网络问题BYE消息丢失,代理服务器将不会知道会话已经结束。在这种情况下,代理服务器将保持呼叫的状态并且无法知道呼叫状态信息何时失效。

为了解决这个问题,RFC4028为SIP会话定义了一种存活机制。用户代理周期性的发送re-INVITE或UPDATE请求用来保持会话的活动。会话更新请求的间隔通过其定义的协商机制决定。如果在间隔内没有收到会话更新请求,该会话被认为已经终止。用户代理会发送一个BYE消息,代理服务器则将该呼叫的所移除。

工作原理

UAC通过发送一个INVITE消息发起流程,这个消息包括一个带有可选标签“timer”的Supported头字段,用来表明支持Session Timer功能。该请求通过代理服务器传递,所经过的任一个代理服务器都可以依据他们的兴趣建立会话定时器。每个代理服务器都可以在请求中插入一个Session-Expires头字段和一个Min-SE头字段(前提是请求中还没有这些字段),或者修改上述已存在头字段的值。

Min-SE头字段为会话更新间隔建立了下限,也就是处理这条请求消息的SIP代理的最快会话刷新率。这个头字段的目的是防止怀有恶意的代理服务器设置任意短的更新间隔以致它的邻居代理负荷超载。处理请求的每个代理服务器可以提高这个下限(实际上就是提高刷新的周期),但是不能降低下限。

Session-Expires头字段为会话更新间隔建立了上限,也就是任何一个代理服务器在处理一个请求之后必须为这个会话保持状态的时间周期。任何服务于该请求的代理可以降低这个值,但必须大于Min-SE头字段指定的值。

如果Session-Expires的间隔太小(小于代理服务器要维护的Min-SE头字段的值),那么代理服务器将拒绝这个请求并返回一个422响应。该响应包含一个Min-SE头字段表明它所支持的最小会话间隔。UAC再次尝试发送请求,这次请求中包含了Min-SE头字段,头字段等于先前接收到的所有422响应中最大的Min-SE头字段。这样一来,最小定时器就能满足所经过的所有代理服务器的约束条件。

在几次INVITE/422消息的反复传送后,请求最终到达UAS。UAS可以调整会话间隔的值就好像它自己也是一个代理服务器。之后,它将这个最终的会话间隔发入2xx响应的Session-Expires头字段。Session-Expires头字段还包含一个“refresher”参数用来表示更新的执行者(是当前的UAC还是UAS)。当2xx响应沿代理服务器链返回时,任何代理服务器可以观察这个最终的会话间隔但不能修改它。

通过响应中的Session-Expires头字段,UAC和UAS都知道会话定时器是活动的,它何时终止以及谁在更新会话。在终止前的某个时刻,当前活动的更新者生成一个会话更新请求,可以是一个re-INVITE或者UPDATE请求。如果更新者始终得不到这个会话更新请求的响应,它就会发送一个BYE消息结束会话。同样,如果另一端在会话终止前始终收不到会话更新请求,它也会发送一个BYE消息结束会话。

图1-1 Sesstion Timer正常工作流程示意图

相关参数

(1) Session-Expires头字段

Session-Expires头字段用于传达SIP会话的会话间隔。 该字段只包含在INVITE或UPDATE请求,也包含在INVITE或UPDATE消息的任何一个2xx响应中。当在已经协商确定Session-Expires值,那么该会话将在Session-Expires/2的时间进行会话更新,该更新方式可以是re-INVITE或者UPDATE的请求。

(2) Min-SE头字段

Min-SE头字段表示会话间隔的最小值,以秒为单位。当它被用在INVITE或UPDATE请求中时,用来表示该会话所要使用的会话间隔的最小值。当它出现在请求或响应中,它的值不能小于90秒。如果这个头字段没有被指定,就取它的缺省值90秒。

(3)422回应代码

422响应代码出现在会话协商过程中,当Session-Expires的间隔太小(小于UAS所支持的Min-SE头字段的值)时,UAS将回应该代码要求UAC重新协商。

功能相关测试重点

(1)话机终端是否支持Session Timer功能,相关头字段信息:

Supported: timer;

(2)会话更新的时间准确性,每次更新的时间间隔应为已经协商确定的Session-Expires值一半;

(3)会话更新者的确定,可能是UAC也可能是UAS,但无论是哪方进行更新都应该有相应的更新请求或者回应;

(4) 逻辑验证会话更新请求发送后,如果在Session-Expires/2的时间内没有得到对方的响应(200 OK)信息,则发送BYE以拆掉当前会话;同样的,假如在规定时间内得不到更新者(Refresher)发送的会话更新请求信息,话机终端是否也会发送BYE;

(5)话机终端在更新过程中,如果更新者(Reresher)变动后,其会话的后续更新逻辑验证;

(6) 不是所有的参与者都支持Session Timer情况下的会话更新逻辑验证。

Session Timer机制分析的更多相关文章

  1. 从session实现机制分析模拟请求验证码的可行性(转)

    悲剧了,发现写完这篇blog没有配上这个格调超高的标题.   1.0问题背景 现在要实现一个带验证码网站的的自动登陆功能.验证码识别过程不再这篇文章的讨论之中.(之后有篇文章我会详细的总结验证码的识别 ...

  2. 分布式session共享机制分析

    使用配置: 1.在pom文件中引入spring-session的jar包 <!--springsession--><dependency><groupId>org. ...

  3. zookeeper session tracker机制分析

    说到zookeeper session管理 ,免不了要问 什么是session? session id/session是如何产生的? session 信息如何存储? 本文以session tracke ...

  4. Linux mips64r2 PCI中断路由机制分析

    Linux mips64r2 PCI中断路由机制分析 本文主要分析mips64r2 PCI设备中断路由原理和irq号分配实现方法,并尝试回答如下问题: PCI设备驱动中断注册(request_irq) ...

  5. Linux信号(signal) 机制分析

    Linux信号(signal) 机制分析 [摘要]本文分析了Linux内核对于信号的实现机制和应用层的相关处理.首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理.接着分析了内核 ...

  6. Linux x86_64 APIC中断路由机制分析

    不同CPU体系间的中断控制器工作原理有较大差异,本文是<Linux mips64r2 PCI中断路由机制分析>的姊妹篇,主要分析Broadwell-DE X86_64 APIC中断路由原理 ...

  7. Linux kernel workqueue机制分析

    Linux kernel workqueue机制分析 在内核编程中,workqueue机制是最常用的异步处理方式.本文主要基于linux kernel 3.10.108的workqueue文档分析其基 ...

  8. session timer(一)

    功能介绍 SIP并没有为所建立的会话定义存活机制. 虽然用户代理能够通过会话特定的机制推断会话是否超时,可是代理server却做不到这点. 如此一来.代理server有时会无法推断会话是否还是活动的. ...

  9. flask 源码专题(六):session处理机制

    前言 flask_session是flask框架实现session功能的一个插件,用来替代flask自带的session实现机制,flask默认的session信息保存在cookie中,不够安全和灵活 ...

随机推荐

  1. Flume-自定义 Source 读取 MySQL 数据

    开源实现:https://github.com/keedio/flume-ng-sql-source 这里记录的是自己手动实现. 测试中要读取的表 CREATE TABLE `student` ( ` ...

  2. Qt编写自定义控件20-自定义饼图

    前言 上次在写可视化数据大屏电子看板项目的时候,为了逐步移除对QChart的依赖(主要是因为QChart真的太垃圾了,是所有Qt的模块中源码最烂的一个,看过源码的人没有一个不吐槽,不仅不支持10W级别 ...

  3. 【leetcode】507. Perfect Number

    problem 507. Perfect Number solution: /* class Solution { public: bool checkPerfectNumber(int num) { ...

  4. Bootstrap, 模态框实现值传递,自动勾选

    目录 Bootstrap,模态框自动勾选,值传递 1.父页面 2. 子页面(modal) 模态框 Bootstrap,模态框自动勾选,值传递 场景: ​ 有一个这样的需求, 在父页面有一个table, ...

  5. 集群架构04·NFS服务,环境安装

    初识 网络文件系统Netwrok File System,类似于wiin10的网络共享 功能:通过网络让不同主机系统之间可以共享文件或目录 客户端通过挂载的方式将服务器端共享的目录挂载到本地系统. 集 ...

  6. NMS(Non-Maximum Suppression) 非极大值抑制

    NMS  非极大值抑制:找到局部最大值,并删除邻域内其他的值. 简单说一下流程: 首先剔除背景(背景无需NMS),假设有6个边界框,根据分类置信度对这6个边界框做降序排列,假设顺序为A.B.C.D.E ...

  7. 【FFMPEG】【ARM-Linux开发】fmpeg安装第三方编码器(encoder)库,ffmpeg编码h264(完)

    fmpeg安装第三方编码器(encoder)库,ffmpeg编码h264(完) ffmpeg安装第三方编码器(encoder)库 关键词:ffmpeg.编码h264.第三方encoder 安装好了ff ...

  8. 【FFMPEG】VS2015编译FFMPEG

     系统环境:Windows 10 64位 需要安装的软件和工具: Visual Studio 2015 With Update 3 MSYS2 YASM 一.VS2015 安装VS2015时,选择 ...

  9. NDK学习笔记-JNI的异常处理与缓存策略

    在使用JNI的时候,可能会产生异常,此时就需要对异常进行处理 异常处理 JNI抛出Throwable异常,在Java层可以用Throwable捕捉 而在C只有清空异常这种处理 但如果在JNI中通过Th ...

  10. 最新 苏宁java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.苏宁等10家互联网公司的校招Offer,因为某些自身原因最终选择了苏宁.6.7月主要是做系统复习.项目复盘.LeetCode ...