14 SIP协议关于本章
本章将对SIP协议做一简要介绍,包括涉及的基本概念、消息结构以及简要的消息流程。
14.1 概述
SIP(Session Initiation Protocol)是一个应用层控制协议,用于创建、更改和终止会话。这里的会话类型包括多媒体会议、Internet电话等类似的应用。SIP是实现VOIP(Voice over IP)的关键协议之一。
SIP支持别名映射、重定向服务、ISDN和智能网业务。它支持个人移动(personal mobility),即终端用户能够在任何地方、任何时间请求和获得已订购的任何电信业务。总的来说,SIP能够支持下列五种多媒体通信的信令功能。
l用户定位:确定参加通信的终端用户的位置;
l用户通信能力协商:确定通信的媒体类型和参数;
l用户意愿交互:确定被叫是否乐意参加某个通信;
l建立呼叫:包括向被叫“振铃”,确定主叫和被叫的呼叫参数;
l呼叫处理和控制:包括呼叫重定向、呼叫转移、终止呼叫等等。
SIP可以通过MCU(Multipoint Control Unit)、单播联网方式、或组播方式创建多方会话,支持PSTN和IP电话之间的网关功能。
SIP协议对低层协议作了最少的假设,低层协议可以为SIP协议提供可靠或非可靠传输,可以为分组或字节流业务。SIP可以使用UDP协议或TCP协议作为传输层协议,首选UDP协议。
14.1.1 相关概念
呼叫
一个呼叫是由一个会议中被同一个发起者邀请加入的所有成员组成的。一个SIP 呼叫由Call-ID进行标识。
因此,如果一个用户是被不同的人邀请参加同一个多点会议,那么每个邀请都构成一个呼叫。点到点IP电话会话是一种最简单的会话,它映射为单一的SIP呼叫。
呼叫分支
一个呼叫分支(Call leg)由Call-ID、To、From三个参数共同决定。在同一个Call-ID中,从A到B的请求与从B到A的请求都属于同一个呼叫分支,呼叫分支也可以理解成一次呼叫中消息经过的路径。
事务
事务是发生在客户端和服务器之间的,包括从客户端发给服务器的第一个请求消息直到服务器端发给客户端的最终响应消息,这期间的所有的消息。
事务是由一个呼叫分支中的CSeq顺序号来标识的。但也有例外,比如一个ACK 请求与对应的INVITE请求具有相同的CSeq,但它们却构成了各自的事务。
一个正常的呼叫一般包含三个事务。其中,呼叫启动包含两个操作请求:邀请(INVITE)和证实(ACK),前者需要回送响应,后者只是证实已收到最终响应,不需要回送响应。呼叫终结包含一个操作请求:再见(BYE)。
定位服务
SIP重定位服务器或代理服务器用来获得被叫位置的一种服务,可由定位服务器提供,但SIP协议不规定SIP服务器如何请求定位服务。
代理服务器
代理服务器(Proxy Server)是用于将SIP请求路由到目的地的中间路径。它既是客户端也是服务器。用户请求可以直接被代理服务器处理或被转发给别的代理服务器。代理服务器在转发之前要对消息进行解析,必要时还会改写请求。
重定向服务器
重定向服务器(Redirect server)将请求中的目的地址映射为零个或多个新的地址,然后返回给客户端,客户端直接再次向这些新的地址发起请求。重定向服务器并不接收或者拒绝呼叫,主要完成路由功能。
注册员
注册员(Registrar)为接收注册请求的服务器,通常与Proxy Server或者Redirect Server共存。注册员需要将注册请求中的地址映射关系保存到数据库中,供后续的相关呼叫过程使用,同时可以提供定位服务。
用户助理
用户助理(User Agent)是用来发起或者接收请求的逻辑实体。
14.1.2 SIP寻址
在SIP消息中,采用URL(Uniform Resource Locators)来指示请求发出的源
端和目的端的地址,以及重定向地址。
最常用的SIP URL的结构为:
SIP:user:password@host:port;transport-param|user-param|method-param|
ttl-param|maddr-param|other-param
SIP:表示需采用SIP协议和所指示的端系统通信。
用户名(user):可以由任意字符组成,一般可取类似于E-mail用户名形式,也可以是电话号码。
口令(password):口令可以置于SIP URL中,但因为以文本方式传送鉴权信息会有安全隐患,因此,并不推荐在SIP URL中包含口令。
主机(host):可为主机域名或IP地址。
端口(port):指示请求消息送往的端口号,其缺省值为5060,即公开的SIP
端口号。
传送参数(transport-param):指示采用TCP还是UDP传送,缺省值为UDP。
用户参数(user-param):SIP URL的一个特定功能是允许主机类型为IP电话
网关,此时,用户名可以为一般的电话号码。该字段有两个可选值:“IP”和“电话”,当其设定为“电话”时,表示用户名为电话号码,对应的端系统为IP电话网关。
方法参数(method-param):指示所用的方法(操作)。
生存期参数(ttl-param):指示UDP多播数据包的寿命,仅当传送参数为“UDP”、服务器地址参数为多播地址时才能使用。
服务器地址参数(maddr-param):指示和该用户通信的服务器的地址,它覆盖“主机”字段中的地址,通常为多播地址。
参数transport-param、user-param、method-param、 ttl-param、maddr-param、other-param是任选参数。
CSOFTX3000目前支持的SIP URL格式为:E.164号码@IP地址:端口号。如:
Sip:8613301080001@127.0.0.1:5060;
14.2 SIP消息类型
SIP消息采用文本方式编码,分为两类:请求消息和响应消息。
14.2.1 请求消息
请求消息是客户端为了激活特定操作而发给服务器端的消息,包括INVITE, ACK,OPTIONS,BYE,CANCEL和REGISTER消息,各消息功能如表14-1所示。
表14-1 请求消息