1.引言

SDP的offer/answer模型本身独立与于利用它的高层协议。SIP是使用offer/answer模型的应用之一。RFC 3264 定义了offer/answer模型,但没有规定使用哪个SIP消息来携带一个offer或answer。

理论上,任何SIP消息的正文中都可以包含会话描述部分。但是,一个SIP中的会话描述并不一定是一个offer或一个answer,只有符合在SIP标准RFCs中所描述的规则的会话描述才会被解释为一个offer或一个answer。目前,关于如何在SIP中处理offer/answer模型的规则被定义在SIP基本部分(RFC3261)及其扩展RFCs中。

SDP的offer/answer模型定义会话的更新。在SIP中,对话(dialog)用于将offer/answer交换及其要更新的会话联系起来。换句话说,只有在某个SIP对话中进行的offer/answer交换,才能更新该对话所管理的会话。

2、六种Offer/Answer交换模式

在SIP消息中承载offer/answer的规则定义在RFC 3261, RFC 3262 以及RFC 3311中。

在这些RFCs中定义了六种在SIP消息中交换offer/answer的模式。

模式1和模式2是在RFC3261中定义的,用于不支持100rel(可靠临时响应消息扩展)的SIP实体之间的会话建立。

模式1:UAC在INVITE请求中携带一个offer, UAS在200 INVITE响应中返回answer。这是最常用的一种模式。

模式2:UAC在INVITE请求中没有携带offer。UAS在200 INVITE响应中携带一个offer,UAC通过ACK返回answer。这种模式通常用于3PCC中。

模式3、模式4、模式5都是在RFC3262中定义的,可用在支持100rel的SIP实体之间。其中模式3、模式4可用于会话建立。模式5只能用于会话参数更新。它们利用1xx-rel响应消息来携带offer或answer来建立会话。

模式3:UAC在INVITE请求中携带一个offer, UAS在1xx-rel响应中返回answer。这样,在呼叫完成之前(UAC没有收到200 INVITE消息)会话已建立。此后,会话参数还可以被更新,具体见模式5及模式6。

模式4: UAC在INVITE请求中没有携带offer。UAS在1xx-rel可靠响应中携带一个offer,UAC通过PRACK返回answer。同样地,在呼叫完成之前(UAC没有收到200 INVITE消息)会话已建立。此后,会话参数还可以被更新,具体见模式6。

模式5:当UAC与UAS采用模式3建立会话后,呼叫并未完成(见模式3)。之后,可以使用模式5对已建立的会话参数进行更新:UAC在PRACK请求中携带一个新的offer, UAS在200 PRACK响应中返回answer。这样,会话参数便被更新。

模式6在RFC3311中定义,主要用于在早期对话中更新已建立的会话参数,会话可能是通过模式3,也可能是通过模式4建立的。

模式6还可以对会话进行多次更新。例如,之前已通过模式5更新过的会话还可以使用模式6更新;甚至通过模式6更新过的会话还可以再次使用模式6更新。

模式6:UAC(或UAS)发送UPDATE请求其中携带一个新的offer, AS(或UAC)在200 UPDATE中返回一个offer。这样,会话参数便被更新。注意,UAS或UAC在发送UPDATE进行会话更新之前,必须保证之前的会话更新过程已经完成。也就是说,发出的offer已经收到answer,或者收到的offer已经产生了answer。

3.总结

INVITE方法提供了会话建立过程。

在没有100rel选项时,会话建立过程非常简单,只能使用“200 ”响应消息传送会话描述,这些会话描述可能是answer(模式1),也可能是offer(模式2)。无论使用何种模式,会话都只能呼叫完成后才能建立,在呼叫完成之前和呼叫完成之后只能有一个会话 – 用于最终通话的常规会话,因而,不能建立所谓的“早期媒体会话”。

在引入100rel选项后,会话建立过程变得复杂,通过可靠的临时消息消息也可以传送会话描述,这些会话描述可能是answer(模式3),也可能是offer(模式4)。模式3和模式4都能够在呼叫完成前建立会话。并且在呼叫完成之前,这些会话还可以被更新。这样就能够建立与常规会话不同的“早期媒体会话”,完成回铃音的产生等功能。

PRACK方法可用于更新已建立的会话的参数(模式5)

UPDATE方法可用于多次更新已建立的会话的参数(模式6),发起更新的可以是UAC也可以是UAS。

SIP中的SDP offer/answer交换初探的更多相关文章

  1. 基于SDP的提议/应答(offer/answer)模型简介

    1.引入 在松耦合会议中,会话参数完全由会议创建者来确定,参与者能做的仅仅是根据这些会话参数来加入会议(当然也可以选择不加入).这种情况下,主要要做的就是会话描述,在这里SDP本身就足够了. 但是在更 ...

  2. SIP中的 session, dialog 及 transaction 的解释

    http://stackoverflow.com/questions/35133331/difference-between-session-dialog-and-transaction-in-sip ...

  3. 【转】SIP 中的Dialog,call,session 和 transaction

    如果你对Sip协议中Call, Dialog, Transaction和Message之间的关系感觉到迷惑,那么,那么我可以告诉你,你并不孤单,因为大多数初学者对于这些名词之间的关系都会感到疑惑.   ...

  4. SIP中第三方呼叫控制(3PCC)建立流程

    1.引言 在传统的电话网环境中,第三方呼叫控制允许一个实体(这里称为控制器- controller) 建立并管理另外的两方或多方之间的通信关系,而其本身并不参与通信. 第三方呼叫控制经常用于运营商业务 ...

  5. Sipdroid实现SIP(六): SIP中的请求超时和重传

    目录 一. Sipdroid的请求超时和重传 二. SIP中超时和重传的定义 三. RFC中超时和重传的定义 一. Sipdroid的请求超时和重传 Sipdroid实现SIP协议栈系列, 之前的文章 ...

  6. 用C语言把双向链表中的两个结点交换位置,考虑各种边界问题。

    用C语言把双向链表中的两个结点交换位置,考虑各种边界问题. [参考] http://blog.csdn.net/silangquan/article/details/18051675

  7. SIP中OPTIONS方法的用法及示例

    SIP中OPTIONS方法的用法及示例 用OPTIONS方法实现Keep Alive SIP keep-alive方法

  8. STUN/TURN/ICE协议在P2P SIP中的应用(一)

    1           说明 本文详细描述了基于STUN系列协议实现的P2P SIP电话过程,其中涉及到了SIP信令的交互,P2P的原理,以及STUN.TURN.ICE的协议交互 本文所提到的各个服务 ...

  9. STUN/TURN/ICE协议在P2P SIP中的应用(二)

    1       说明 2       打洞和穿越的概念... 1 3       P2P中的打洞和穿越... 2 4       使用STUN系列 协议穿越的特点... 2 5       STUN/ ...

随机推荐

  1. PHP学习之观察者模式

    <?php //观察者模式涉及到两个类 //男人类 和女朋友类 //男人类对象小明, 女朋友类对象小花.小丽 class Man { //用了存放观察者 protected $observers ...

  2. java中 label 配合 break continue 使用方法

    转 https://www.jianshu.com/p/7954b61bc6ee java中 label 配合 break continue 使用的其实是比较少的. 这种做法在业务代码中比较少见. 在 ...

  3. Android 显示系统:SurfaceFlinger详解

    一.Android系统启动 Android设备从按下开机键到桌面显示画面,大致过程如下图流程: 开机显示桌面.从桌面点击 App 图标到 Activity显示在屏幕上的过程又是怎样的呢?下面介绍And ...

  4. 浅谈smarty模板的mvc框架

    最近接触了一个大项目,php做的后台管理,融合了smarty模板+mvc框架+phpcms内容管理,,,这个项目简直就是php的精华,于是小编大哥对项目小女子产生了兴趣,打算一点一点把她征服.现在小吃 ...

  5. OpenNESS,开源的边缘网络服务平台

    目录 文章目录 目录 参考文章 OpenNESS 的电梯间演讲 OpenNESS 与 ETSI MEC Edge Controller Software 的功能清单 Edge Platform Sof ...

  6. VMware安装Centos7超详细过程

    本篇文章主要介绍了VMware安装Centos7超详细过程(图文),具有一定的参考价值,感兴趣的小伙伴们可以参考一下 一.软硬件准备 软件:推荐使用VMwear,我用的是VMwear 12 镜像:Ce ...

  7. 修改IDEAL 快捷键风格

    选择File------Setting-----进入到设置窗口-------keymap--------选择自己适应的快捷键风格 选择Eclipse后Ideal的快捷键就和Eclipse相同

  8. 运行React Native项目出现白屏,无法运行

    运行React Native出现白屏,无法运行,查看终端报错如下: 原因: 代码中有语法错误,导致运行失败. 其实到这里可以去Xcode查看控制台打印,会提示哪个文件出现错误的. 解决办法: 找到报错 ...

  9. CSV文件规范及其Java解析方式

    Comma-separated values(CSV)文件规范见WIKIPEDIA:https://en.wikipedia.org/wiki/Comma-separated_values#RFC_4 ...

  10. 华为Liteos移植到stm32F03ZE

    华为Liteos和物联网设备侧sdk移植到stm32F03ZE霸道板子上 推荐官方教程:https://liteos.github.io/ 啥是LIteos "开源免费"的实时操作 ...