session timer(一)
功能介绍
SIP并没有为所建立的会话定义存活机制。
虽然用户代理能够通过会话特定的机制推断会话是否超时,可是代理server却做不到这点。
如此一来。代理server有时会无法推断会话是否还是活动的。
比如,当一个用户代理在会话结束时发送BYE消息失败,或者因为网络问题BYE消息丢失,代理server将不会知道会话已经结束。在这样的情况下,代理server将保持呼叫的状态而且无法知道呼叫状态信息何时失效。
为了解决问题,RFC4028为SIP会话定义了一种存活机制。用户代理或代理server周期性发送re-INVITE或UPDATE请求用来保持会话的活动。会话更新请求的间隔通过其定义的协商机制决定。
假设在间隔内没有收到会话更新请求,该会话被觉得已经终止。
工作原理
UAC通过INVITE消息发起,这个消息包含一个带有可选标签“timer”的Supported头字段,用来表明支持Session
Timer功能。该请求通过代理server传递,所经过的任代理server都能够根据他们的兴趣建立会话定时器。每一个代理server都能够在请求中插入一个Session-Expires头字段和一个Min-SE头字段(前提是请求中还没有这些字段),或者改动上述已存在头字段的值。
Min-SE头字段为会话更新间隔建立最小刷新时间。
这个头字段的目的是防止怀有恶意的代理server设置随意短的更新间隔以致它的邻居代理负荷超载。
处理请求的每一个代理server能够提高这个下限(实际上就是提高刷新的周期),可是不能减少下限。
Session-Expires头字段为会话更新间隔建立最长刷新时间。不论什么服务于该请求的代理能够减少这个值。但必须大于Min-SE头字段指定的值。
假设Session-Expires的间隔太小(小于代理server要维护的Min-SE头字段的值)。那么代理server将拒绝这个请求并返回一个422响应。该响应包括一个Min-SE头字段表明它所支持的最小会话间隔。UAC再次尝试发送请求。这次请求中包括了Min-SE头字段,头字段等于先前接收到的全部422响应中最大的Min-SE头字段。
这样一来。最小定时器就能满足所经过的全部代理server的约束条件。
在几次INVITE/422消息的重复传送后,请求终于到达UAS。UAS能够调整会话间隔的值就好像它自己也是一个代理server。
之后。它将这个终于的会话间隔增加2xx响应的Session-Expires头字段。
Session-Expires头字段还包括一个“refresher”參数用来表示更新的运行者(是当前的UAC还是UAS)。当2xx响应沿代理server返回时,不论什么代理server能够观察这个终于的会话间隔但不能改动它。
通过响应中的Session-Expires头字段,UAC和UAS都知道会话定时器是活动的。它何时终止以及谁在更新会话。在终止前的某个时刻,当前活动的更新者生成一个会话更新请求,能够是一个re-INVITE或者UPDATE请求。
假设更新者始终得不到这个会话更新请求的响应,它就会发送一个BYE消息结束会话。相同。假设还有一端在会话终止前始终收不到会话更新请求。它也会发送一个BYE消息结束会话。
相关參数
Session-Expires头字段用于传达SIP会话的会话间隔。该字段仅仅包括在INVITE或UPDATE请求。也包括在INVITE或UPDATE消息的不论什么一个2xx响应中。
当在已经协商确定Session-Expires值,那么该会话将在Session-Expires/2的时间进行会话更新,该更新方式能够是re-INVITE或者UPDATE的请求。
Min-SE头字段表示会话间隔的最小值。以秒为单位。
当它被用在INVITE或UPDATE请求中时。用来表示该会话所要使用的会话间隔的最小值。
422回应代码出如今会话协商过程中,当Session-Expires的间隔太小(小于UAS所支持的Min-SE头字段的值)时。UAS将回应要求UAC又一次协商
session timer(一)的更多相关文章
- Session Timer机制分析
Session Timer机制分析 功能介绍 会话初始化协议(SIP)并没有为所建立的会话定义存活机制.尽管用户代理可以通过会话特定的机制判断会话是否超时,但是代理服务器却做不到这点.如此一来,代理服 ...
- 关于无线的Idle Timeout和Session Timeout
1.Session Timeout Session Timer的默认值为1800s,也就是30min.Session Timeout:当该计时器超时时,使得客户端强制发生重认证,这个时间是从客户端认证 ...
- Understanding Kafka Consumer Groups and Consumer Lag
In this post, we will dive into the consumer side of this application ecosystem, which means looking ...
- 用websocket实现后台推送消息
1前台实现 connect:function() { var webSocketIP = window.CRM_CONFIG.WebSocketIP; var target = 'ws://'+web ...
- AWR報告詳解
AWR是Oracle 10g 版本 推出的新特性, 全称叫Automatic Workload Repository-自动负载信息库, AWR 是通过对比两次快照(snapshot)收集到的统计信息 ...
- [20190416]11g下那些latch是Exclusive的.txt
[20190416]11g下那些latch是Exclusive的.txt --//昨天测试了11g下那些latch是共享的,链接:--//是否反过来剩下的都是Exclusive的.继续测试: 1.环境 ...
- Java类MemoryUsage查看虚拟机的使用情况
原文地址:https://www.cnblogs.com/xubiao/p/5465473.html Java类MemoryUsage,通过MemoryUsage可以查看Java 虚拟机的内存池的内存 ...
- joomla对象注入漏洞分析
0x00 漏洞简单介绍 jooomla 1.5 到 3.4.5 的全部版本号中存在反序列化对象造成对象注入的漏洞,漏洞利用无须登录,直接在前台就可以运行随意PHP代码. Joomla 安全团队紧急公布 ...
- oracle编程艺术--runstst工具
runstats工具是< oracle database 9i/10g/11g编程艺术 深入数据库体系结构>作者写的一个统计性能工具,能对做同一件事的两个方法进行比较,得到孰优孰劣的结果. ...
随机推荐
- Spring Boot AutoConfiguration注解@ConditionalXXXX之前生今世
1.注解@Conditional的定义 @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.METHO ...
- Scala和范畴论 -- 对Monad的一点认识
Scala和范畴论 -- 对Monad的一点认识 背景 所有一切的开始都是因为这句话:一个单子(Monad)说白了不过就是自函子范畴上的一个幺半群而已,有什么难以理解的.第一次看到这句话是在这篇文章: ...
- Embedding Flash Fullscreen in the Browser Window
For Developers > Design Documents > Embedding Flash Fullscreen in the Browser Window Auth ...
- 手把手教你进行R语言的安装及安装过程中相关问题解决方案
这篇文章旨在为R语言的新手铺砖引路,行文相对基础,希望对在R语言安装上有问题的小伙伴提供帮助和指引.一.什么是 R 语言R 编程语言被广泛应用在统计科学和商业领域. 在各种编程语言排名中 R 语言的排 ...
- TF.LSTM实现
感悟:耗时最多的就是数据格式整理,其本身并不复杂 NN-LSTM-NN-SOFTMAX 数据格式:batch_size =>批大小,n_steps=>要建立多少lstm 0.原始输入数据格 ...
- HTML5按键打开摄像头和拍照
HTML5实现按键打开摄像头和拍照 步骤: 1.创建一个打开摄像头按钮的标签.video标签.拍照的按钮标签.画布 2.实现打开摄像头的功能 3.实现拍照功能 具体实现代码: <!DOCTY ...
- 紫书 习题 10-11 UVa 1646(斐波那契+高精度)
自己用手算一下可以发现是斐波那契数列,然后因为数字很大,用高精度 以后做题的时候记得算几个数据找规律 #include<cstdio> #include<cmath> #inc ...
- HN0I2000最优乘车 (最短路变形)
HN0I2000最优乘车 (最短路变形) 版权声明:本篇随笔版权归作者YJSheep(www.cnblogs.com/yangyaojia)所有,转载请保留原地址! [试题]为了简化城市公共汽车收费系 ...
- jsp静态引入(<%@ include file=""%>) 乱码问题
在web.xml中的web-app中加入这段话: <jsp-config> <jsp-property-group> <display-name>JSPConfig ...
- ArcSDE学习笔记---------使用
1.首先在 将下面四个jar包放到工程里 2.然后打开ArcMAP,在arcmap里建立属于你自己的表 3.然后在你的本地数据库上建立与arcmap的连接 完成这三步就可以开始对ArcSDE的数据进行 ...