SIP协议学习笔记一.docx

上传人:b****2 文档编号:24312905 上传时间:2023-05-26 格式:DOCX 页数:52 大小:1.66MB
下载 相关 举报
SIP协议学习笔记一.docx_第1页
第1页 / 共52页
SIP协议学习笔记一.docx_第2页
第2页 / 共52页
SIP协议学习笔记一.docx_第3页
第3页 / 共52页
SIP协议学习笔记一.docx_第4页
第4页 / 共52页
SIP协议学习笔记一.docx_第5页
第5页 / 共52页
点击查看更多>>
下载资源
资源描述

SIP协议学习笔记一.docx

《SIP协议学习笔记一.docx》由会员分享,可在线阅读,更多相关《SIP协议学习笔记一.docx(52页珍藏版)》请在冰豆网上搜索。

SIP协议学习笔记一.docx

SIP协议学习笔记一

SIP协议

目 录

1.1 概述2

1.1.1 基本概念2

1.1.2 相关术语3

1.1.3 协议栈结构5

1.1.4 SIP协议的应用6

1.1.5 SIP协议的承载7

1.2 协议消息7

1.2.1 消息类型7

1.2.2 消息结构10

1.3 基本消息流程22

1.3.1 SIP用户注册流程22

1.3.2 成功的SIP用户呼叫流程24

1.4 IMS中的SIP29

1.4.1 IMS中的SIP协议29

1.4.2IMS经典信令流程讲解31

1.5 VoLTE知识点总结35

1.5.1 VoLTE总体流程-承载35

1.5.2VoLTE注册流程-EPSattach35

1.5.3 VoLTE基本呼叫流程(SIP)36

1.5.4 VoLTE基本呼叫流程(SIP)37

1.5.5 VoLTE的承载组合37

 

1.1 概述

1.1.1 基本概念

会话启动协议SIP(SessionInitiationProtocol)是由IETF提出并主持研究的一个在IP网络上进行多媒体通信的应用层控制协议,它被用来创建、修改、和终结一个或多个参加者参加的会话进程。

这些会话包括Internet多媒体会议、Internet电话、远程教育以及远程医疗等。

即所有的因特网上交互式两方或多方多媒体通信活动,统称为多媒体会话。

参加会话的成员可以通过组播方式、单播联网方式或者两者结合的方式进行通信。

SIP协议是一个正在发展和不断研究中的协议。

一方面,它借鉴了其他Internet标准和协议的设计思想,在风格上遵循因特网一贯坚持的简练、开放、兼容和可扩展等原则,并充分注意到因特网开放而复杂的网络环境下的安全问题。

另一方面,它也充分考虑了对传统公共电话网的各种业务,包括IN业务和ISDN业务的支持。

利用带有会话描述的SIP邀请消息来创建会话,以使参加者能够通过SIP交互进行媒体类型协商。

它通过代理和重定向请求用户当前位置,以支持用户的移动性。

用户也可以登记它们的当前位置。

SIP协议独立于其他会议控制协议,它在设计上独立于下面的传输层协议,因此可以灵活方便地扩展其他附加功能。

SIP作为一个应用层的多媒体会话信令协议,可以被用来发起一个会话进程、在会话中邀请其他参加者加入会议,会话本身可以通过基于组播协议的会话通告协议(SAP)、电子邮件、网页通告、以及轻量级号薄访问协议(LDAP)等方式预先通告各个可能的参加者。

SIP协议支持别名映射、重定向服务、ISDN和IN业务。

它支持个人移动(personalmobility),即终端用户能够在任何地方、任何时间请求和获得已订购的任何电信业务。

总的来说,会话启动协议能够支持下列五种多媒体通信的信令功能:

●             用户定位:

确定参加通信的终端用户的位置;

●             用户通信能力协商:

确定通信的媒体类型和参数;

●             用户意愿交互:

确定被叫是否乐意参加某个通信;

●             建立呼叫:

包括向被叫“振铃”,确定主叫和被叫的呼叫参数;

●             呼叫处理和控制:

包括呼叫重定向、呼叫转移、终止呼叫等等。

SIP协议可以通过MCU(MultipointControlUnit)、单播联网方式、或组播方式创建多方会话,支持PSTN和因特网电话之间的网关功能。

SIP协议可以与其他用于建立呼叫的信令系统或协议结合使用,它在设计上充分考虑了对其他协议的可扩展性。

譬如,SIP协议支持的主叫可以识别出H.323协议支持的被叫,通过H.245网关利用H.225.0协议向被叫发起并建立呼叫;另外,一个SIP主叫可以识别出PSTN上的被叫及其电话号码,通过与PSTN相连的网关向被叫发起并建立呼叫。

SIP协议不提供发言控制(floorcontrol)、投票等会议控制功能,也不规定如何管理一个会议。

但是SIP协议可被用来引发这些会议控制协议。

SIP协议本身不具备资源预留功能,但可以向被邀请者们传达这方面的信息。

1.1.2 相关术语

1.呼叫

一个呼叫是由一个公共源端所邀请的在一个会议中的所有参加者组成,由一个全球唯一的Call-ID进行标识。

例如:

由同一个源邀请的一个会议的所有参加者构成一个呼叫;点到点IP电话会话是一种最简单的会话,它映射为单一的SIP呼叫。

通常情况下,呼叫由主叫方创建,但是更一般说来,呼叫可由并不参与媒体通信的第三方创建,此时会话的主叫方和会话的邀请方并不相同。

对于多播会议来说,一个用户可由不同的人邀请参加同一会议,则每一个邀请应视作不同的呼叫。

对于基于MCU的会议,每个参与者使用一个呼叫邀请自己加入MCU。

2.事务

SIP是一个客户/服务器协议。

客户和服务器之间的操作从第1个请求至最终响应为止的所有消息构成一个SIP事务。

一个正常的呼叫一般包含三个事务。

其中,呼叫启动包含两个操作请求:

邀请(Invite)和证实(ACK),前者需要回送响应,后者只是证实已收到最终响应,不需要回送响应。

呼叫终结包含一个操作请求:

再见(Bye)。

3.SIPURL

为了能正确传送协议消息,SIP还需解决两个重要的问题。

一是寻址,即采用什么样的地址形式标识终端用户;二是用户定位(下面介绍)。

SIP沿用WWW技术解决这两个问题。

寻址采用SIPURL(UniformResourceLocators),按照RFC2396规定的URI导则定义其语法,特别是用户名字段可以是电话号码,以支持IP电话网关寻址,实现IP电话和PSTN的互通。

SIPURL的一般结构为:

SIP:

用户名:

口令@主机:

端口;传送参数;用户参数;方法参数;生存期参数;服务器地址参数?

头部名=头部值

“SIP”表示需采用SIP协议和所指示的端系统通信。

“用户名”可以由任意字符组成,一般可取类似与E-mail用户名形式,也可以是电话号码(SoftX3000目前用户名是电话号码)。

“主机”可为主机域名或IPv4地址。

“端口”指示请求消息送往的端口号,其缺省值为5060,即公开的SIP端口号。

“口令”可以置于SIPURL中,但一般不建议这样做,因为其安全性是有问题的。

“传送参数”指示采用TCP还是UDP传送,缺省值为UDP。

“用户参数”,SIPURL的一个特定功能是允许主机类型为IP电话网关,此时,用户名可以为一般的电话号码。

由于BNF语法表示无法区分电话号码和一般的用户名,因此,在域名后增加了“用户参数”字段。

该字段有两个可选值:

IP和电话,当其设定为“电话”时,表示用户名为电话号码,对应的端系统为IP电话网关。

“方法参数”指示所用的方法(操作)。

“生存期参数”指示UDP多播数据包的寿命,仅当传送参数为UDP、服务器地址参数为多播地址时才能使用。

“服务器地址参数”指示和该用户通信的服务器的地址,它覆盖“主机”字段中的地址,通常为多播地址。

“传送参数”、“生存期参数”、“服务器地址参数”和“方法参数”均属于URL参数,只能在重定向地址,即后面所说的Contact字段中才能使用。

下面给出若干个SIPURL的示例:

Sip;55500200@191.169.1.112;

55500200为用户名,191.169.1.112为IP电话网关的IP地址。

Sip;55500200@127.0.0.1:

5061;User=phone;

55500200为用户名,127.0.0.1为主机的IP地址,5061为主机端口号。

用户参数为“电话”,表示用户名为电话号码。

Sip:

alice@;method=REGISTER;

Alice为用户名,为主机域名。

方法参数为“登记”。

4.用户定位

用户定位基于登记。

SIP用户终端上电后即向登记服务器(SoftX3000)登记,SIP专门为此定义了一个“登记”(REGISTER)请求消息,并规定了登记操作过程。

5.定位服务(LocationService)

SIP重定位服务器或代理服务器用来获得被叫位置的一种服务,可由定位服务器提供,但SIP协议不规定SIP服务器如何请求定位服务。

在华为U-SYS解决方案中,SoftX3000兼任定位服务器的角色。

6.代理,代理服务器(Proxy、Proxysever)

作为一个逻辑网络实体代表客户端转发请求或者响应,可以同时作为客户端和服务器端。

代理服务器有三种形态:

Stateless、Stateful和CallStateful,其可以采用分支、循环等方式向多个地址尝试转发请求。

代理服务器的主要功能:

路由、认证鉴权、计费监控、呼叫控制、业务提供等。

在华为U-SYS解决方案中,SoftX3000兼任代理服务器的角色。

7.重定向服务器(Redirectserver)

重定向服务器将请求中的目的地址映射为零个或多个新的地址,然后返回给客户端,客户端直接再次向这些新的地址发起请求。

重定向服务器并不接收或者拒绝呼叫,主要完成路由功能,与注册过程配合可以支持SIP终端的移动性。

在华为U-SYS解决方案中,SoftX3000兼任重定向服务器的角色。

8.注册员(Registrar)

注册员为接收注册请求的服务器,通常与Proxy或者RedirectServer共存。

注册员需要将注册请求中的地址映射关系保存到数据库中,供后续的相关呼叫过程使用,同时可以提供定位服务。

在华为U-SYS解决方案中,SoftX3000兼任注册员的角色。

9.用户助理(UserAgent)

用来发起或者接收请求的逻辑实体称为UserAgent。

10.用户助理客户(UserAgentClient)

发起请求的一方称为UAC(UserAgentClient),举例SIPPhone就是UAC的一种实际形态。

11.用户助理服务器(UserAgentServer)

接收请求的一方称为UAS(UserAgentServer),举例SoftX3000就是UAS的一种实际形态。

注意:

UAC和UAS的划分是针对一个事务而言的。

1.1.3 协议栈结构

SIP协议栈结构如图3-1所示。

图1-1SIP协议栈

SIP协议是IETF多媒体数据和控制体系结构的一部分,与其它协议相互合作,例如:

RSVP(ResourceReServationProtocol)用于预约网络资源,RTP(Real-timeTransmitProtocol)用于传输实时数据并提供服务质量(QoS)反馈,RTSP(Real-TimeStreamProtocol)用于控制实时媒体流的传输,SAP(SessionAnnouncementProtocol)用于通过组播发布多媒体会话,SDP(SessionDescriptionProtocol)用于描述多媒体会话。

但是SIP协议的功能和实施并不依赖这些协议。

传输层支持:

SIP协议承载在IP网,网络层协议为IP,传输层协议可用TCP或UDP,推荐首选UDP。

⏹语法和编码层

采用扩展的BNF语法。

⏹传输层

发送和接收SIP消息。

⏹事务层

匹配事务,处理应用层重传和超时,匹配请求和响应。

⏹事务用户层

创建和取消事务实例

除无状态proxy外,每个SIP实体都是一个事务用户。

1.1.4 SIP协议的应用

SoftX3000通过SIP/SIP-T与其它软交换系统互通,以及与其它SIP域设备(如SIPPhone,SIPSoftphone等)互通,SIP协议在NGN中的典型应用如图1-2所示:

图1-2SIP在NGN中的典型应用

1.1.5 SIP协议的承载

SIP协议的承载,如下图1-3所示:

图1-3SIP协议的承载

1.2 协议消息

1.2.1 消息类型

SIP消息采用文本方式编码,分为两类:

请求消息和响应消息。

1.请求消息

用于客户端为了激活按特定操作而发给服务器的SIP消息,包括INVITE,ACK,OPTIONS,BYE,CANCEL和REGISTER消息等,各消息功能如表1-1所示。

表1-1请求消息

请求消息

消息含义

INVITE

发起会话请求,邀请用户加入一个会话,会话描述含于消息体中。

对于两方呼叫来说,主叫方在会话描述中指示其能够接受的媒体类型及其参数。

被叫方必需在成功响应消息的消息体中指明其希望接受哪些媒体,还可以指示其行将发送的媒体。

如果收到的是关于参加会议的邀请,被叫方可以根据Call-ID或者会话描述中的标识确定用户已经加入该会议,并返回成功响应消息。

ACK

证实已收到对于INVITE请求的最终响应。

该消息仅和INVITE消息配套使用。

BYE

结束会话

CANCEL

取消尚未完成的请求,对于已完成的请求(即已收到最终响应的请求)则没有影响

REGISTER

注册

OPTIONS

查询服务器的能力

 

2.响应消息

用于对请求消息进行响应,指示呼叫的成功或失败状态。

不同类的响应消息由状态码来区分。

状态码包含三位整数,状态码的第一位用于定义响应类型,另外两位用于进一步对响应进行更加详细的说明。

各响应消息分类和含义如表1-2所示。

表3-2响应消息

序号

状态码

消息功能

1xx

信息响应(呼叫进展响应)

表示已经接收到请求消息,正在对其进行处理

100

试呼叫

180

振铃

181

呼叫正在前转

182

排队

2xx

成功响应

表示请求已经被成功接受、处理

200

OK

3xx

重定向响应

表示需要采取进一步动作,以完成该请求

300

多重选择

301

永久迁移

302

临时迁移

303

见其它

305

使用代理

380

代换服务

4xx

客户出错

表示请求消息中包含语法错误或者SIP服务器不能完成对该请求消息的处理

400

错误请求

401

无权

402

要求付款

403

禁止

404

没有发现

405

不允许的方法

406

不接受

407

要求代理权

408

请求超时

410

消失

413

请求实体太大

414

请求URI太大

415

不支持的媒体类型

416

不支持的URI方案

420

分机无人接听

421

要求转机

423

间隔太短

480

暂时无人接听

481

呼叫腿/事务不存在

482

相环探测

483

跳频太高

484

地址不完整

485

不清楚

486

线路忙

487

终止请求

488

此处不接受

491

代处理请求

493

难以辨认

5xx

服务器出错

表示SIP服务器故障不能完成对正确消息的处理

500

内部服务器错误

501

没实现的

502

无效网关

503

不提供此服务

504

服务器超时

505

SIP版本不支持

513

消息太长

6xx

全局故障

表示请求不能在任何SIP服务器上实现

600

全忙

603

拒绝

604

都不存在

606

不接受

 

请求消息和响应消息都包括SIP头字段和SIP消息字段。

在SIP消息中加入SDP消息正文部分。

1.2.2 消息结构

1.请求消息

(1)       请求消息结构

如图1-4所示是SIP请求命令的格式,由起始行、消息头和消息体组成。

通过换行符区分消息头中的每一条参数行。

对于不同的请求消息,有些参数可选。

图1-4SIP请求消息结构

(2)       请求消息参数

下面仅对几个常用的参数字段进行说明。

●             Call-ID

该字段用以唯一标识一个特定的邀请或标识某一客户的所有登记。

需要注意的是,一个多媒体会议可能会有多个呼叫,每个呼叫有其自己的Call-ID。

例如,某用户可数次邀请某人参加同一历时很长的会议。

用户也可能会收到数个参加同一会议或呼叫的邀请,其Call-ID各不相同。

用户可以利用会话描述中的标识,例如SDP中的o(源)字段的会话标识和版本号判定这些邀请的重复性。

Call-ID的一般格式为:

Call-ID:

本地标识@主机

其中,主机应为全局定义域名和全局可选路IP地址,此时,本地标识由在“主机”范围内唯一的URI字符组成。

否则,本地标识必须是全局唯一的值,以保证Call-ID的全局唯一性。

Call-ID字符需区分大小写。

Call-ID示例:

Call-Id:

call-973636852-4@191.169.150.101

其中,191.169.150.101为主机的IP地址,call-973636852-4为全局唯一的本地标识。

●             From

所有请求和响应必须包含此字段,以指示请求的发起者。

服务器将此字段从请求消息复制到响应消息。

该字段的一般格式为:

From:

显示名;tag=xxxx

其中,显示名为用户界面上显示的字符,如果系统不予显示,应置显示名为“匿名(Anonymous)”。

显示名为任选字段。

tag称为标记,为16进制数字串,中间可带连字符“-”。

当两个共享同一SIP地址的用户实例用相同的Call-ID发起呼叫邀请时,就需用此标记予以区分。

标记值必须全局唯一。

用户在整个呼叫期间应保持相同的Call-ID和标记值。

From字段的示例:

From:

1000@191.169.200.61>;tag=1c17691

●             To

该字段指明请求的接收者,其格式和From相同,仅第一个关键词代之以To。

所有请求和响应消息必须包含此字段。

字段中的标记参数可用于区分由同一SIPURL标识的不同的用户实例。

由于代理服务器可以并行分发多个请求,同一请求可能到达用户的不同实例(如住宅电话等)。

由于每个实例都可能响应,因此需用标记来区分来自不同实例的响应。

需要注意的是,To字段中的标记是由每个实例至于响应消息中的。

To字段的示例:

To:

1000@191.169.200.61>

To:

1001@191.169.200.61>;tag=62beb3ca

注意,在SIP中,Call-ID、From和To三个字段标识一个呼叫分支。

在代理服务器并行分发请求时,一个呼叫可能会有多个呼叫分支。

●             Cseq

Cseq称之为命令序号。

客户在每个请求中应加入此字段,它由命令名称和一个十进制序号组成,该序号由请求客户选定,在Call-ID范围内唯一确定。

序号初值可为任意值,其后具有相同Call-ID值,但不同命令名称、消息体的请求,其Cseq序号应加1。

重发请求的序号保持不变。

服务器将请求中的Cseq值复制到响应消息中,用于将请求和其触发的响应相关联。

ACK和CANCEL请求的Cseq值(十进制序号)和对应的INVITE请求相同,BYE请求的Cseq序号应大于INVITE请求。

服务器必须记忆相同Call-ID的INVITE请求的最高序号,收到序号低于此值的INVITE请求应在给出响应后予以丢弃。

由代理服务器并行分发的请求,其Cseq值相同。

严格来说,Cseq对于任何可由BYE或CANCEL请求取消的请求以及客户可连续发送多个具有相同Call-ID请求的情况都是需要的,其作用是判定响应和请求的对应关系。

Cseq字段的示例:

Cseq:

1INVITE

●             Via

Via字段用以指示请求历经的路径。

它可以防止请求消息传送产生环路,并确保响应和请求消息选择同样的路径,以保证通过防火墙或满足其它特定的选路要求。

发起请求的客户必须将其自身的主机名或网络地址插入请求的Via字段,如果未采用缺省端口号,还需插入此端口号。

在请求前传过程中,每个代理服务器必须将其自身地址作为一个新的Via字段加在已有的Via字段之前。

如果代理服务器收到一个请求,发现其自身地址位于Via头部中,则必须回送响应“检测到环路”。

当请求消息通过网络地址翻译点(如防火墙)时,请求的源地址和端口号可能被改变,此时Via字段就不能成为响应消息选路的依据。

为了防止这一点,代理服务器应校验顶端Via字段,如果发现其值和代理服务器检测到的前站地址不符,则应在该Via字段中加入“receive”参数,如此修改后的字段称为“接收方标记Via头部字段”。

例如:

Via:

SIP/2.0/UDPsoftx3000.bell-:

5060

Via:

SIP/2.0/UDP10.0.0.1:

5060;received=191.169.12.30

由点10.0.0.1发出的请求消息路径外部地址为191.169.12.30的网络地址翻译点后,到达代理服务器softx3000.bell-。

后者注意到前站发送地址和Via字段地址不符,就把实际发送地址作为接收方标记加在顶端Via字段的末尾,然后再将代理自己的地址作为新加的Via字段置于最上面。

若代理服务器向多播地址发送请求,则必须在其Via头部字段中加入“多播地址(maddr)”参数,此参数指明该多播地址。

代理服务器或UAC收到Via头部字段时的处理规则是:

规则1:

第1个Via头部字段应该指示本代理服务器或UAC。

如果不是,丢弃该消息,否则,删除该Via字段。

规则2:

如果没有第2个Via头部字段,则该响应已经到达目的地。

否则,继续做如下处理。

规则3:

如果第2个Via头部字段包含“maddr”参数,则按该参数指示的多播地址发送响应,端口号由“发送方”参数指明,如未指明,就使用端口号5060。

响应的生存期应置为“生存期(ttl)”参数指定的值,如未指明,则置为1。

规则4:

如果第2个Via字段不包含“maddr”参数,但有一个接收方标记字段,则应将该响应发往“received”参数指示的地址。

规则5:

如果既无“maddr”参数又无标记,就按发送方参数指示的地址发送响应。

Via字段的一般格式为:

Via:

发送协议发送方;隐藏参数;生存期参数;多播地址参数;接收方标记,分支参数

其中,发送协议的格式为:

协议名/协议版本/传送层,协议名和传送层的缺省值分别为SIP和UDP。

发送方为通常的发送方主机和端口号。

隐藏参数就是关键词hidden,如有此参数,表示该字段已由上游代理予以加密,以提供隐私服务。

多播地址参数和接收方标记的意义如前所述。

生存期参数与多播地址参数配用。

分支参数用于代理服务器并行分发请求时标记各个分支,当响应到达时,代理可判定是哪一分支的响应。

Via字段的示例:

Via:

SIP/2.0/UDP191.169.1.116:

5061;ttl=16;maddr=191.169.10.20;branch=z9hG4bkbc427dad6

●             Contact

该字段用于INVITE、ACK和REGISTER请求以及成功响应、呼叫进展响应和重定向响应消息,其作用是给出其后和用户直接通信的地址。

INVITE和ACK请求中的Contact字段指示该请求发出的位置。

它使被叫可以直接将请求(如BYE请求)发往该地址,而不必借助Via字段经由一系列代理服务器返回。

对INVITE请求的成功响应消息可包含Contact字段,它使其后SIP请求(如ACK请求)可直接发往该字段给定

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1