0 引言 
  SIP(Session Initiation Protocol会话初始化协议)是由IETF于1999年提出的,用于在IP网络中建立、修改和终止多媒体会话,实现实时通信应用的一种应用层控制协议。其应用包括语音、视频、游戏、消息、呼叫控制和在线状态等[1]。在SIP协议应用中的会话主要包括普通电话呼叫、IP电话呼叫、Internet多媒体会话和多媒体分发等。SIP协议的设计模式借鉴了HTTP和SMTP协议,编码方式基于文本,协议简洁高效并且易于扩展。它能控制多媒体会议电话的建立和终结,并能协商和动态调整会话参数。 


1 SIP协议实体 
  SIP协议采用客户端/服务器模式。主要包括四种实体:SIP用户代理(User Agent,UA)、SIP注册服务器(Register Server)、SIP代理服务器(Proxy Server)和SIP重定向服务器(Redirect Server)[2]。每种实体在SIP协议体系结构中起到不同的作用,它们构成的网络服务链,共同支持SIP建立会话。位置服务器(Location Server)本身不属于SIP实体,但是它是任何使用SIP协议的体系结构中非常重要的一部分。 
  1.1 用户代理 
  SIP用户代理是用于和用户交互的SIP实体,包括软电话、硬件实现的SIP电话、其他计算机应用程序等,它通常有一个和用户连接的接口。根据SIP协议,一个UA按照逻辑功能可以分为用户代理客户端UAC(User Agent Client)和用户代理服务器UAS(User Agent Server)。在呼叫过程中UAC和UAS各有分工,其中UAC负责创建一个客户端事务并使用它来发起一个新的请求报文,而UAS则负责对消息进行响应,并生成响应报文,并根据情况创建服务端事务发送响应报文。 
  1.2 注册服务器 
  注册服务器是接收REGISTER请求消息的服务器,完成对用户的注册功能。在SIP通信中,UA向注册服务器发送注册请求,注册服务器验证UA身份后,把UA的统一资源定位符URI和地址的关联信息发送到代理服务器,并储存在位置服务器。 
  1.3 代理服务器 
  代理服务器是SIP网络中的一个中间实体,它负责将请求消息路由到UAS,将响应消息路由到UAC。在转发请求消息时,代理服务器接受用户代理的会话请求并查询注册服务器,获取收件方UA的地址信息。 
  1.4 重定向服务器 
  重定向服务器接收SIP请求消息,将请求消息的地址映射成零个或多个新地址,并且将这些新地址返回给客户机的服务器,通过查询位置服务对UA提供消息路由。与代理服务器不同的是它并不发起任何请求消息,而是将位置信息封装在一个3xx响应消息中返回给客户机,让客户机自行尝试下一跳位置。 
  1.5 位置服务器 
  位置服务器本身不属于SIP实体,是Internet中的公共服务器,向代理服务器和重定向服务器提供位置查询信息,为用户存储和返回可能的地址。位置服务器实质上是一个数据库,它包含单个URI到一个或多个联系地址之间的映射。 
  这些服务器元素只是逻辑上的划分,而物理上则可以是放置在同一台服务器上,也可以分布在不同的物理实体中。通过这些服务器可以实现用户认证、管理、呼叫控制等功能,可以提供丰富的智能业务。 


2 SIP消息 
  SIP协议是一个采用文本方式的请求/应答协议。SIP消息[3]有两种类型:从客户机发送到服务器的请求消息和从服务器发送到客户机的响应消息。而SIP请求连同它所触发的应答构成一个SIP事务。 
  2.1 请求消息 
  SIP请求消息由一个请求行、几个标题头、一个空行和一个消息体组成。其格式为: 
  请求消息=请求起始行 
  *(通用头部/请求头部/实体头部)(“*”表示该字段可有多个头部) 
  空行 
  【消息体】(可选) 
  请求行和头域根据业务、地址和协议特征定义了呼叫的本质,消息体独立于SIP协议并且可包含任何内容。其中请求行有三个元素:方法、请求URI和协议版本。在SIP核心规范中定义了6种SIP请求,每个SIP请求都含有一个“方法”(Method)的字段,表示这个请求的目的。 
  2.2 响应消息 
  一个SIP请求消息会触发应答响应,也就是SIP响应消息。SIP响应消息由状态行、几个标题头、一个空行和一个消息体组成。 
  其格式为: 
  响应消息=状态行 
  *(通用头部/响应头部/实体头部) 
  空行 
  【消息体】(可选) 
  其中,一个状态行有3个元素:协议的版本号、状态码和一个原因短语。状态码报告事务的状态,是从100~699的整数,并且分为6个不同的类。其中第一位数字指示响应的类别,后两位数字表示具体的响应。 
  2.3 消息头字段 
  消息头包含在SIP请求消息的请求行后及SIP响应消息的状态行之后,提供了关于请求或应答的信息和关于这些消息所包含的消息体的信息。消息头包括四种类型:可用于所有请求和响应消息中的通用头域,只在SIP请求消息中有效的请求头域,只在SIP响应消息中有效的响应头域,可用于请求和响应消息中描述消息体内容的属性的消息体头。

消息头的格式为:消息头名:消息头值 
  SIP通过E-mail形式的地址来标明用户地址。在使用SIP服务之前,每一个用户都必须先要获得一个SIP标识符,即URL,它通过诸如用户电话号码或主机名等元素来构造(例如:SIP:user@company.com),它与E-mail地址格式具有相似性。 
  2.4 SDP消息体 
  请求和应答都可能有消息体。被SIP消息携带的消息体通常是所建立的会话的描述,主要由SDP[4-5](Session Description Protocol)实现。消息体独立于SIP协议,可包含任何内容。虽然SIP并没有强制使用SDP来描述消息体,但SDP协议是为SIP量身定做的,因此在描述消息体方面通常选择SDP。 
  SDP是用来描述多媒体会话通告,多媒体会话邀请和其他形式的多媒体会话初始化的协议,是Internet协议栈中的一个关键协议。SDP定义了会话描述的统一格式,但是没有定义多播地址的分配和SDP消息的传送,不支持会话内容或媒体编码的协商操作。 
  SDP包括会话的名称和目的、会话活跃区间、组成会话的媒体及接收媒体的相关信息(地址、端口、格式等)。SDP描述由许多文本行组成,文本行的格式为:<类型>=<值>。<类型>是一个字母,<值>是结构化的文本串,其格式依类型而定。类型有会话级别和媒体级别之分,会话级信息应用于整个会话,而媒体级信息应用于特殊的媒体流。 


3 SIP与H.323的比较 
  目前被广泛接受的VOIP控制信令体系包括ITU-T的H.323标准和IETF的SIP协议。二者实现的信令控制功能基本相同,但设计风格和实现方法不同,因此弄清二者的区别与联系,结合实际情况决定采用哪个协议或将二者结合使用,是构建一个性能优良的IP电话系统首先要解决的问题[6]。 
  3.1 实现原理方面 
  这两种协议的网络结构相似,但其各组成部分的职能却有很大不同。H.323 标准是为构建多媒体会议系统而提出的,并不是专门为IP电话提出的。在H.323系统中,终端主要为媒体通讯提供数据,功能比较简单,而对呼叫的控制、媒体传输控制等功能的实现则主要由网守来完成。SIP则不同,它的出发点是以现有的Internet为基础来构建IP电话业务网,它是为了在两点之间进行对话而设计的。SIP协议不只是简单的提供数据,还提供了对呼叫的控制信息。服务器则用来进行定位、转发或接受消息。 
  3.2 呼叫控制机制的实现方面 
  H.323中呼叫的建立过程和媒体、参数协商等的信令控制过程是分开进行的,它先通过H.225协议在终端之间建立呼叫连接,然后在终端之间进行性能交换、参数协商、主从确定等控制。SIP中呼叫控制的信息封装在SIP消息的报头中,因此会话请求过程与媒体协商过程是同时进行的。这样,SIP的呼叫建立过程就相对简短明了一些。但在呼叫建立延迟方面,H.323也有它的优越性。 
  3.3 可靠性方面 
  H.323定义了很多功能来处理中间网络设备故障问题。当一个网守失效时,协议就会使用备用网守,如果一个由中间信号设备发送的呼叫失败,H.323能够向目的设备重新发送呼叫以保证呼叫不会中断。而SIP协议则不具备处理中间实体故障的能力。 
  3.4 可扩展性方面 
  在可扩展性方面,H.323为实现补充业务定义了专门的协议,并且可以通过标准化组织在不影响其现有特性的情况下添加新的特性来进行扩展。但它的缺点是随着新特性的不断增加,其编码的大小也会不断增加。而SIP通过对头域进行扩展就能很方便地实现其补充业务或智能业务。当旧的头域和特性不再需要时,SIP允许它们逐渐消失,以保证协议代码的简洁。