您当前的位置是:  首页 > 资讯 > 国内 >
 首页 > 资讯 > 国内 >

SIP协议与应用场景技术分享笔记-卷1-rfc3261-7

2019-06-17 09:12:44   作者:james.zhu   来源:Asterisk开源派   评论:0  点击:


  SIP 提供了一种机制以压缩的形式来表达普通的头。当传输很大的消息体的消息内容时,这种方式也比较有用,例如当使用UDP传输时,如果内容数据超过MTU极限后,使用压缩的格式就可以满足最大MTU支持。压缩格式在Section 20定义。压缩格式可以在任何时候在没有改变消息语义时替换为比较长的格式。
  头域值可以以比较长的格式或者压缩格式出现在同样的消息体中。在使用时每个头都必须支持比较长的格式和压缩格式。
  7.4 Bodies
  除非另外提示,Requests(请求)可能包括消息体,这种请求包括一个新请求,新请求在本规范的新拓展中定义。消息体解析依赖于请求方式method。
  对响应消息来说,请求方式和响应状态码决定消息体类型和消息解析。所有的响应可能包括在一个消息体。
  7.4.1 MessageBody Type
  消息体的网络媒体类型必须通过Content-Type头给定。如果消息体已经处理过编码流程,例如压缩,那么必须通过Content-Encoding头声明;否则,必须忽略Content-Encoding。如果可行的话,声明消息体字符串为Content-Type头的一个部分。
  在RFC 2046[11]定义的 "multipart" MIME 类型可以在消息体中使用。在使用中,如果远端部署方请求通过了一个Accept头,这个头没有包含multipart,那么,发送的请求中包含多方消息体必须发送一个会话描述作为一个非multipart消息体。
  SIP消息可以包含二进制消息体或消息体的部分。当发送方没有提供明确的字符参数设置时,被定义的text的媒体子类型有一个默认字符设置值"UTF-8"。
  7.4.2MessageBody Length
  以bytes为单位的消息体长度是由Content-Length头提供。Section 20.14描述了头内容的具体细节。
  HTTP/1.1中的分块传输编码不能在SIP中使用。(注意:为了以一系列的传输来分块数据,分块传输编码修改了消息体,每一个块都有各自的大小指示)
  7.5FramingSIP Messages
  不像HTTP,SIP部署使用了UDP或其他的不可信赖的数据包协议。每个数据包传输一个请求或者响应。Section 18介绍了使用非可靠性传输的限定。
  通过以数据流方式传输方式来处理SIP消息的机制必须在start-line之前忽略掉任何回车换行字符[H4.1]。
  Content-Lengthheader头的值用来定位数据流中的每个SIP消息结束位置。当SIP消息是通过数据方式传输时,它总是出现在这里。
  8 GeneralUser Agent Behavior
  一个用户代理表示一个最终的系统架构。它包含一个用户代理客户端(UAC),用来产生请求,和一个用户代理服务器端,它用来对请求产生响应反馈。UAC用户代理客户端具备产生请求的能力,UAC产生请求是由外部刺激和驱动的流程而产生(例如,用户点击了一个按钮和PSTN线路上的一个信号),并且对响应进行处理。一个UAS代理客户端可以接收一个请求,并且基于用户输入,外部驱动刺激,程序执行结果或者其他机制所产生一个响应。
  当一个UAC发送一个请求时,这个请求会经过几个代理服务器,这些代理服务器将前转这个请求到UAS。当UAS生成响应时,这个响应会返回到UAC。
  UAC和UAS的处理流程完全依赖于两个因素。首先,这个流程取决于这个请求或响应是否在dialog里面还是外面,其次,流程还取决于请求的method。Dialogs的讨论将会在Section 12进行;它们表示一种介于用户代理之间的点对点的关系,这个关系是通过具体的SIP methods创建的,例如INVITE。
  在本部分内容中,我们讨论UAC和UAS的执行处理规则,这个规则是完全独立于method的,当处理请求时,这些请求是在dialog的外面。这里当然也包括请求自己创建的dialog。
  关于dialog外部的对请求和响应的安全处理流程的描述在Section 26进行。具体来说,介于UAS和UAC存在的机制是互相验证的过程。通过消息体使用S/MIME加密的方式实现一系列私有功能支持。
  8.1 UACBehavior
  这部分讨论UAC的外面dialog的运行状态。
  8.1.1 Generatingthe Request
  一个有效的被UAC规范化的SIP请求必须最低包括以下几个头字段:To,From, CSeq,Call-ID,Max-Forwards,和 Via;对所有SIP请求来说,这些头字段是强制支持的。
  这六个头字段是构建一个SIP消息的基础结构,因为它们联合起来为SIP通过了最基本
  的和最重要的路由服务,消息地址,响应路由,限定消息扩展,消息顺序和事务的唯一身份。
  这些头字段另外包含了method,Request-URI,和SIPversion。
  运行在dialog外面的请求发送示例包括了一个INVITE,它用来创建一个会话 (Section 13) 和一个OPTIONS,它用来查询能力支持(Section 11)。
  8.1.1.1 Request-URI
  消息的初始Request-URI应该在To头中设置为URL的值。一个需要注意的例外就是 REGISTER method;REGISTER 的Request-URI设置方式在Section 10中讨论。对于安全原因或便利性来说,它可能也不是太方便来设置这些值域为同样的值(特别是,
  如果在转换期间,初始的UA希望Request-URI可以被修改的环境中)。
  在某些特定的环境中,一个已存在的route状态可以影响Request-URI的消息。一个已存在的路由系列是一系列有序URIs,这些URLs确认服务器链,UAC将会发送出去的请求,这些请求是dialog外部的请求。通常情况下,这些URL在UA端通过一个用户或服务商手动配置,或者通过其他的非SIP机制来配置。当服务商希望配置UA支持一个outbound proxy时,规范还是推荐需要提供一个已存在的路由系列,设置为一个单URI作为一个 outbound proxy。
   
  FreeSBC/ProSBC 免费边界会话控制器, 下载ISO:https://freesbc.telcobridges.com/
  关注微信公众号:asterisk-cn,获得有价值的Asterisk行业分享
  Asterisk freepbx 中文官方论坛:http://bbs.freepbx.cn/forum.php
  Asterisk freepbx技术文档: www.freepbx.org.cn
  融合通信商业解决方案,协同解决方案首选产品:www.hiastar.com
  Asterisk/FreePBX中国合作伙伴,官方qq技术分享群(3000千人):589995817

【免责声明】本文仅代表作者本人观点,与CTI论坛无关。CTI论坛对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。

专题

CTI论坛会员企业