SIP协议的INVITE消息发起流程

当通过sip协议发起一个会话时,需要通过invite消息实现该流程。而SIP协议是一个基于事务的协议,每一个sip会话的都是通过sip部件间的一系列消息来完成的。首先需要明确的重要概念就是事务。

事务

在SIP协议中,一个事务是指完成一次消息交互的整个流程。以INVITE消息为例,一个基于代理服务器交换信令和语音视频数据包的事务模型如下图所示:

如图所示,对于1003来说,虚线框内的从INVITE消息到代理服务器回送的200OK整个消息交互流程称为一个客户端事务,而对于1005来说,虚线框内的从INVITE消息到代理服务器回送的200OK整个消息交互流程称为一个服务器事务。

不管是客户端事务还是服务器事务,都必须维护一个有限状态机,记录当前事务的进展情况,事务和其状态机的维护,构成了一款SIP终端软件最重要的一部分。

客户端INVITE事务的状态转换如上图所示。

当用两个终端发起INVITE呼叫时,用wireshark抓包得到的结果如下图所示:

其中ip:192.168.1.33是代理服务器的地址,ip:192.168.1.104是客户端sip终端的地址。这里,代理服务器的作用相当于一个UAS。这里总共有两个事务流程,整个过程如下:

a)        Sip终端在地址192.168.1.104向服务器发起一个会议3000的INVITE消息,客户端进入calling状态,启动A和B的定时器,用于INVITE消息的超时重传。

b)        服务器发送100/trying,客户端收到后进入proceeding状态,取消A和B定时器。

c)        服务器发送407要求认证,客户端进入Completed状态。

d)        客户端通过ACK发送认证信息。

e)        进入Terminated状态后销毁该事务。

到此为止,一个客户端INVITE事务结束。

a)        Sip终端在地址192.168.1.104再次向服务器发起一个会议3000的INVITE消息,启动A和B的定时器,用于INVITE消息的超时重传

b)        服务器发送100/trying,客户端收到后进入proceeding状态,取消A和B定时器。

c)        服务器发送200OK,客户端进入Accepted状态。

d)        客户端向服务器发送ACK应答。

注:其中在进入calling状态之前,也就是在发送INVITE消息时,客户端必须将其中的SDP消息包含着INVITE消息的content中传送到。

在客户端接收到Accepted消息(200Ok)后,或根据得到的SDP做解析,启动正确的音视频编解码器,生成RTP端口,在最后的ACK中发送给服务器,这是,通话开始进行。

在Doubango协议栈中,最后一步的处理由tsip_dialog_invite.client.c文件的int c0000_Outgoing_2_Connected_X_i2xxINVITE(va_list *app)函数处理。

doubango(5)--SIP协议栈传输层的启动的更多相关文章

  1. doubango(4)--SIP协议栈传输层的启动

    协议栈的默认传输结构 对于一个刚启动的协议栈来说,它需要有一个传输层,支持若干的传输结点.每一个传输结点对应于一个端口,若采用TCP连接,一个传输结点就针对于一个点到点的连接,这个连接负责sip信令的 ...

  2. Sipdroid实现SIP(四): 传输层和应用层之间的枢纽SipProvider

    目录 一. 概述 二. 主要变量 三. 主要方法 四. 在Sipdroid中的应用 一. 概述 在整套Sipdroid源码中, 类SipProvider是最靠近TCP/UDP的一层, 在Sipdroi ...

  3. [tldk][dpdk][dev] TLDK--基于dpdk的用户态协议栈传输层组件简单调研

    如题,以下是一份简单的快速调研. TLDK: Transport Layer Development Kit 一 什么是TLDK transport layer development kit 处理t ...

  4. 实验:传输层:UDP协议 学习笔记

    一.传输层协议 从之前介绍的网络层协议来看,通信的两端是两台主机,IP数据报首部就标明了这两台主机的IP地址.但是从传输层来看,是发送方主机中的一个进程与接收方主机中的一个进程在交换数据,因此,严格地 ...

  5. 传输层:UDP 协议

    一.传输层协议 从之前介绍的网络层协议来看,通信的两端是两台主机,IP 数据报首部就标明了这两台主机的 IP 地址.但是从传输层来看,是发送方主机中的一个进程与接收方主机中的一个进程在交换数据,因此, ...

  6. doubango(2)--底层协议栈结构分析

    tsip_stack_handle_t 实例 1.        tsip_stack_handle_t的创建 在底层,真正运转的协议栈结构式tsip_stack_handle_t的一个实例,它的创建 ...

  7. Windows网络驱动、NDIS驱动(微端口驱动、中间层驱动、协议驱动)、TDI驱动(网络传输层过滤)、WFP(Windows Filtering Platform)

    catalog . 引言 . Windows 2000网络结构和OSI模型 . NDIS驱动 . NDIS微端口驱动编程实例 . NDIS中间层驱动编程实例 . NDIS协议层驱动编程实例 . TDI ...

  8. doubango(1)--从协议栈结构说起

    自顶向下与自底向上 软件设计的两种方法不过于自顶向下与自底向上. 对于自顶向下而言,先设计好用户接口,再往下延伸至各个功能块的具体实现.而对于自底向上而言,自然是有了设计好的各个功能代码块,再将这些功 ...

  9. [转帖]技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解

    技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解    http://www.52im.net/thread-1309-1-1.html   本文来自腾讯资深研发工程师罗成的技术分享, ...

随机推荐

  1. 简单的java高斯模糊算法

    import java.awt.Color; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOEx ...

  2. photo中的图文混排

    photoshop中无法象word中自动图文混排,但可以通过手工绘制路径完成图文混排. 如下图,先摆放图像,然后绘制路径,然后在路径中输入或粘贴文字即可.

  3. Python+Selenium使用Page Object实现页面自动化测试

    Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class,其中包含页面中需要测试的元素(按钮,输入框,标题 等),这样在Selenium测试页面中可以通 ...

  4. WordPress主题制作第二天

    <?php if(have_posts()): while(have_posts()): the_post(); <!-- the_title(); the_permalink(); th ...

  5. Tokumx 代替 Mongodb 群集部署

    一, 配置环境: 系统: CentOS 7 x64 tokumx1 ip: 192.168.0.155 tokumx2 ip: 192.168.0.156 tokumx3 ip: 192.168.0. ...

  6. Mysql基本操作整理

    1.登录数据库 格式: mysql -h主机地址 -u用户名 -p用户密码 –P端口 –D数据库 –e “SQL 内容”>mysql -uroot -p 数据库名称~~~~~~~~~~~~~~~ ...

  7. iOS开发者需要的5款排版工具

    Attributed String Creator Attributed String Creator可以从你的格式化文本中自动生成原生的Objective-C代码.你可以将文本写入.粘贴或者导入At ...

  8. linux动态链接库---一篇讲尽

    一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如: tmux: error while loading shared libraries: libevent-1.4.s ...

  9. 24、手把手教你Extjs5(二十四)模块Form的自定义的设计[3]

    自定义的Form已经可以运行了,下面改一下配置,把Form里面的FieldSet放在Tab之下.修改一下ModuleModel.js中的data下的tf_FormSchemes下的方案,增加一个属性. ...

  10. APP被苹果APPStore拒绝的各种原因 分类: ios相关 app相关 2015-06-25 17:27 200人阅读 评论(0) 收藏

    APP被苹果APPStore拒绝的各种原因 1.程序有重大bug,程序不能启动,或者中途退出. 2.绕过苹果的付费渠道,我们之前游戏里的用兑换码兑换金币. 3.游戏里有实物奖励的话,一定要说清楚,奖励 ...