当前位置:文档之家› SIP 协议学习总结

SIP 协议学习总结

SIP 协议学习1初识SIP1.1 SIP定义Session Initiation Protocol会话初始协议是基于文本的信令协议。

是一个在IP网络上进行多媒体通信的应用层控制协议。

用来创建、修改和终结一个或多个参与者参加的会话进程。

SIP协议可用于发起会话,也可用于邀请成员加入已经用其他方式建立的会话。

SIP基于文本编解码。

采用事务机制,每一个请求出发Server的操作方法,请求和响应构成一个事务。

事务间彼此独立。

SIP独立于底层传输协议。

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

SIP支持5方面功能:1.用户定位:确定通信所用的端系统位置2.用户能力交换:确定所用的媒体类型和媒体参数3.用户可用性判定:确定被叫方是否空闲和是否愿意加入通信4.呼叫建立:邀请和提示被叫,在主被叫之间传递呼叫参数5.呼叫处理:包括呼叫终结和呼叫转移等1.2 SIP特点1.一个正在发展和不断研究中的协议。

2.简练、开放、兼容和可扩展等原则。

3.充分注意到因特网开放而复杂的网络环境下的安全问题。

4.充分考虑了对PSTN的各种业务,包括IN(Intelligent Network智能网)业务和ISDN业务(Integrated Services Digital Network综合业务数字网)的支持。

2SIP协议2.1 SIP协议结构1.最底层的是它的语法和编码层。

编码方式是采用扩展的Backus-Naur Form grammar(BNF范式)。

2.第二层是传输层。

定义了一个客户端如何发送请求和接收应答,以及一个服务器如何接收请求和发送应答。

所有的SIP要素都包含一个通讯层。

3.第三层是事务层。

事务层处理应用服务层的重发,匹配请求的应答,以及应用服务层的超时。

任何一个用户代理客户端(user agent client UAC)完成的事情都是由一组事务构成的。

有状态的代理服务器包含一个事务层;无状态的代理服务器不包含事务层。

4.事务层之上是事务用户TU。

每个SIP实体,除了无状态代理,都是一个事务用户。

TU可以创建客户事务,也可以取消客户事务。

2.2 SIP网络结构User Agent Client (UAC) 用户代理客户端:是一个逻辑的概念,是请求的创建方。

UAC 角色只在事务中存在。

User Agent Server(UAS) 用户代理服务器:是一个逻辑的实体,对SIP请求做出接受、拒绝或者转发的响应。

UAS角色在事务中存在。

注:UAC和UAS,是在串行事务处理的原理上定义的。

当主叫方A发出INVITE请求的时候,A作为UAC创建一个呼叫动作,当接收到被叫方B的BYE请求的时候,A作为UAS 响应。

UAC和UAS都可重定向。

Proxy Server代理服务器:是中间实体,即作为客户端也作为服务端,为客户端提供请求的转发服务。

代理服务器首先提供的是路由服务。

Location Server 定位服务器:是Internet中的公共服务器,查询可采用多种协议,如LDAP 或基于多播的协议。

Redirect Server重定位服务器:产生3xx应答的UAS服务器,指示客户端连接别的URI。

2.3 SIP协议要素SIP要素:包含用户代理客户端和服务器,无状态和有状态代理服务器和注册服务器,以及互相区别的核心Cores。

Cores:除了无状态代理服务器,都是事务用户。

UAC(用户代理客户端)和UAS(用户代理服务端)的cores的行为依赖于实现,对所有的实现都有几个公共原则。

对UAC来说,这些规则约束请求的建立;对UAS来说,这些规则约束请求的处理和应答。

UAC Core:在事务层和传输层之上实现的功能集合。

UAS Core:在事务层和传输层之上实现的功能集合。

2.3.1 服务器类型Server服务器:用来接收请求、处理请求并且发送回应给请求方。

典型的服务器有代理服务器,重定向服务器,登记服务器。

Proxy Server代理服务器:是中间实体,即作为客户端也作为服务端,为客户端提供请求的转发服务。

代理服务器首先提供的是路由服务。

Redirect Server重定向服务器:产生3xx应答的UAS服务器,指示客户端连接别的URI。

Registrar Server登记服务器:接收REGISTER请求的服务器。

将请求的信息放到定位服务器中,以便定位服务器方便查找位置信息。

2.3.2 常用术语Call呼叫:非正式的术语,指在端点之间的通讯行为,通常用于建立多媒体对话。

Dialog对话:持续一段时间的两个UA之间的端到端的SIP连接。

一个对话由SIP 消息建立,例如对INVITE请求回应的2xx响应。

用Call-id,local tag,remote tag来唯一标志一个对话。

Session会话:一个多媒体会话是一个由多媒体发送方和接受方组成得集合,并且包括在发送方和接受方之间的数据流。

一个多媒体会议是一个典型的多媒体会话。

SDP 中定义的会话可由一个或多个RTP(实时传输协议)组成。

一个被叫方可被多次邀请,被不同的呼叫方邀请到同一个会话。

一个会话可由SDP用户名,session id, 网络类型,地址类型和地址元素的连接组成。

事务:客户端和服务端的事件,包括了从第一个由客户端发送到服务端的请求,到最后一个(非1xx)服务端向客户端发出得终结应答。

如果请求是一个INVITE请求,并且终结应答是非2xx的应答,则事务还包括一个ACK给服务器做应答。

给INVITE请求的2xx应答的ACK回应,是一个独立的事务。

Message消息:SIP元素之间传送的协议数据。

SIP消息可以是请求或者应答。

Method方法:在服务器请求处理的主要功能。

REGISTER用于登记联系信息,INVITE,ACK, CANCEL用于建立会话,BYE用于结束会话,OPTIONS用于查询服务器负载。

Request请求:客户端发到服务端的SIP信息,用于执行特定得功能。

INVITE、ACK、OPTION、BYE、CANCEL都是请求消息。

Response应答:服务端发到客户端的SIP信息,用来标志从客户端发往服务端的请求处理得情况。

Provisional Response临时应答:服务器用来标志正在处理的应答,本应答并不结束一个SIP事务。

1xx应答就是临时的,其他应答标志着事务的结束。

Final Response终结响应:终止SIP事务的应答。

所有的2xx,3xx,4xx,5xx,6xx 响应都是终结响应。

2.3 SIP协议消息SIP消息采用文本方式编码,分两类:请求消息和应答消息。

请求消息和响应消息的格式,一般由起始行、若干消息头和消息体构成。

SIP一般消息= 起始行*消息头CRLF(空行)[消息体]起始行= 请求行/状态行(SIP请求消息起始行是请求行RL,响应消息起始行是状态行SL)每一个头域都由一个域名加上冒号(“:”)和域值组成。

Field-name:Field-value2.3.1 请求消息Request请求消息:客户端发到服务端的SIP信息,用于执行特定得功能。

INVITE、ACK、OPTION、BYE、CANCEL都是请求消息。

INVITE:发起会话请求。

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

它在SIP报头中包含了呼叫方、Call-ID、被叫方、呼叫顺序编号和其他内容。

也可以在呼叫过程中通过INVITE请求修改呼叫的操作状态(如让一方等待)。

INVITE消息通常包含呼叫参数的SDP说明,如媒体类型和传输地址。

当提供了SDP参数的多个选择时,选定的那个在应答消息中和200 OK一起返回。

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

该消息仅和INVITE消息配套使用,且是已被成功接受(编码200)的INVITE请求用ACK应答。

ACK消息可能包含被叫方的媒体类型能力的SDP描述。

如果成功应答中没有包含SDP 说明,最初的INVITE消息中的SDP参数将被用于媒体连接。

BYE:结束会话。

发送端终止介质流,认为呼叫已经终止,而不对对端的应答做出确认。

CANCEL:取消尚未完成的请求,对于已完成的请求(既已经收到最终响应的请求)没有影响。

也就是说,如果SIP服务器已收到一个INVITE请求但仍没有返回一个最终应答,收到一个CANCEL后,将停止处理这个INVITE呼叫;如果已为INVITE呼叫返回了最终应答,则CANCEL请求对这个事件无效。

CANCEL方法必须通过SIP报头中的Call-ID、Cseq、TO和FROM等值明确标示呼叫。

REGISTER:客户端用REGISTER方法向SIP服务器注册TO报头域中列出的地址,通知当前所处位置。

注册可由用户完成,也可由第三方完成,在FROM中进行指定。

REGISTER消息也包含注册附属的时间。

一个用户可同时在几个地点注册,通过这个方法告诉服务器,需要子啊所有注册地点查找该用户,直到用户被找到为止。

OPTIONS:查询服务器的能力,包括服务器所支持的方法和SDP。

如用户在某服务器上登记并处于在激活状态,该用户代理收到请求OPTIONS后就可发回响应消息,告知其能力集。

被叫用户代理还可回复忙闲等状态,并应回复一个Allow头部字段,指示它支持的方法。

2.3.2 应答消息Response应答消息:服务端发到客户端的SIP信息,用来标志从客户端发往服务端的请求处理得情况。

应答消息由状态码来区分,状态码包含三位整数。

第一位用于定义响应类型,其余两位用于进一步对响应码进行更加详细的说明。

响应码主要有以下六种:1xx:临时应答-请求已经接收,正在处理这个请求。

2xx:成功处理-请求已经成功接收,并且正确处理了这个请求。

3xx:重定向-需要附加的操作才能完成这个请求,本请求转发到其他的服务器上处理。

4xx:客户端错误--请求包含错误的格式或者不能在这个服务器上完成。

5xx:服务器错误-服务器不能正确的处理这个显然合法的请求。

3呼叫流程3.1 用户注册流程1.用户首次试呼时,终端代理A 向代理服务器发送REGISTER 注册请求;2.代理服务器通过后端认证/计费中心获知用户信息不在数据库中,便向终端代理回送401Unauthorized 质询信息,其中包含安全认证所需的令牌;3.终端代理提示用户输入其标识和密码后,根据安全认证令牌将其加密后,再次用REGISTER 消息报告给代理服务器;4.代理服务器将REGISTER 消息中的用户信息解密,通过认证/计费中心验证其合法后,将该用户信息登记到数据库中,并向终端代理A 返回成功响应消息200 OK。

3.2 用户呼叫流程根据上述的呼叫信息,对其进行详细的讲解。

1. 主叫方“+861069690069”发起语音呼叫,主叫方地址:172.16.20.210,向代理服务器(192.168.246.210:)发送INVITE请求,需要和被叫方“69690067”建立呼叫。

相关主题