当前位置: 首页 > news >正文

SIP进行时

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

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

一、响应422 Session Interval Too Small

  发送的Invite消息如下:

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

v=0
o=- 6735531044150428780 2 IN IP4 127.0.0.1
……

  收到的响应如下:

SIP/2.0 422 Session Interval Too Small
Via: SIP/2.0/WS 9srpbdc87v1s.invalid;branch=z9hG4bK774681;received=192.168.8.11;rport=8012
From: "801" <sip:801@192.168.8.11>;tag=ii5b0f08lb
To: <sip:806@192.168.8.11>;tag=Q8XBrSc8NXHrH
Call-ID: 0egn2qmnq0hhrho2ccll
CSeq: 1869 INVITE
User-Agent: FreeSWITCH-mod_sofia/1.4.15+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: 120
Content-Length: 0

  原理: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就可以了。

  

       

转载于:https://www.cnblogs.com/yoyotl/p/4980817.html

相关文章:

  • 有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果(转)...
  • 实习小白::(转) Cocos2d-x 3.0 开发(十二)在CocoStudio中使用粒子挂载与曲线动画...
  • 高焕堂讲Android核心
  • python对象的创建和销毁
  • Foundation框架集合 ---- NSArray和NSMutableArray
  • 【BZOJ】2876: [Noi2012]骑行川藏
  • 【BZOJ】3714: [PA2014]Kuglarz
  • intelliJ IDEA使用体验
  • 网络工程实训_4RIP路由(动态路由)
  • LLC子层为什么不在数据包中体现?LLC子层具体作用是什么?Ethernet_II如何表示帧结束?...
  • linux下建立软链接
  • 享元模式 的另外一个例证
  • windows ntp安装及调试
  • MYSQL 备份用户权限
  • A7600官方ROM_VIBEUI_V2.5_1537联通版使用体验
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • @angular/forms 源码解析之双向绑定
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • Android交互
  • bootstrap创建登录注册页面
  • express + mock 让前后台并行开发
  • HTTP--网络协议分层,http历史(二)
  • idea + plantuml 画流程图
  • node-glob通配符
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • 排序(1):冒泡排序
  • 延迟脚本的方式
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 用Python写一份独特的元宵节祝福
  • 用Visual Studio开发以太坊智能合约
  • postgresql行列转换函数
  • 仓管云——企业云erp功能有哪些?
  • 组复制官方翻译九、Group Replication Technical Details
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​ubuntu下安装kvm虚拟机
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #单片机(TB6600驱动42步进电机)
  • (02)vite环境变量配置
  • (1)(1.9) MSP (version 4.2)
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (层次遍历)104. 二叉树的最大深度
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (十六)一篇文章学会Java的常用API
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (轉貼) UML中文FAQ (OO) (UML)
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • **PHP分步表单提交思路(分页表单提交)
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .Net IOC框架入门之一 Unity
  • .net 程序发生了一个不可捕获的异常
  • .NetCore 如何动态路由