一直以“简单”著称的SIP其实也没那么简单,不过任何事物想掌握它都很困难。

这篇文档旨在不断的记录SIP使用过程中遇到的各种疑惑和问题。

一、响应422 Session Interval Too Small

  发送的Invite消息如下:

INVITE sip:@192.168.8.11 SIP/2.0
Via: SIP/2.0/WS 9srpbdc87v1s.invalid;branch=z9hG4bK774681
Max-Forwards:
To: <sip:@192.168.8.11>
From: "" <sip:@192.168.8.11>;tag=ii5b0f08lb
Call-ID: 0egn2qmnq0hhrho2ccll
CSeq: INVITE
X-Can-Renegotiate: true
Contact: <sip:lo6vk6jn@9srpbdc87v1s.invalid;transport=ws;ob>
Content-Type: application/sdp
Session-Expires:
Allow: INVITE,ACK,CANCEL,BYE,UPDATE,MESSAGE,OPTIONS,REFER
Supported: timer,ice,replaces,outbound
User-Agent: JsSIP 0.7.
Content-Length: v=
o=- IN IP4 127.0.0.1
……

  收到的响应如下:

SIP/2.0  Session Interval Too Small
Via: SIP/2.0/WS 9srpbdc87v1s.invalid;branch=z9hG4bK774681;received=192.168.8.11;rport=
From: "" <sip:@192.168.8.11>;tag=ii5b0f08lb
To: <sip:@192.168.8.11>;tag=Q8XBrSc8NXHrH
Call-ID: 0egn2qmnq0hhrho2ccll
CSeq: INVITE
User-Agent: FreeSWITCH-mod_sofia/1.4.+git~20150828T032007Z~014bbaf57d~32bit
Accept: application/sdp
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE
Supported: timer, path, replaces
Allow-Events: talk, hold, conference, presence, as-feature-event, dialog, line-seize, call-info, sla, include-session-description, presence.winfo, message-summary, refer
Min-SE:
Content-Length:

  原理:SIP(RFC3261)没有提供已存在会话保持激活的机制,虽然可以终端可以使用某些方式了解会话是否存活,但proxy却无法做到这一点。Re-INVITE和UPDATE方法就基于此进行的,这些刷新请求的周期是通过协商来确定的。当在规定的周期内没有新的刷新请求到来,即认为该会话结束。为了控制通过re-INVITE和UPDATE方法进行周期性的会话(session)刷新,以判别会话两端是否存活,增加了两个头域:Session-Expires(会话的生命期)和Min-SE(会话时钟的最小值)。

  其中Min-SE头域中的值只能增加不能减少,Session-Expires头域的值只能减少不能增加,但不能少于Min-SE头域中的值。

  当Proxy无法接受请求中的Session-Expires值时(小于Min-SE值),Proxy会回复422,UAC会继续发起请求,但会携带422中的Min-SE头域;

  当请求到达UAS时,UAS会在2**的应答中Session-Expires头域中填写最后的结果,且会携带参数refresher(指示当前的UAC或UAS谁来进行刷新),2**的回复,Proxy无法修改Session-Expires头域。

  问题了然。修改Min-SE或者Session-Expires头域满足Session-Expires >= Min-SE就可以了。

  

SIP进行时的更多相关文章

  1. English trip V1 - 6.Accidents Happen! 发生意外! Teacher:Corrine Key: 过去进行时 was or were + Ving

    In this lesson you will learn to talk about past occurences. 过去进行时 课上内容(Lesson) C: Hi, Loki! L: Hi, ...

  2. 二评北科团委:“斩首计划”进行时,其用心也毒

    近日,在同学们和热心群众的共同努力下,各高校相继悬崖勒马,北大马会.北语新新青年.人大新光等进步社团均顺利注册.而北科团委倒行逆施,可谓一枝独秀,对于齐民学社的同学们的诉求,不仅不予以回应,反而采取表 ...

  3. 「补课」进行时:设计模式(5)——从 LOL 中学习代理模式

    1. 前文汇总 「补课」进行时:设计模式系列 2. 从 LOL 中学习代理模式 我是一个很喜欢玩游戏的人,虽然平时玩游戏的时间并不多,但我也是一个忠实的 LOL 的爱好者,就是段位有点惨不忍睹,常年倔 ...

  4. .NET开源进行时:消除误解、努力前行(本文首发于《程序员》2015第10A期的原始版本)

    2014年11月12日,ASP.NET之父.微软云计算与企业级产品工程部执行副总裁Scott Guthrie,在Connect全球开发者在线会议上宣布,微软将开源全部.NET核心运行时,并将.NET ...

  5. mysql进行时

    1. 安装 参考 2. 远程连不上数据库 远程连接mysql时,提示“is not allowed to connect to this MySQL server” 解决(授权法): GRANT AL ...

  6. 怎样监听HTTP请求的成功、失败与进行时

    1. 监听请求成功: xhr.onload 2. 监听请求失败: xhr.onerror 3. 监听请求数据下载中: xhr.onprogress xhr.onload = function() { ...

  7. vue项目进行时,script标签中,methods事件中函数使用的async/await

    用 async/await 来处理异步 await关键字只能放到async函数里面,通过await得到就是Promise返回的内容:当然也能通过then()去获取,若通过then()获取了则就无Pro ...

  8. 趣图:调试bug进行时

      扩展阅读 趣图:大神写实,左脚程序继续运行,右脚程序调试 趣图:Bug 多了,总有一个会把你坑了 趣图:领导在旁,只求代码无Bug

  9. 第十一篇:vue.js监听属性(大作业进行时)

    这个知识点急着用所以就跳过<计算属性>先学了 首先理解一下什么是监听:对事件进行监控,也就是当我进行操作(按了按钮之类的事件)时,会有相应的事情发生 上代码 <div id = &q ...

随机推荐

  1. enum与typedef enum的用法

    一,两者的用法 枚举类型定义用关键字enum标识,形式为: enum 标识符 { 枚举数据表 }:枚举数据(枚举常量)是一些特定的标识符,标识符代表什么含义,完全由程序员决定.数据枚举的顺序规定了枚举 ...

  2. wc之上传图片

    wc上传图片:以上传头像为例 1.找到views/default/account/settings/profile.tpl.htm中 init_avatar_uploader($('#avatar_u ...

  3. 有图有真相——关于“视频专辑:零基础学习C语言 ”

  4. 我的AutoCAD二次开发之路 (一)

    原帖地址 http://379910987.blog.163.com/blog/static/33523797201011184552167/ 今天在改代码的时候,遇到了AddVertexAt方法的用 ...

  5. 由于 add 运算符中“Chinese_PRC_CI_AS”和“Chinese_PRC_CS_AS_WS”之间的排序规则冲突

    有一个字段的排序规则是 Chinese_PRC_CS_AS_WS,字符串连接的时候报错. 处理方案 cast(columnName as varbinary) 即可

  6. iOS 学习笔记 二 (2015.02.26)

    How To Use Git Source Control with Xcode in iOS 6 If you're new here, you may want to subscribe to m ...

  7. javap(反汇编命令)详解【转】

    转自:http://blog.csdn.net/hudashi/article/details/7062668 javap是JDK自带的反汇编器,可以查看java编译器为我们生成的字节码.通过它,我们 ...

  8. 文件输出debug

    file_put_contents('/tmp/heat.log', var_export($mainArr, true),FILE_APPEND);

  9. hdwiki 框架简介

    虽然HDwiki是一个开源的wiki系统,并且代码简洁易懂,但如果想在系统上做做进一步开发还需要对框架有一个整体的认识.熟悉了HDwiki的框架以后完全可以独立出来做其他功能的开发,当做一个开源的PH ...

  10. android studio自动导包

    http://blog.csdn.net/buaaroid/article/details/44979629 关于导包的设置以上博文解释的很清楚,在此主要强调下这一句: Add unambiguous ...