【转】【协议学习】SIP基本场景分析

1、SIP业务基本知识

1.1 业务介绍

会话初始协议(Session Initiation Protocol)是一种信令协议,用于初始、管理和终止网络中的语音和视频会话,具体地说就是用来生成、修改和终结一个或多个参与者之间的会话。SIP的业务模式是一个点对点协议,其中有两个要素——SIP用户代理和SIP网络服务器。用户代理是呼叫的终端系统元素,而SIP服务器是处理与多个呼叫相关联信令的网络设备。用户代理本身具有一客户机元素(用户代理客户机UAC)和一服务器元素(用户代理服务器UAS)。客户机元素初始呼叫而服务器元素应答呼叫。这允许点到点的呼叫通过客户机-服务器协议来完成。下图是SIP业务的网络结构和各个参与者的关系。

SIP业务的核心特点集中在SIP的设计目标之一是提供类似公用交换电话网(PSTN)中呼叫处理功能的扩展集。在这个扩展集中,实现类似日常电话的操作:拨号,振铃,回铃音或者忙音,只是实现方式和术语有所不同。SIP也实现了许多信令系统7(SS7)中更高级的呼叫处理功能,尽管这两个协议相差很远。SS7是一个高度集中处理的协议,其特点表现为高复杂度的中心网络结构和无智能的哑终端(传统的电话机)。SIP则是一个点对点协议,所以它只需要一个相对简单的(因此也高度可扩展的)核心网络,而将处理工作下放给连接在网络边缘的智能端点(装有硬件或软件的终端设备)。SIP的许多功能在端点中实现,这与传统的SS7将其在网络核心设备实现的作法大异其趣。而协议的其他特点还有它是一个文本协议,所以易于调测,结构灵活;而且它是一个中性的底层传输协议,可用TCP或UDP(推荐UDP);同时呼叫和媒体信息同时传送:媒体信息的传送由SDP传送

SIP是互联网工程任务组(IETF)多媒体数据和控制体系结构的一个组成部分,因此它与IETF的许多其他协议都有联系,例如RTP(实时传输协议)和SDP协议。SIP与许多其它的协议协同工作,仅仅涉及通信会话的信令部分(control message)。SIP报文内容传送会话描述协议(SDP),SDP协议描述了会话所使用流媒体细节,如:使用哪个IP端口,采用哪种编解码器等等。SIP的一个典型用途是:SIP“会话”传输一些简单的经过封包的实时传输协议流。RTP本身才是语音或视频的载体。

1.2 业务过程和协议流程

Ø 注册流程:

(1)用户首次试呼时,终端代理A 向代理服务器发送REGISTER 注册请求;

(2)代理服务器通过后端认证/计费中心获知用户信息不在数据库中,便向终端代理回送401Unauthorized 质询信息,其中包含安全认证所需的令牌;

(3)终端代理提示用户输入其标识和密码后,根据安全认证令牌将其加密后,再次用REGISTER 消息报告给代理服务器;

(4)代理服务器将REGISTER 消息中的用户信息解密,通过认证/计费中心验证其合法后,将该用户信息登记到数据库中,并向终端代理A 返回成功响应消息200 OK。

Ø 注销流程:

(1)终端向代理服务器发送register消息注销,其头中expire字段设置为0。

(2)代理服务器在收到后送回200OK响应,并将数据库中的用户有关消息注销。

Ø 基本呼叫建立过程:

(1)用户摘机发起一路呼叫,终端代理A向该区域的代理服务器发起Invite请求;

(2)代理服务器通过认证/计费中心确认用户认证已通过后,检查请求消息中的Via头域中是否已包含其地址。若已包含,说明发生环回,返回指示错误的应答;若没有问题,代理服务器在请求消息的Via头域插入自身地址,并向Invite消息的To域所指示的被叫终端代理B传送Invite请求。

(3)代理服务器向终端代理A发送呼叫处理中的应答信息:100Trying。

(4)终端代理B向代理服务器送呼叫处理中的应答信息:100Trying。

(5)终端代理B指示被叫用户振铃,用户振铃后向代理服务器发送180Ringing振铃信息。

(6)代理服务器向终端代理A转发被叫用户振铃信息。

(7)被叫用户摘机,终端代理B向代理服务器返回表示连接成功的应答(200OK)

(8)代理服务器向终端代理A转发该成功指示(200OK)

(9)终端代理A收到信息后,向代理服务器发ACK信息进行确认

(10)代理服务器将ACK确认消息转发给终端代理B。

(11)主被叫用户之间建立通信连接,开始通话。

Ø 正常呼叫释放过程:

(1) 正常呼叫

(2) 用户通话结束后,被叫用户挂机,终端代理B向代理服务器发送Bye消息。

(3) 代理服务器转发Bye消息至终端代理A,同时向认证、计费中心发送用户通话的详细信息,请求计费。

(4) 主叫用户挂机后,终端代理A向代理服务器发送确认挂断响应信息200OK。

(5) 代理服务器转发响应信息200OK。

Ø 会话更改流程:

(1)用户代理服务端和代理客户端正常通话。

(2)用户代理服务端向用户代理客户端发送Invite信息,带有新的SDP协商信息。

(3)用户处理客户端回复200OK,并将协商后的SDP信息带回。

(4)用户代理服务端发送ACK给用户代理客户端进行确认。

Ø 被叫忙呼叫释放:

(1)用户摘机发起一路呼叫,终端代理A向该区域代理服务器发起Invite请求;

(2)代理服务器向被叫终端代理B传送Invite请求。

(3)代理服务器向终端代理A发送呼叫处理中的应答信息:100Trying。

(4)终端代理B向代理服务器送呼叫处理中的应答信息:100Trying。

(5)呼叫请求送到被叫终端代理B后,被叫忙,终端代理B向代理服务器送486被叫忙响应。

(6)代理服务器向终端代理A转发该响应消息。

(7)终端代理A向代理服务器回送ACK确认消息。

(8)代理服务器向终端代理B送ACK确认信息。

Ø 被叫无应答流程一:

(1)用户摘机发起一路呼叫,终端代理A向该区域代理服务器发起Invite请求;

(2)代理服务器向被叫终端代理B传送Invite请求。

(3)代理服务器向终端代理A发送呼叫处理中的应答信息:100Trying。

(4)终端代理B向代理服务器送呼叫处理中的应答信息:100Trying。

(5)被叫用户振铃,终端代理B向代理服务器送180Ring响应。

(6)代理服务器向终端代理A转发该响应信息。

(7)被叫久振铃无应答,终端代理A判断超时后向代理服务器送Cancel消息放弃该呼叫。

(8)代理服务器收到Cancel消息后,向终端代理A回送200OK响应。

(9)代理服务器将Cancel消息转发给终端代理B。

(10)终端代理B向代理服务器回送200OK响应。

(11)终端代理B向代理服务器送487请求已撤销的响应信息。

(12)代理服务器收到后回送ACK确认。

(13)代理服务器向终端代理A送487请求已撤销消息。

(14)终端代理A向代理服务器回送ACK确认。

注:以上步骤中的(10)到(12)无严格顺序关系。

Ø 被叫无应答流程二:

(1)用户摘机发起一路呼叫,终端代理A向该区域代理服务器发起Invite请求;

(2)代理服务器向被叫终端代理B传送Invite请求。

(3)代理服务器向终端代理A发送呼叫处理中的应答信息:100Trying。

(4)终端代理B向代理服务器送呼叫处理中的应答信息:100Trying。

(5)被叫用户振铃,终端代理B向代理服务器送180Ring响应。

(6)代理服务器向终端代理A转发该响应信息。

(7)被叫久振铃无应答,终端代理B判断超时后向代理服务器送408Requesttimeout消息放弃该呼叫。

(8)代理服务器收到408Requesttimeout消息后,转发该消息给终端代理A。

(9)代理服务器回送ACK确认给终端代理B。

(10)终端代理A向代理服务器回送ACK确认。

注:以上步骤中的(9)到(10)无严格顺序关系。

Ø 遇忙呼叫前转:

(1)用户摘机发起一路呼叫,终端代理A向该区域代理服务器发起Invite请求;

(2)代理服务器向被叫终端代理B传送Invite请求。

(3)代理服务器向终端代理A发送呼叫处理中的应答信息:100Trying。

(4)终端代理B向代理服务器送呼叫处理中的应答信息:100Trying。

(5)终端代理B忙线中,B向代理服务器发送486Busy Here响应。

(6)代理服务器向终端代理B发送ACK确认消息。

(7)代理服务器对此呼叫进行前转,向代理服务器C发送Invite请求消息。

(8)代理终端C收到后指示用户振铃,同时向代理服务器发送180Ringing响应。

(9)代理服务器向A转发收到的180Ringing响应。

(10)被叫用户C摘机接听电话,终端代理C向代理服务器返回表示连接成功的应答(200OK)

(11)代理服务器向终端代理A转发该成功指示(200OK)

(12)终端代理A收到信息后,向代理服务器发ACK信息进行确认

(13)代理服务器将ACK确认消息转发给终端代理B。

建立通信连接,开始通话。

(14)主叫用户挂机,终端代理A向代理服务器发送Bye消息,请求挂机。

(15)代理服务器转发Bye消息至终端代理C,指示C挂机。

(16)终端代理C向代理服务器发送确认挂断响应信息200OK。

(17)代理服务器转发响应信息200OK至A。

Ø 无应答呼叫前转流程:

(1)用户A摘机发起一路呼叫,终端代理A向该区域代理服务器发起Invite请求;

(2)代理服务器向被叫终端代理B传送Invite请求。

(3)代理服务器向终端代理A发送呼叫处理中的应答信息:100Trying。

(4)终端代理B向代理服务器送呼叫处理中的应答信息:100Trying。

(5)被叫用户振铃,终端代理B向代理服务器送180Ring响应。

(6)代理服务器向终端代理A转发该响应信息。

(7)被叫久振铃无应答,代理服务器判断超时后向代理终端B送Cancel消息放弃该呼叫。

(8)代理终端B收到Cancel消息后,向代理服务器回送200OK响应。

(9)终端代理B向代理服务器送487请求已撤销的响应信息。

(10)代理服务器向终端代理B回送200OK响应。

(11)代理服务器对此呼叫进行前转,向代理服务器C发送Invite请求消息。

(12)代理终端C收到后指示用户振铃,同时向代理服务器发送180Ringing响应。

(13)代理服务器向A转发收到的180Ringing响应。

(14)被叫用户C摘机接听电话,终端代理C向代理服务器返回表示连接成功的应答(200OK)

(15)代理服务器向终端代理A转发该成功指示(200OK)

(16)终端代理A收到信息后,向代理服务器发ACK信息进行确认

(17)代理服务器将ACK确认消息转发给终端代理C。

建立通信连接,开始通话。

(18)主叫用户挂机,终端代理A向代理服务器发送Bye消息,请求挂机。

(19)代理服务器转发Bye消息至终端代理C,指示C挂机。

(20)终端代理C向代理服务器发送确认挂断响应信息200OK。

(21)代理服务器转发响应信息200OK至A。

Ø 呼叫保持:

(1)用户摘机发起一路呼叫,终端代理A向该区域的代理服务器发起Invite请求;

(2)代理服务器通过认证/计费中心确认用户认证已通过后,检查请求消息中的Via头域中是否已包含其地址。若已包含,说明发生环回,返回指示错误的应答;若没有问题,代理服务器在请求消息的Via头域插入自身地址,并向Invite消息的To域所指示的被叫终端代理B传送Invite请求。

(3)代理服务器向终端代理A发送呼叫处理中的应答信息:100Trying。

(4)终端代理B向代理服务器送呼叫处理中的应答信息:100Trying。

(5)终端代理B指示被叫用户振铃,用户振铃后向代理服务器发送180Ringing振铃信息。

(6)代理服务器向终端代理A转发被叫用户振铃信息。

(7)被叫用户摘机,终端代理B向代理服务器返回表示连接成功的应答(200OK)

(8)代理服务器向终端代理A转发该成功指示(200OK)

(9)终端代理A收到信息后,向代理服务器发ACK信息进行确认

(10)代理服务器将ACK确认消息转发给终端代理B。

(11)主被叫用户之间建立通信连接,开始通话。

(12)代理终端B向代理服务器发送Reinvite消息,SDP的c域等于0,0,0,0。

(13)代理服务器转发此信息给代理终端A。

(14)代理终端A收到Reinvite后回应200OK响应。表示接受会话更改,同事根据协商结果修改会话方式。

(15)代理服务器转发200OK给代理终端B。

(16)代理终端B收到消息后向代理服务器发送ACK消息进行确认。

(17)代理服务器将ACK确认消息转发到代理终端A。

Ø 呼叫等待:

(1)AB正常通话。

(2)在AB通话的阶段,用户C向A发起呼叫,终端代理C发送Invite消息给代理服务器。

(3)代理服务器向终端C回送100Trying响应,表示呼叫已在处理中。

(4)代理服务器把Invite消息转发给A。

(5)用户A振铃,并且终端A向代理服务器发送180Ring响应。

(6)代理服务器向终端C转发该响应信息。

(7)用户A按下呼叫保持键,代理终端A向代理服务器发送Invite消息,请求与代理终端C呼叫保持。

(8)代理服务器转发此消息给终端代理B。

(9)代理服务器向终端A回送100Trying响应,表示呼叫已在处理中。

(10)终端B收到呼叫保持请求后,发送200OK给代理服务器,表示接受呼叫保持。

(11)代理服务器转发200OK响应给终端代理A。

(12)代理终端A收到消息后向代理服务器发送ACK消息进行确认。

(13)代理服务器将ACK确认消息转发到代理终端B。

(14)终端代理A发送200OK给代理服务器,表示接受C的呼叫。

(15)代理服务器转发200OK给终端代理C。

(16)终端代理C向代理服务器回送ACK确认。

(17)代理服务器向代理终端A转发收到的ACK确认。

A、C之间开始通话。

(18)用户A挂机,终端代理A向代理服务器发送Bye请求消息。

(19)代理服务器转发Bye消息给终端代理B。

(20)终端代理C发送200OK给代理服务器,表示接受请求。

(21)代理服务器转发200OK响应给终端代理A。

(22)终端代理C重新发送Invite请求给代理服务器,请求和终端代理B恢复通话。

(23)代理服务器向代理终端B转发收到的Invite请求。

2、SIP通信过程报文抓取实例分析

l 实验环境:Linux2.6+Asterisk1.4(开源IPPBX)

l 实验地点:北京邮电大学信息与通信工程学院创新实验室

l SIP代理服务器IP:59.64.135.22  SIP电话号码:825002(59.64.135.22)

l SIP代理终端IP:59.64.135.67

l 软终端:X-lite

l 抓包分析工具:WireShark

注:由于过程太多,以下仅仅抓取“成功注册”,“呼叫--通话” ,“挂断”“注销”四种情况做典型包的分析。

Ø 注册流程:

以上是REGISTER包。

我们可以看到在注册的时候,终端会向代理服务器59.64.135.22发送REGISTER请求注册。

以上是REGISTEROK包。服务器返回200 OK,表示注册成功。

Ø 基本呼叫建立过程:

以上是INVITE包。我们可以看到在发起呼叫初期,终端向825002发出Invite的呼叫请求。

以上是Trying包,说明终端825003正在试着连通服务器,进一步转接到825002.

由于设置了自动接听,所以此次通话没有振铃的包。

这是ACK包,代表确认信号。

Ø 正常呼叫释放过程:

以上是BYE包。这是825002挂断后服务器向825003发送的释放呼叫信号。

Ø 注销流程:

以上是825003注销的包,我们注意到expires=0这说明是注销。

3.总结

SIP协议凭借其简单、易于扩展、便于实现等诸多优点越来越得到业界的青睐,它正逐步成为NGN(下一代网络)和3G多媒体子系统域中的重要协议,并且市场上出现越来越多的支持SIP的客户端软件和智能多媒体终端,以及用SIP协议实现的服务器和软交换设备。

作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/

时间: 2024-12-07 06:44:40

【转】【协议学习】SIP基本场景分析的相关文章

SIP基本场景分析

1.SIP业务基本知识 1.1 业务介绍 会话初始协议(Session Initiation Protocol)是一种信令协议,用于初始.管理和终止网络中的语音和视频会话,具体地说就是用来生成.修改和终结一个或多个参与者之间的会话.SIP的业务模式是一个点对点协议,其中有两个要素--SIP用户代理和SIP网络服务器.用户代理是呼叫的终端系统元素,而SIP服务器是处理与多个呼叫相关联信令的网络设备.用户代理本身具有一客户机元素(用户代理客户机UAC)和一服务器元素(用户代理服务器UAS).客户机元

云计算学习路线图素材课件:Docker容器应用场景分析

Docker容器是一个开源的应用容器引擎,它能够自动执行重复性任务,例如搭建和配置开发环境,用户可以方便地创建和使用容器,还可以进行版本管理.复制.分享.修改.有很多初学云计算的同学不清楚Docker容器的使用方法以及应用场景,接下来就给大家简单分享一下云计算学习路线图素材课件:Docker容器应用场景分析. Docker是一个使用 Go 语言开发的,并且开源的应用容器引擎,基于LXC(Linux Container)内核虚拟化技术实现,提供一系列更强的功能,比如镜像.Dockerfile等:

scala akka 修炼之路6(scala函数式柯里化风格应用场景分析)

胜败兵家事不期,包羞忍耻是男儿--斗牛士fighting,fighting,fighting... 小象学习和使用scala也一段时间了,最初小象学习scala主要为了学习spark生态,但是深入学习scala的一些特性后,深深被scala函数式和面向对象的风格所折服,不得不赞美设计这门语言的设计者.小象大学阶段在使用MATLAB做数据分析和自动化设计时,就非常喜欢使用MATLAB的命令行和面向矩阵运算的风格编写分析代码:喜欢使用java编写层次化和清晰的模块接口,而这些Scala语言设计中都有

典型用户及用户场景分析

典型用户及用户场景分析 糖糖---一个热爱编程的准程序员 名字 糖糖 性别.年龄 男,刚21岁 收入 暂时还没有 比例和重要性 市场比例很大,很重要 典型场景 写了一段自认为很优秀的代码,想要保存在一个合适的地方 使用本软件/服务的环境 需要保存自己的代码 生活/工作情况 现在还是学生,努力学习 知识层次和能力 大学还未毕业,学习热情极高,编程能力较好 用户的动机.目的和困难 保存代码,但是没有合适的地方 用户的偏好 喜欢给代码增加自定义的标签 呆呆---热爱思考人生的缺乏编程联系的“小学生”

http协议学习系列

深入理解HTTP协议(转)  http://www.blogjava.net/zjusuyong/articles/304788.html http协议学习系列   1. 基础概念篇 1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列

SIP包的分析

今天工作碰到了两个装置之间SIP包的抓取和分析,然后结合RFC3261的文档说明,记录下今天所理解的. 1.SIP协议:SIP的详细RFC文档可见:rfc3261Session Initiation(会话初始协议),允许使用Internet端点(用户代理)来寻找参与者并且允许建立一个可共享的会话描述.SIP允许创建基础的 networkhosts(叫做代理服务器),并且允许终端用户注册上去,发出会话邀请,或者发出其他请求.可以用来创建,修改和终止会话,它独立运作于通讯协议之下,并且不依赖建立的会

典型用户与用户场景分析

自习室查询APP典型用户和用户场景分析: 典型用户 姓名 阿涛 年龄 19 收入 目前为在校大学生,平时做一些兼职工作 用户比例 典型场景 使用软件的查询自习室功能 使用环境 android智能手机 生活工作能力 周一到周五期间在校学习,周末节假日到校外兼职. 知识层次和能力 在校大学生,对电脑.手机使用熟练 动机.目的和困难 姜东每次上自习都需要到教学楼大厅下查看空教室,如果电子屏坏了(比如说二教)就只能一个教室一个教室的去找了. 用户的偏好 爱学习,平时喜欢去图书馆,喜欢科技类书籍 用户场景

RTSP协议学习

目录 RTSP协议学习笔记... 1 第一部分:RTSP协议... 3 一.       RTSP协议概述... 3 二.       RTSP协议与HTTP协议区别... 3 三.       RTSP重要术语... 4 1.       集合控制(Aggregatecontrol ):. 4 2.       实体(Entity):... 4 3.       容器文件(Containerfile):... 4 4.       RTSP会话(RTSP session ):... 4 四. 

网关协议学习:CGI、FastCGI、WSGI

CGI CGI即通用网关接口(Common Gateway Interface),是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的规程.CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体.通俗的讲CGI就像是一座桥,把网页和WEB服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页.CGI 的