sip呼叫业务流程(SIP协议详解以呼叫中心呼入呼出为例)

农村养殖畜牧网 养殖技术 3890

一、背景

Internet的许多应用都需要建立和管理一个会话,会话在这里的含义是在参与者之间的数据的交换。由于考虑到参与者的实际情况,这些应用的实现往往是很复杂的:参与者可能是在 *** 间移动,他们可能可以有多个名字,他们中间的通讯可能是基于不同的媒介(比如文本,多媒体,视频,音频等)-有时候是多种媒介一起交互。人们创造了无数种通讯协议应用于实时的多媒体会话数据比如声音,影像,或者文本。

SIP(会话初始协议)和这些协议一样,同样允许使用Internet端点(用户 *** )来寻找参与者并且允许建立一个可共享的会话描述。为了能够定位精确的会话参与者,并且也为了其他的目的,SIP允许创建基础的network hosts(叫做 *** 服务器),并且允许终端用户注册上去,发出会话邀请,或者发出其他请求。SIP是一个轻形的,多用途的工具,可以用来创建,修改和终止会话,它独立运作于通讯协议之下,并且不依赖建立的会话类型。

传统拨打 *** 流程:

A呼叫B,邀请B建立通话(Invite)

*** B振铃(Ring),同时 *** A也可以听见振铃

*** B提起表示应答,因此通话建立

通话中。。。

任意方挂断 *** ,通话结束

传统 *** 使用电磁波传输通信信号,而现阶段 *** 几乎拥有完整的覆盖率,因此SIP协议的意义是在IP *** 中实现 *** *** 功能

二、协议内容

sip协议是应用层协议,与其他应用层协议协同工作,通过 *** 控制多媒体通信会话

通话双方需在IP *** 中拥有一个SIP账号,区别于传统数字号码,SIP采用URL表示 ***

sip:jack@google.com:5060

解析:

sip:表示采用sip协议

​ jack:发起请求的用户名,字母数字均可

​ google.com:账号所属服务器域名,亦可以使用ip表示

​ 5060:连接的端口号

sip呼叫业务流程(SIP协议详解以呼叫中心呼入呼出为例)

三、SIP通信流程:

1、软 *** A 向 B 发送一个 SIP消息 INVITE, 邀请B通话

2、软 *** B 振铃,向A 回复一个SIP消息 RING, 通知 A 正在振铃中,请A等待

3、软 *** B 提机,向A发一个SIP消息 OK, 通知 A 可以通话了

4、软 *** A 向 B 回复一个回应消息 ACK,正式启动通话

5、接下来,双方通话

6、软 *** B 挂机,向 A 发一个SIP消息 BYE, 通知 A 通话结束

7、软 *** A 向 B 回复一个消息 OK, 通话结束

总结:不难发现,SIP协议完整地实现了传统 *** 通信流程,且以ip形式运行在 *** 环境中

四、深入协议主体

几个概念:

SIP协议的设计非常简单,配置有限的命令。它也是基于文本的,所以任何人都可以读取SIP会话中的端点之间传递的SIP消息。

有一些实体帮助SIP创建其 *** 。在SIP中,每个网元由SIP URI(统一资源标识符)来标识,它像一个地址。以下是 *** 元素

用户 ***

*** 服务器

注册服务器

重定向服务器

位置服务器

SIP基于客户机 - 服务器架构,其中呼叫者的 *** 充当发起呼叫的客户端,被叫方的 *** 充当响应呼叫的服务器

用户 ***

用户 *** 客户端(UAC) - 发送请求并接收响应的实体

用户 *** 服务器(UAS) - 接收请求并发送响应的实体

*** 服务器

*** 元素接收来自用户 *** 的请求并将其转发给另一个用户,基本上 *** 服务器的作用就像一个路由器,它有一些智慧来了解SIP请求,并在URI的帮助下发送它, *** 服务器位于两个用户 *** 之间,源和目的地之间最多可以有70个 *** 服务器

有两种类型的 *** 服务器

无状态 *** 服务器 - 它只是转发收到的消息。这种类型的服务器不存储任何呼叫或交易的信息

有状态 *** 服务器 - 这种类型的 *** 服务器可以跟踪收到的每个请求和响应,并且如果需要,可以将来使用它。如果对方没有响应,它可以重新发送请求

INVITE消息实例:

INVITE sip:some@192.168.31.131:50027 SIP/2.0

Via: SIP/2.0/UDP 192.168.31.131:51971;rport;branch=z9hG4bKiYblddPPX

Max-Forwards: 70

To: <sip:some@192.168.31.131:50027>

From: <sip:null@null>;tag=Prf3c3Xc

Call-ID: cenXTa4i-1423587756904@appletekiAir

CSeq: 1 INVITE

Content-Length: 215

Content-Type: application/sdp

Contact: <sip:null@192.168.31.131:51971;transport=UDP>

v=0

o=user1 685988692 621323255 IN IP4 192.168.31.131

s=-

c=IN IP4 192.168.31.131

t=0 0

m=audio 49432 RTP/AVP 0 8 101

a=rtpmap:0 PCMU/8000

a=rtpmap:8 PCMA/8000

a=rtpmap:101 telephone-event/8000

a=sendrecv

请求消息分为以下几部分,起始行、消息头部、空行(表示消息结束)、消息体,下面将逐一解释协议的具体内容

起始行 (start-line)

# ① ② ③ ④ ⑤

INVITE sip:some@192.168.31.131:50027 SIP/2.0

① 请求 *** ,本例是INVITE, SIP协议规定的Method有六种: INVITE, ACK, CANCEL用于创建对话,BYE用于结束对话, REGISTER用于登记,OPTIONS用于查询服务器能力

② 协议头,表示使用sip协议

③ 连接用户名

④ 连接URL+port

⑤ sip版本号,本例中使用sip 2.0协议版本

消息头部 (header)

Via: SIP/2.0/UDP 192.168.31.131:51971;rport;branch=z9hG4bKiYblddPPX

Max-Forwards: 70

To: <sip:some@192.168.31.131:50027>

From: <sip:null@null>;tag=Prf3c3Xc

Call-ID: cenXTa4i-1423587756904@appletekiAir

CSeq: 1 INVITE

Content-Length: 215

Content-Type: application/sdp

Contact: <sip:null@192.168.31.131:51971;transport=UDP>

① via字段

Via: SIP/2.0/UDP 192.168.31.131:51971;rport;branch=z9hG4bKiYblddPPX Max-Forwards: 70

via头字段:表示经过的sip网元的主机名和 *** 地址

branch参数:用于标识此请求创建的事务,且该字段必须存在

参数必须被分成两部分:之一部分符合一般的原则(对于RFC3261,z9hG4bK),第二部分(此例为iYblddPPX)被用来实现loop detection以用来区分loop和spiral。loop和spiral均指Proxy收到一个请求后转发,然后此转发的请求又重新到达该Proxy,区别是loop中请求的Request-URI以及其他影响Proxy处理的头字段均不变,而Spiral请求中这些部分必需有某个发生改变,spiral发生的典型情况是Request-URI发生改变

Proxy在插入Via字段前,其branch参数的loop. detection部分依据以下元素编码:To Tag,From Tag,Call-ID字段,Request-URI,Topmost Via字段,Cseq的序号部分(即与request method无关),以及proxy-require字段,proxy authorization字段。注意:request method不能用于计算branch参数,比如CANCEL以及非2XX response的ACK与其所cancel的request或对应的INVITE属于同一个事务,即其branch参数相同。见RFC3261 P22 P25 P39 P95 P105

Max-Forwards: 表示request到达UAS的跳数的限制

② To字段

To: <sip:some@192.168.31.131:50027>

UAC发起一个Dialog请求,即out-of-dialog,由于dialog尚未建立,不含to tag参数,当UAS

收到INVITE请求时,在其发出的2XX或101-199响应中设置to tag参数,与UAC设置的From Tag参数以及Call-ID(呼叫唯一标识)一起作为一个Dialog ID(对话唯一标识,包含To tag,From Tag,Call-ID)的一部分。 RFC3261规定只有INVITE请求与2xx或101-199响应可以建立Dialog

③ From字段

From: <sip:null@null>;tag=Prf3c3Xc

From字段表示消息的发送者,字段必须包含tag参数作为ID的一部分

④ CALL-ID字段

Call-ID: cenXTa4i-1423587756904@appletekiAir

call-id表示同一个UAC用户的所有请求后产生的一组响应的唯一标识,CALL-ID在UAC发出请求中设置的From Tag字段以及To Tag字段组成一个Dialog-ID

⑤ CSeq字段

CSeq: 1 INVITE

CSeq用于在同一个Dialog中标识及排序事务和区分新的请求以及请求的重发,内容包括顺序号和 *** , *** 必须和对应的requests匹配。针对dialog里的每一个新的request(例如BYE,re-INVITE,OPTION),CSeq序号加1,但是CANCEL、ACK除外,它们的CSeq序号必须与所对应的requests相同

⑥ Content-Length字段

Content-Length: 215

Content-Length字段表示消息体的长度,用十进制数表示

⑦ Content-Type字段

Content-Type: application/sdp

Content-Type表示发给接收器的消息体的媒体类型。如果消息体不是空的,则Content-type header field一定要存在。如果Content-type header field存在,而消息体是空的,表明该

类型的媒体流长度是0

⑧ Contact字段

Contact: <sip:null@192.168.31.131:51971;transport=UDP>

该字段提供了UAC或UAS直接联系的SIP的URL,UAC在会话建立时在Contact字段提供自己的SIP的URL,UAC收到请求会绕过PROXY把响应发送给直接联系的SIP的URL。针对REGISTER事务,字段表示的是地址绑定的contact address

标签: sip呼叫业务流程 sip基本呼叫流程 sip呼叫流程图

抱歉,评论功能暂时关闭!