SIP:100rel 扩展

100rel扩展即是对中间状态响应的确认(即1xx的响应码)。原先在sip里,只有针对invite请求的200ok响应才会有ack,那么当中间状态响应携带重要的会话参数信息时,例如183响应,客户端是否收到响应就没有ack请求了,于是就定义了prack这一请求消息,即对中间状态响应的确认请求。当sip发送者支持这一扩展时,及在support头域增加这个100rel消息,当server端给与1xx响应时,可以在头域里的require字段要求这一100rel的能力。此时,sip发送者,发送prack消息。

PRACK用于保证1**(除100外)的可靠传输,如果1**响应中的的Require头部中带有100rel这个参数,那么client端收到这个1**后,就需要发PRACK保证这个1**的可靠传输,当server端收到PRACK后,说对端已经收到了这个1**,此时server需要回PRACK的200响应。

按照RFC3261,,如果请求中有100rel标志,UAS必须用可靠传输的方式发送非100的临时响应(101-199),如果UAS不愿意这样做,它必须利用420(Bad Extension)拒掉这个请求.

假设UAC接收到需要可靠传输的非100临时响应后(101-199),它必须用PRACK方法创建一新请求发送给UAS,以确认已收到此响应,UAS会回应一200OK。

有的流程有PRACK,说明它有100rel的支持,没有PRACK说明不支持100rel。

UAC发起的INVITE中含有Supported: 100 rel,而UAS也支持该扩展并且在183响应中有Require:100rel,说明接下来会话中,对所有100以外的1xx响应,均要有PRACK回应。

uac如果不支持100rel,但uas要求支持100rel(Require:100rel),uac 发送CANCEL,切断会话。

uac如果不支持100rel,但uas也不支持或不要求支持100rel,只是在后面的过程中,uac对应接收到的临时响应,如180,183等,不需要发送prack回应而已,与是否会出现183没有关系。

100rel是一个任选标记,如果INVITE请求的Supported头域中包含该标记,说明发送请求的UAC支持PRACK扩展。

supported:100rel与required:100rel的区别在于,后者是一个强制性要求,要求对方必须支持prack,否则通话无法建立

SIP:100rel 扩展的更多相关文章

  1. 使用c/c++扩展python

    用python脚本写应用比较方便,但有时候由于种种原因需要扩展python(比如给程序提供python接口等). 之前一直想整理下,今天终于坐下来把这件事情给做了,这里记录下,也方便我以后查阅. 说明 ...

  2. SIP简介,第1部分:SIP初探

    说明:以下内容来着之前下载的一份文档,现将概念部分摘录在BLog,完成文档将放在文件中. SIP简介,第1部分:SIP初探 时间:2006-04-07作者:Emmanuel Proulx浏览次数: 2 ...

  3. Python - SIP参考指南 - 介绍

    介绍 本文是SIP4.18的参考指南.SIP是一种Python工具,用于自动生成Python与C.C++库的绑定.SIP最初是在1998年用PyQt开发的,用于Python与Qt GUI toolki ...

  4. SIP简介

    说明:以下内容来着之前下载的一份文档,现将概念部分摘录在BLog,如需要完整文档将放在文件中或留言. SIP简介,第1部分:SIP初探 时间:2006-04-07作者:Emmanuel Proulx浏 ...

  5. [SIP00]SIP 概念总结

    SIP ---------------------------   Session Initiation Protocol ---------------------------   create, ...

  6. PJSUA2开发文档--第七章 呼叫 Calls类

    7   呼叫Calls 呼叫由Call类处理 7.1 子类化Call类 要使用Call类,应用程序应创建子类,如: class MyCall : public Call { public: MyCal ...

  7. PJSUA2开发文档--第五章 帐户(号)Accounts

    第五章 帐户(号) 帐户提供正在使用该应用程序的用户的身份(或身份).一个帐户有一个与之相关的SIP统一资源标识符(URI).在SIP术语中,该URI用作该人的记录地址( Address of Rec ...

  8. 开源网络抓包与分析框架学习-Packetbeat篇

    开源简介packbeat是一个开源的实时网络抓包与分析框架,内置了很多常见的协议捕获及解析,如HTTP.MySQL.Redis等.在实际使用中,通常和Elasticsearch以及kibana联合使用 ...

  9. IM协议

    四种协议英文全称与简称 1->IMPP(Instant Messaging And PresenceProtocol):即时信息和空间协议 2->PRIM(Presence and Ins ...

随机推荐

  1. java 接口和抽象类的一个最大的区别

    写在前面,下面是在百度百科上看到的,之前就看过,这次再看感觉有更深的体会,真的是这样,每一个脚印都会留下痕迹 java接口和java抽象类有太多相似的地方,又有太多特别的地方,这里说下两者之间的一个最 ...

  2. Leetcode: Longest Palindromic Substring && Summary: Palindrome

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt ...

  3. sql日期比较

    sql 中 datetime日期类型字段比较 mysql 可以直接用大于号,也可以用  between  and SELECT * FROM staff WHERE UPDATE_DATE >= ...

  4. Greenwich.SR2版本的Spring Cloud Config+BUS实例

    Spring Cloud Config统一的配置中心同注册中心Eureka一样,也分服务端和客户端.服务端用来保存配置信息,客户端用来读取.它的优势是基于Git仓库,支持多环境.多分支配置.动态刷新. ...

  5. OpenStack Smaug项目简介

    1 项目简介 Smaug是一个OpenStack中提供应用数据保护服务的项目. 2 项目使命 在OpenStack中建立应用数据保护的标准和规范. 保护OpenStack中的任何资源以及资源的依赖项. ...

  6. Windows .net服务器系列 wmic命令使用示例--Examples of WMIC commands for Windows .NET SERVER Family

    1.0 Method execution: NICCONFIG (Win32_NetworkAdapterConfiguration) WMIC NICCONFIG WHERE Index=1 CAL ...

  7. laravel中redis pipeline用法说明

    $res = Redis::pipeline(function($pipe) use($params) { for ($i = 0; $i < 1000; $i++) { $pipe->g ...

  8. 聊聊Docker理论知识(二)

    目录 一.什么是Dcoker 二.Docker的三大核心概念 1.镜像(Image) 2.容器(Container) 3.仓库(Repository) 三.Docker架构组成 四.Docker的技术 ...

  9. unity, 替换shader渲染(Rendering with Replaced Shaders)【转】

    实现特效,尤其是一些后处理特效,经常需要将各物体的shader替换为另一套shader进行渲染到纹理,再后再进行合成或以某种叠加方式叠加到最后的画面上去. 再复杂一点儿的,可能不同的物体所用的替换sh ...

  10. mybatis 找不到映射器xml文件 (idea)

    原因是: idea不会编译src的java目录的xml文件 所以解决思路就是:将IDEA maven项目中src源代码下的xml等资源文件编译进classes文件夹 具体操作方法就是:配置maven的 ...