了解PRACK

概述
SIP定义了两种应答:临时(provisional)和最终(final)。
最终应答传送的是请求处理的结果,是可靠性的(reliably)。而临时应答传送的是处理过程的信息,由RFC3261是非可靠的。
但是由现在的情况看来,特别是与PSTN交互过程中发现:临时应答也应该是可靠的。

RFC3262定义了一种SIP可选的扩展方法——PRACK(provisionalack),用于支持临时应答的可靠性。它的实现机制如下:
借鉴了INVITE请求的2**应答的可靠性机制:通过构造新的事务来重发ACK来确认接收到了2**应答,这种可靠性是端点到端点(end-to-end)的。对于1**(除100外)的应答,使用PRACK来终止该应答的重发。PRACK是对临时应答而言,不同于ACK,是一种跟BYE一样的正常SIP消息。所以它的可靠性是点到点(hop-by-hop)的,且具有应答。

每个临时响应都有一个顺序号,在于RSeq头域中。而PRACK消息包括了RAck头域,指示回应的临时相应的顺序号,且不具有积累效果。


UAS行为
如果请求INVITE的头域Supported中包括选项100rel,UAS可能发送可靠性临时响应;如果请求INVITE的头域Require中包括选项100rel,UAS必须发送可靠性临时响应,否则发送420(Bad Extension)且Unsupported头域中包括选项100rel。
但是,如果请求中不满足以上任一情况,则不能支持可靠临时相应。

UAS需要发送可靠临时相应原因:
多种原因。其中之一为根据RFC3261,如果UAS需要一段时间来处理请求,UAS需要发送临时相应消息给Proxies来“延时(extention)”,因为Proxy一般只保留请求上下文3分钟,所以为了避免丢失消息,常需要1分钟重发一次。而使用可靠临时相应只需2分半钟重发一次。

可靠临时响应的构建:
只需在RFC3261的基础上进行一些补充:必须包括Require头域(包括100rel选项)和RSeq头域(值为1到2**32-1,是对话中是唯一的)。

PRACK和临时响应的匹配:
PRACK首先必须和临时相应在同一个对话之中,RAck中的方法、CSeq-num和response-num分别对应于临时响应CSeq中的方法、CSeq中的序号和RSeq的序号。

如果接受到的PRACK无法找到相匹配的临时相应,则回应481;否则回应2**,并停止该临时相应的重发。
如果在64*T1时间内没有接收到PRACK,则UAS回应5**。
在第一个可靠响应得到回应,才可以发送第二个可靠相应。对于同一个请求,第二个可靠相应的RSeq比第一个大1。

UAS可以在可靠临时响应未收到PRACK情况下发送最终应答,除了以下情况:最终响应为2**且其中一个临时相应中有媒体描述。如果最终响应已经发送,则临时相应的重发和新的临时消息发送都不能进行。


UAC行为
如果需要可靠临时应答,则在INVITE请求的Require头域中包含100rel选项,而其他方法中的Require中不能包含该选项;如果将可靠临时应答的需求的决定权交给UAS,则应在INVITE的头域Supported中包含100rel选项。
当头域Require中包含100rel的临时消息到来时,且临时消息非100,说明临时消息是可靠的。UAC接下来在对话中建立PRACK请求,跟其它在对话中建立的非INVITE请求一样,UAC不应在接收到重发的可靠临时应答时重发PRACK,即使重发不会引起协议错误。

一个临时应答到来时,如果dialog ID、CSeq、和RSeq跟之前的一样时,该应答视为重发,该应答必须被丢弃。所以,UAC需要记录RSeq值直到最终应答的到来。
如果新的一个临时应答到来时,需要判断RSeq是否比之前的值大。如果不是的话,则不能回应PRACK,可以丢弃该临时应答或缓存起来以等待没有到来的老的临时应答。

如果在最终应答到来之后收到临时应答,可以回应或直接丢弃。


Offer/Answer模型和PRACK方法
(详见RFC3262或之后的关于Offer/Answer的文章)


1)RFC3262中不支持除INVITE外其它方法的可靠性临时响应,除非是能建立对话的扩展方法。
2)UAS不能发送可靠的100临时相应。因为100响应一般是hop-by-hop的,即消息的可靠性在于hop的两端之间,而不在于端到端之间;而这里实现的可靠性是端到端之间的,即接受消息初始发送和最终接受方,能满足消息真正交互成功。但是PRACK的可靠性又是hop-by-hop的,即PRACK方法的消息交互依靠的是hop之间的确认。


参考
RFC3262

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434903.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Silverlight实例教程 - Out of Browser开篇

众所周知,学习一门IT技术,最关键的是实践,无论是软件开发还是网络调试,只要在真实环境下勤于动手和思考,很快就能掌握一门技术,Silverlight也不例外。为了帮助更多朋友快速学习掌握Silverlight应用开发&…

河流水质指标预测与不确定性分析:机器学习模型的比较研究--文献阅读

电导率 (EC)、氢气功率 (pH)、溶解氧 (DO)、总溶解固体 (TDS)、硫酸盐 (SO4)、镁 (Mg)、氯 (Cl)、总大肠菌群 (TC) 和生化需氧量 (BOD) DO、BOD、化学需氧量 (COD)、pH、硝酸盐 (NO3) 和悬浮固体 (SS)

python科学计算三剑客_1-python数据分析-数据分析介绍、数据分析三剑客之NumPy

数据分析三剑客numpypandas(重点)matplotlibnumpy模块NumPy(Numerical Python) 是 Python 语言中做科学计算的基础库。侧重在于数值计算,也是大部分Python科学计算库的基础,多用于在大型、多维数组上执行的数值运算。重点numpy数组的创建numpy索引和切片…

SIP可靠性(SIP Reliability)

根据RFC3261,SIPUA必须支持TCP及UDP底层传输协议。这两种方式除了使用方式不一样之外,对SIP协议自身的影响主要体现在可靠性处理上。 SIP可靠性机制主要是为了支持不可靠传输层协议,如UDP。当SIP使用的传输层协议为TCP或TLS时,这种…

可以无限增加iPhone 的图标吗?

可以无限增加iPhone 的图标吗?iPhone屏幕上每个图标都对应一个应用程序,目前苹果商店中应用程序数量已经超过40万个,我们又能在手机里放多少呢?有人可能会说那要取决于iPhone的存储容量有多大,确实如此,那么如果假设空…

在日本山区流域使用支持向量机和 bagging、boosting 和 stacking 集成机器学习框架改进滑坡评估--文献阅读

为了在基于过程的模型中准确表示边坡稳定性,有必要包含大量涉及滑坡几何形状和内部结构的局部特征的特征。这包括但不限于斜坡的分层和不连续性、运动裂缝、裂片、陡坡、地垒/地堑结构、降雨、空气和土壤温度、土壤水分含量、许多点的地下水位、地表和深度但是&…

android 蒙版图片带拖动_推荐一个好用小巧的Android引导蒙版(浮层)库

更新:目前该库已更新v2.0版本,修改了调用api,详细使用可以看:可能是最好用的Android引导层库前言每当一个项目开发一个新功能,总会想办法及时让用户得知有这样一个新功能,这时通常会采用引导页或者蒙版(浮层…

用户代理行为

概述 用户代理分两种:UAC和UAS。区分的依据在于请求方和响应方。 当一个请求发生之时,即使用某个方法,根据请求方和响应方产生了UAC和UAS,从而可以建立起事务(Transaction)来。所以UAC和UAS是对某个事务而言…

AX 2009 界面伸缩功能

界面伸缩功能 在一个界面下,放置多个Grid之后,数据太多,要有个能推拉伸缩的功能,如下图: 中间横条可以上下拉动,折叠处可以关闭显示整个Grid 横条要代码实现,折叠只要设置一下Group就行。 纵向空…

使用增强回归树和随机森林模型进行溪流水质预测--文献阅读

流域特征和气候变量(例如地形、土壤、气候数据)也会影响河流水质。例如,陡坡可能会通过将污染物转移到溪流中来影响溪流水质,从而导致水质恶化。同样,土壤特性也会影响水质。例如,以母岩为主的流域显示出较…

解决方案架构师我需要懂代码吗_架构师不写代码,能行吗?

原标题:架构师不写代码,能行吗?从什么时候起,技术角色的提升就意味着脱离技术与交付?CTO 不写代码已经引起诸多争议了,架构师也不写代码,能行吗?就目前看来这似乎没什么问题。毕竟&a…

机器学习在地质灾害的文章--文献阅读

第一篇 Improved landslide assessment using support vector machine with bagging, boosting, and stacking ensemble machine learning framework in a mountainous watershed, Japan | SpringerLinkHeavy rainfall in mountainous terrain can trigger numerous landslide…

取消一个请求(Cancel)

CANCEL请求,就像名字所说的,是用来取消客户端发起的上一个请求的。 CANCEL请求UAS去终止上一个请求并且对上一个请求产生一个错误的应答。CANCEL对UAS已经给出终结应答的请求无效。所以,CANCEL请求的最大用处是取消需要服务器长时间处理的请求…

NYOJ88(数论)

题意明确,让计算出起始有m个金片的汉诺塔金片全部移动到另外一个针上时需要移动的最少步数是多少?(由于结果太大,现在只要求算出结果的十进制位最后六位) 解题思路:大家都很熟悉汉诺塔求移动次数公式为f(n1…

Linq 学习笔记(二)

Linq 学习笔记(二) 下面就来介绍一些查询的示例: 1。Linq查询 var racers from r in Formula1.GetChampions()where r.Wins > 15 && (r.Country "Brazil" || r.Country "Austria") select r;foreach (var …

机器学习在水文地质方面的文章--文献阅读

第一篇 Ensemble machine learning paradigms in hydrology: A review - ScienceDirecthttps://www.sciencedirect.com/science/article/pii/S0022169421003139?via%3Dihub第二篇 Stream water quality prediction using boosted regression tree and random forest models …

查询能力(SIP OPTIONS)

SIP方法OPTIONS允许一个UA来查询另外一个UA或者proxy服务器的能力。这个提供客户端一个手段来查询服务端支持的方法,内容类型,扩展,codecs等等。比如,在客户端试图在INVITE请求头中增加一个请求字段选项的时候,它并不知…

单体预聚合的目的是什么_高分子化学实验指导书-修改-2012

高分子化学实验指导书任课教师姓名:王小慧王小英所用教材:《高分子化学实验》何卫东主编中国科学技术大学出版社选读参考书:《高分子化学实验》梁晖卢江主编化学工业出版社一、教学形式1、课前,学生通过阅读参考书和《高分子化学实…

MemDC,GDI绘制注意点

最近绘制老犯同样的错误,记录下: 1.MemDC中的MemBmp大小一定要设定好,经常设小了,后面的绘不出来,同时最后dc.bitblt时,大小一定要和MemBmp 一致,同样经常是MemBmp必变了,bitblt的rcDest没变&am…

基于集成学习的不平衡数据集分类问题研究--文献阅读

参考文献 基于集成学习的不平衡数据集分类问题研究 - 中国知网https://kns.cnki.net/kcms/detail/detail.aspx?dbcodeCMFD&dbnameCMFD202201&filename1021697818.nh&uniplatformNZKPT&vK9J_5NETTyZXPhDr5D6KwISCv2zm0skRm7rEZ0KmYS0Yv_zs562Re8oiwR5h_ylK 文…