Doubango ims 框架分析之 sip协议栈

csdn lidp  http://blog.csdn.net/perfectpdl


1.tinysip 介绍 :


兼容性 : SIP(RFC 3261) 以及 3GPPIMS/LTE (TS 24.229) implementation



依赖 tinySAK,tinyNET, tinySDP, tinyMEDIA, tinyHTTP and tinyIPSec.



2.SIP协议 - tinysip的实现机制



SIP是一个分层结构的协议,这意味着它的行为是根据一组平等独立的处理阶段来描述,每一阶段之间只是松耦合。协议分层描述是为了表达,从而允许功能的描述可在一个部分跨越几个元素。它不指定任何方式的实现。当我们说某元素包含某层,我们是指它顺从该层定义的规则集。


不是协议规定的每个元素都包含各层。而且,由SIP规定的元素是逻辑元素,不是物理元素。一个物理实现可以选择作为不同的逻辑元素,甚至可能在一个个事务的基础上。


SIP的最底层是语法和编码。它的编码使用增强Backus-Nayr形式语法(BNF)来规定。


第二层是传输层。它定义了网络上一个客户机如何发送请求和接收响应以及一个服务器如何接收请求和发送响应。所有的SIP元素包含传输层。


第三层是事务层。事务是SIP的基本元素。一个事务是由客户机事务发送给服务器事务的请求(使用传输层),以及对应该请求的从服务器事务发送回客户机的所有响应组成。事务层处理应用层重传,匹配响应到请求,以及应用层超时。任何用户代理客户机(UAC)完成的任务使用一组事务产生。用户代理包含一个事务层,有状态的代理也有。无状态的代理不包含事务层。事务层具有客户机组成部分(称为客户机事务)和服务器组成部分(称为服务器事务),每个代表有限的状态机,它被构造来处理特定的请求。


事务层之上的层称为事务用户(TU)。每个SIP实体,除了无状态代理,都是事务用户。当一个TU希望发送请求,它生成一个客户机事务实例并且向它传递请求和IP地址,端口,和用来发送请求的传输机制。一个TU生成客户机事务也能够删除它。当客户机取消一个事务时,它请求服务器停止进一步的处理,将状态恢复到事务初始化之前,并且生成特定的错误响应到该事务。这由CANCEL请求完成,它构成自己的事务,但涉及要取消的事务。


SIP通过EMAIL形式的地址来标明用户地址。每一用户通过一等级化的URL来标识,它通过诸如用户电话号码或主机名等元素来构造(例如:SIP:vision-com.com)。因为它与EMAIL地址的相似性,SIPURLs容易与用户的EMAIL地址关联。


SIP提供它自己的可靠性机制从而独立于分组层,并且只需不可靠的数据包服务即可。SIP可典型地用于UDPTCP之上。


Register,Invite, Options …

Nat Tranversal

Dialog Layer

Transaction Layer

Parsing Layer

Transport Layer


sip 协议栈分层结构图


根据sip消息流向可以分为incomingmessage outgoing message,incoming 消息从 下到上,即TransportLayer → Register,Invite, Options; outgoing message 消息流向与此相反。



3.根据以上定义,tinysip分如下模块:



1).api外部接口,对sip协议支持的方法的接口封装,协议栈提供的发起请求及接受请求对应的接口,包括registar layer, presencelayer等上层应用,当前版本支持如下请求:


REGISTERSUBSCRIBE(订阅),MESSAGE(即时通信),PUBLISH(状态展示),OPTIONS(查询服务器能力),INVITE(发起请求),Cancel(取消一个请求),

BYE(结束通话)。


2).Nat traversal Nat穿越层,tinysip目前支持stunturn穿透。


3).Dialog,会话模块,一路呼叫的唯一标识,处于sip事务层之上。

4).parserssip消息解析,处于sip 语法层,解析从传输层传递的数据包为协议栈理解的结构。


5).transactions, 事务层,事务是一个请求以及与此请求相关的所有响应组成,用transaction id唯一标识,由于sip信令一般由udp承载,所以不能保证信息的可靠到达,所以事务层必须提供一种机制处理udp所不能提供的功能,这里一般通过定时器及一个有限状态机来实现。


6).transports ,传输层,即 udp, TCP, TLS, SCTP socket 系统调用系列,此层隐藏了所有传输层的细节,对于incomingsip message , 此层为sip消息的入口,对于outgoingsip message, 此层为sip消息的出口。



4.doubango sip 协议栈使用流程:



1.初始化


doubango sip协议栈依赖于tinyNET模块,所以必须先调用tnet_startup函数初始化,退出时调用tnet_cleanup清除资源,初始化sip


协议栈之前必须设置用户的域(realm参见(1)及用户的私有(IMPI2))及共有标别(IMPU3)),这些为ims引入的概念。


(1)realm 解释:reaml为域名,用来作客户端认证用(authenticate.必须是一个有效的 sipuri 如:sip:vision-com.com.cnrealm sip协议栈启动之前必须设置的选项,一旦协议栈启动realm就不可以更改,如果不填写

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值