一 SIP的消息整体描述
SIP消息用于会话连接的建立及修改。SIP消息有两种:客户机到服务器的请求(Request),服务器到客户机的响应(response)。
SIP消息包括三个部分:SIP消息由一个起始行(start-line)、一个或多个字段(field)组成的消息头、一个标志消息头结束的空行(CRLF)以及作为可选项的消息体(message body)组成,其中描述消息体(message body)的头称为实体头(entity header)。
起始行分请求行(Request-Line)和状态行(status-line)两种,其中请求行是请求消息的起始行,状态行是响应消息的起始行,起始行位于消息的最开始。
消息头分通用头(general-header)、请求头(request-header)、响应头(response-header)和实体头(entity-header)四种。
消息头,描述消息的属性,类似于HTTP消息头的语法和语义,其中某些是完全照搬。
消息体,消息体主要是对消息所要建立的会话的描述。典型的消息体为SDP(会话描述协议)格式,用来对所要建立的会话进行描述,例如建立一个多媒体会话的消息体中包含音频、视频编码及取样频率等信息的描述。消息体的类型采用MIME(多目的互联网邮件扩展)所定义的代码进行标识,如SDP的类型标识为application/SDP。除了SDP,消息体也可以是其他各种类型的文本或二进制数据。
(1)SIP请求消息
INVITE方法用于邀请用户和服务参加一个会话。在INVITE请求的消息体中可对被叫方被邀请参加的会话作以描述。如主叫方能接收的媒体类型、发出的煤体类型及其一些参数。对INVITE请求的成功响应必须在响应的消息体中说明被叫方愿意接收哪种媒体,或者说明被叫方发出的媒体。服务器可以自动地用200 OK响应会议邀请。
ACK请求用于客户机向服务器证实它已经收到了对INVITE请求的最终响应。ACK只和INVITE请求一起使用。对2xx最终响应的证实由客户机用户代理发出,对其它最终响应的证实由收到响应的第一个代理或第一个客户机用户代理发出。ACK请求的To、From、Call-ID、Cseq字段的值由对应的INIVITE请求的相应字段的值复制而来。
OPTIONS用于向服务器查询其能力。如果服务器认为它能与用户联系,则可用一个能力集响应OPTIONS请求;OPTIONS的From、To分91包含主被叫的地址信息,对OPTIONS请求的响应中的From、To(可能加上tag参数)、Call-ID字段的值由OPTIONS请求中响应的字段值复制得到。
BYE用户代理客户机用BYE请求向服务器表明它想释放呼叫。BYE请求可以像INVITE请求那样被转发,可由主叫方发出也可以由被叫方发出。呼叫的一方在释放(挂断)呼叫前必须发出BYE请求,收到BYE请求的这方必须停止发媒体流给发出BYE请求的这方。
CANCEL请求用于取消一个Call-ID、To、From和Cseq(仅序列号)字段值相同的正在进行的请求,但取消不了已经完成的请求(如果服务器返回一个最终状态响应,则认为请求己完成)。CANCEL请求中的Call- ID、To、Cseq的数字部分及From字段和原请求的对应字段值相同,从而使CANCEL请求与它要取消的请求匹配。
REGISTER方法用于客户机向SIP服务器注册列在To字段中的地址信息。
INFO方法是对SIP协议的扩展,用于传递会话中产生的与会话相关的控制信息,如:ISUP和ISDN信令消息,以及DTMF数字等。
其中INVITE和ACK用于建立呼叫,完成三次握手,或者用于建立以后改变会话属性;BYE用以结束会话;OPTIONS用于查询服务器能力;CANCEL用于取消己经发出但未最终结束的请求;REGISTER用于客户机向注册服务器注册用户位置等消息。
除了在建立会话时进行各种消息交互外,SIP终端还可以在会话过程中,发出消息改变或添加会话的某些属性。例如,用户在进行语音通话的过程中,想增加视频通信,他可以在不中断通话的情况下,发送新的INVITE消息,打开双方的视频媒体,使通话变成可视电话。这为用户的使用带来很大的灵活性。
(2)SIP响应消息
SIP协议中用三位整数的状态码(status code)和原因值(reason code)来表示对请求做出回答,状态码用于机器识别操作,原因短语(reason-phrase)是对状态码的简单文字描述,用于人工识别操作。状态码的第一个数字定义响应的类别,在SIP/2. 0中第一个数字有6个值,定义如下:
lxx——暂时响应,表示请求已经收到,正继续处理请求。
2xx——成功地响应,表示行动己经成功地收到,理解和接收。
3xx——重定位响应,表示为完成呼叫请求,还必须采取进一步的动作。
4xx——客户机错误,属于请求失败响应,表示请求有语法错误或不能被服务器执行。客户机需要修改请求,然后再重发请求。
5xx——服务器错误,属于服务器失败响应,表示服务器出错,不能执行合法请求。
6xx——全局失败响应,表示任何服务器都不能执行请求。
3 SIP的呼叫建立
3.1 SIP的直接呼叫
(1)首先,主叫向被叫发出INVITE请求。INVITE请求的作用是发起并建立呼叫,邀请被叫加入主叫建立的呼叫。
(2)被叫收到请求后对主叫做出响应。接受请求方对请求的响应分为临时响应(状态码为1xx)和最终相应(状态码为2xx)。主叫只对最终相应做出回应。图1中,被叫做出的临时相应有100Trying(尝试连接),180 Ringing(被叫振铃或进入受到请求状态),182 Queued(被叫可能有多个呼叫要处理,所以主叫请求需要排队等待);被叫做出的最终响应是200 OK,表示被叫接受并开始处理呼叫请求。
(3)为了向被叫证实主叫收到了最终响应,主叫收到响应后发送ACK请求。被叫收到主叫的ACK请求,标志呼叫建立阶段结束。
(4)主叫或被叫在呼叫建立后发起后续请求。后续请求可由参加呼叫的任一方发起。可发起INVITE请求,进行交互操作,并对当前呼叫进行修改;也可发起BYE请求终止当前呼叫。
SIP直接呼叫流程如图1所示。
SIP用户适配器在测试所用交换系统中结构如图2所示。
3.2 SIP在系统中的呼出流程
当基本呼叫进程分析呼叫信息,它会发送请求路由消息给路由管理模块,如果路由管理模块发现是SIP路由,它会返回SIP地址给基本呼叫进程,基本呼叫进程会将SIP地址添加到SETUP消息中发给SIP模块,当SIP模块收到从基本呼叫进程发来的SETUP消息,它将分配呼叫资源,呼叫ID,然后向进程发送消息,流程如图3所示。
3.3 SIP在系统中的呼入流程
当SIP模块从呼叫进程收到了INVITE消息,它将分配呼叫资源并且将呼叫ID和呼叫资源绑定,返回100消息给进程,发送SETUP消息给基本呼叫进程,流程如图4所示。
3.4 SIP在系统中的放音流程
如果有该SIP用户注册有放音服务,连接管理模块将会发送放音命令给SIP—UA模块,SIP—UA会向进程发送INVITE,在对方返回200OK后,SIP模块会发送放音命令回应给连接管理模块,然后进入放音阶段,流程见图5。
二 SIP消息的组成
有两种类型的SIP消息:
● 请求:从客户机发到服务器
● 响应:从服务器发到客户机
SIP请求消息包含三个元素:请求行、头、消息体。
SIP响应消息包含三个元素:状态行、头、消息体。
请求行和头域根据业务、地址和协议特征定义了呼叫的本质,消息体独立于SIP协议并且可包含任何内容。
SIP定义了下述方法:
INVITE——邀请用户加入呼叫。
BYE——终止一呼叫上的两个用户之间的呼叫。
OPTIONS——请求关于服务器能力的信息。
ACK——确认 被叫方 已经接收到 主叫方(发起方)对INVITE的最终响应。
REGISTER——提供地址解析的映射,让服务器知道其它用户的位置。
INFO——用于会话中信令。
表2.1: Content-Length Calculation 例子
|
|
LINE
|
TOTAL
|
v=0??
|
05
|
o=Tesla 2890844526 2890844526 IN IP4 lab.high-voltage.org??
|
59
|
s=Phone Call??
|
14
|
c=IN IP4 100.101.102.103??
|
26
|
t=0 0??
|
07
|
m=audio 49170 RTP/AVP 0??
|
25
|
a=rtpmap:0 PCMU/8000??
|
22
|
158
|
Table 2.2: SDP 实例数据
|
|
SDP 参数
|
参数名称
|
v=0
|
Version number
版本号码
|
o=Tesla 2890844526 2890844526 IN IP4 lab.high-voltage.org
|
Origin containing name
原始包含名字
|
s=Phone Call
|
Subject
主题
|
c=IN IP4 100.101.102.103
|
Connection
连接
|
t=0 0
|
Time
时间
|
m=audio 49170 RTP/AVP 0
|
Media
媒体
|
a=rtpmap:0 PCMU/8000
|
Attributes
属性
|
SIP和VoIP协议及其应用
SIP协议是NGN中的重要协议,越来越得到业界的重视。本文简单介绍了VoIP和SIP协议的含义,并从背景、功能、主要消息这几个方面对SIP协议的工作原理进行了介绍,分析了SIP呼叫建立的流程。
1 VoIP简介
当前Internet的应用日益广泛,随着骨干网速率的高速增长,接入网速率的不断提高,Internet上的业务正从窄带走向宽带、从非实时走向实时,VoIP(Voice over Internet Protocol)业务就是其中的一类重要的业务。
VoIP是通过对语音信号进行数字化编码、压缩处理成帧,然后转换为IP数据包在IP网络上进行传输,来达到在IP网络上进行语音通信目的的技术。它最大的优势是能广泛地利用Internet和全球IP互连的环境,非常廉价的提供语音、传真、视频和数据等业务,如统一消息、虚拟电话、虚拟语音/传真邮箱、查号业务、Internet呼叫中心、Internet呼叫管理、电视会议、电子商务、传真存储转发和各种信息的存储转发等。
目前在VoIP领域有两个完全独立的信令协议:国际电联电信标准化部(International Telecommunications Union—Telecommunication Standardization Sector,ITU-T)的H.323协议簇和因特网工程任务组(Internet Engineering Task Force,IETF)的SIP(Session Initiation Protocol)协议。
传统的IP网络主要是用来传输数据业务,采用的是尽力而为的、无连接的数据技术,因此没有服务质量保证,存在分组丢失、失序到达和时延抖动等情况。数据业务对此要求不高,但话音属于实时业务,对时序、时延等有严格的要求。因此必须采取特殊措施来保障一定的业务质量。VoIP的关键技术包括信令技术、编码技术、实时传输技术、服务质量保证(QoS)技术、以及网络传输技术等。
2 SIP协议及其功能简介
2.1 会话初始协议SIP
会话初始协议(SIP)是IETF提出的在IP网上进行多媒体通信的应用层控制协议。SIP是IETF标准进程的一部分,它是在诸如SMTP(简单邮件传送协议)和HTTP(超文本传送协议)基础之上建立起来的。它用来建立、改变和终止基于IP网络的用户间的呼叫。为了提供电话业务,它还需要结合不同的标准和协议,特别是需要确保传输(RTP),与当前电话网络的信令互连,能够确保语音质量(RSVP),能够提供目录(LDAP),能够鉴权用户(RADIUS)等等。以Internet协议(HTTP)为基础,遵循Internet的设计原则,基于对等工作模式。利用SIP可实现会话的连接、建立和释放,并支持单播、多播和可移动性。此外,SIP如果与SDP配合使用,可以动态地调整和修改会话属性,如通话带宽、所传输的媒体类型及编解码格式。
SIP大大优于现有的一些协议,如将PSTN音频信号转换为IP数据包的媒体网关控制协议 (MGCP)。因为MGCP是封闭的纯语音标准,所以通过信令功能对其进行增强比较复杂,有时会导致消息被破坏或丢弃,从而妨碍提供商增加新的服务。而使用SIP,编程人员可以在不影响连接的情况下在消息中增加少量新信息。例如,SIP 服务提供商可以建立包含语音、视频和聊天内容的全新媒体。如果使用 MGCP、H.323 或SS7标准,则提供商必须等待可以支持这种新媒体的协议新版本。而如果使用SIP,尽管网关和设备可能无法识别该媒体,但在两个大陆上设有分支机构的公司可以实现媒体传输。而且,因为SIP的消息构建方式类似于HTTP,开发人员能够更加便捷地使用通用的编程语言(如Java)来创建应用程序。对于等待了数年希望使用SS7和高级智能网络(AIN)部署呼叫等待、主叫号码识别以及其他服务的运营商,现在如果使用SIP,只需数月时间即可实现高级通信服务的部署。
2.2 SIP协议的基本功能
SIP被描述为用来生成、修改和终结一个或多个参与者之间的会话。这些会话包括因特网多媒体会议,因特网(或任何IP网络)电话呼叫和多媒体发布。会话中的成员能够通过多播或单播联系的网络来通信。SIP支持会话描述,它允许参与者在一组兼容媒体类型上达成一致。它同时通过代理和重定向请求到用户当前位置来支持用户移动性。SIP不与任何特定的会议控制协议捆绑。本质上,SIP提供以下功能。
名字翻译和用户定位:无论被呼叫方在哪里都确保呼叫达到被呼叫方。执行任何描述信息到定位信息的映射。确保呼叫(会话)的本质细节被支持。
特征协商:它允许与呼叫有关的组(这可以是多方呼叫)在支持的特征上达成一致(注意:不是所有方都能够支持相同级别的特征)。例如视频可以或不可以被支持。总之,存在很多需要协商的范围。
呼叫参与者管理:呼叫中参与者能够引入其他用户加入呼叫或取消到其他用户的连接。此外,用户可以被转移或置为呼叫保持。
呼叫特征改变:用户应该能够改变呼叫过程中的呼叫特征。例如,呼叫可以被设置为“voice-only”,但是在呼叫过程中,用户可以根据需要开启视频功能。也就是说一个加入呼叫的第三方为了加入该呼叫可以开启不同的特征。
2.3 SIP的消息整体描述
SIP消息用于会话连接的建立及修改。SIP消息有两种:客户机到服务器的请求(Request),服务器到客户机的响应(response)。
SIP消息包括三个部分:SIP消息由一个起始行(start-line)、一个或多个字段(field)组成的消息头、一个标志消息头结束的空行(CRLF)以及作为可选项的消息体(message body)组成,其中描述消息体(message body)的头称为实体头(entity header)。起始行分请求行(Request-Line)和状态行(status-line)两种,其中请求行是请求消息的起始行,状态行是响应消息的起始行,起始行位于消息的最开始。消息头分通用头(general-header)、请求头(request-header)、响应头(response-header)和实体头(entity-header)四种。消息头,描述消息的属性,类似于HTTP消息头的语法和语义,其中某些是完全照搬。消息体,消息体主要是对消息所要建立的会话的描述。典型的消息体为SDP(会话描述协议)格式,用来对所要建立的会话进行描述,例如建立一个多媒体会话的消息体中包含音频、视频编码及取样频率等信息的描述。消息体的类型采用MIME(多目的互联网邮件扩展)所定义的代码进行标识,如SDP的类型标识为application/SDP。除了SDP,消息体也可以是其他各种类型的文本或二进制数据。
(1)SIP请求消息
INVITE方法用于邀请用户和服务参加一个会话。在INVITE请求的消息体中可对被叫方被邀请参加的会话作以描述。如主叫方能接收的媒体类型、发出的煤体类型及其一些参数。对INVITE请求的成功响应必须在响应的消息体中说明被叫方愿意接收哪种媒体,或者说明被叫方发出的媒体。服务器可以自动地用200 OK响应会议邀请。
ACK请求用于客户机向服务器证实它已经收到了对INVITE请求的最终响应。ACK只和INVITE请求一起使用。对2xx最终响应的证实由客户机用户代理发出,对其它最终响应的证实由收到响应的第一个代理或第一个客户机用户代理发出。ACK请求的To、From、Call-ID、Cseq字段的值由对应的INIVITE请求的相应字段的值复制而来。
OPTIONS用于向服务器查询其能力。如果服务器认为它能与用户联系,则可用一个能力集响应OPTIONS请求;OPTIONS的From、To分91包含主被叫的地址信息,对OPTIONS请求的响应中的From、To(可能加上tag参数)、Call-ID字段的值由OPTIONS请求中响应的字段值复制得到。
BYE用户代理客户机用BYE请求向服务器表明它想释放呼叫。BYE请求可以像INVITE请求那样被转发,可由主叫方发出也可以由被叫方发出。呼叫的一方在释放(挂断)呼叫前必须发出BYE请求,收到BYE请求的这方必须停止发媒体流给发出BYE请求的这方。
CANCEL请求用于取消一个Call-ID、To、From和Cseq(仅序列号)字段值相同的正在进行的请求,但取消不了已经完成的请求(如果服务器返回一个最终状态响应,则认为请求己完成)。CANCEL请求中的Call- ID、To、Cseq的数字部分及From字段和原请求的对应字段值相同,从而使CANCEL请求与它要取消的请求匹配。
REGISTER方法用于客户机向SIP服务器注册列在To字段中的地址信息。
INFO方法是对SIP协议的扩展,用于传递会话中产生的与会话相关的控制信息,如:ISUP和ISDN信令消息,以及DTMF数字等。
其中INVITE和ACK用于建立呼叫,完成三次握手,或者用于建立以后改变会话属性;BYE用以结束会话;OPTIONS用于查询服务器能力;CANCEL用于取消己经发出但未最终结束的请求;REGISTER用于客户机向注册服务器注册用户位置等消息。
除了在建立会话时进行各种消息交互外,SIP终端还可以在会话过程中,发出消息改变或添加会话的某些属性。例如,用户在进行语音通话的过程中,想增加视频通信,他可以在不中断通话的情况下,发送新的INVITE消息,打开双方的视频媒体,使通话变成可视电话。这为用户的使用带来很大的灵活性。
(2)SIP响应消息
SIP协议中用三位整数的状态码(status code)和原因值(reason code)来表示对请求做出回答,状态码用于机器识别操作,原因短语(reason-phrase)是对状态码的简单文字描述,用于人工识别操作。状态码的第一个数字定义响应的类别,在SIP/2. 0中第一个数字有6个值,定义如下:
lxx——暂时响应,表示请求已经收到,正继续处理请求。
2xx——成功地响应,表示行动己经成功地收到,理解和接收。
3xx——重定位响应,表示为完成呼叫请求,还必须采取进一步的动作。
4xx——客户机错误,属于请求失败响应,表示请求有语法错误或不能被服务器执行。客户机需要修改请求,然后再重发请求。
5xx——服务器错误,属于服务器失败响应,表示服务器出错,不能执行合法请求。
6xx——全局失败响应,表示任何服务器都不能执行请求。
3 SIP的呼叫建立
3.1 SIP的直接呼叫
(1)首先,主叫向被叫发出INVITE请求。INVITE请求的作用是发起并建立呼叫,邀请被叫加入主叫建立的呼叫。
(2)被叫收到请求后对主叫做出响应。接受请求方对请求的响应分为临时响应(状态码为1xx)和最终相应(状态码为2xx)。主叫只对最终相应做出回应。
图1中,
被叫做出的临时相应有100Trying(尝试连接),180 Ringing(被叫振铃或进入受到请求状态),182 Queued(被叫可能有多个呼叫要处理,所以主叫请求需要排队等待);
被叫做出的最终响应是200 OK,表示被叫接受并开始处理呼叫请求。
(3)为了向被叫证实主叫收到了最终响应,主叫收到响应后发送ACK请求。被叫收到主叫的ACK请求,标志呼叫建立阶段结束。
(4)主叫或被叫在呼叫建立后发起后续请求。后续请求可由参加呼叫的任一方发起。可发起INVITE请求,进行交互操作,并对当前呼叫进行修改;也可发起BYE请求终止当前呼叫。
SIP直接呼叫流程如图1所示。
SIP用户适配器在测试所用交换系统中结构如图2所示。
3.2 SIP在系统中的呼出流程
当基本呼叫进程分析呼叫信息,它会发送请求路由消息给路由管理模块,如果路由管理模块发现是SIP路由,它会返回SIP地址给基本呼叫进程,基本呼叫进程会将SIP地址添加到SETUP消息中发给SIP模块,当SIP模块收到从基本呼叫进程发来的SETUP消息,它将分配呼叫资源,呼叫ID,然后向进程发送消息,流程如图3所示。
3.3 SIP在系统中的呼入流程
当SIP模块从呼叫进程收到了INVITE消息,它将分配呼叫资源并且将呼叫ID和呼叫资源绑定,返回100消息给进程,发送SETUP消息给基本呼叫进程,流程如图4所示。
3.4 SIP在系统中的放音流程
如果有该SIP用户注册有放音服务,连接管理模块将会发送放音命令给SIP—UA模块,SIP—UA会向进程发送INVITE,在对方返回200OK后,SIP模块会发送放音命令回应给连接管理模块,然后进入放音阶段,流程见图5。
4 结论与展望
SIP协议作为NGN通信的核心协议将有着极大的市场潜力和应用前景。协议是通信的基础,尤其是在3G和VoIP中,SIP的灵活性和可扩展性都将得到体现并受到人们的欢迎。可以预见在不远的将来,尤其是一些大的运营商,其中心平台都会以SIP为核心。
SIP能够连接使用任何IP网络(有线LAN和 WAN、公共Internet骨干网、移动2.5G、3G和Wi-Fi)和任何IP设备(电话、PC、PDA、移动手持设备)的用户,从而出现了众多利润丰厚的新商机,改进了企业和用户的通信方式。基于SIP的应用(如VoIP、多媒体会议、push-to-talk(按键通话)、定位服务、在线信息和IM)即使单独使用,也会为服务提供商、ISV、网络设备供应商和开发商提供许多新的商机。不过,SIP 的根本价值在于它能够将这些功能组合起来,形成各种更大规模的无缝通信服务。
使用SIP,服务提供商及其合作伙伴可以订制和提供基于SIP的组合服务,使用户可以在单个通信会话中使用会议、Web控制、在线信息、IM等服务。实际上,服务提供商可以创建一个满足多个最终用户需求的灵活应用程序组合,而不是安装和支持依赖于终端设备有限特定功能或类型的单一分散的应用程序。通过在单一、开放的标准SIP应用架构下合并基于IP的通信服务,服务提供商可以大大降低为用户设计和部署基于IP的新的创新性托管服务的成本。它是SIP可扩展性促进本行业和市场发展的强大动力,是我们所有人的希望所在。但是,作为一种不能加密的协议,SIP协议的安全性也变得十分复杂,这也是我们在未来不容忽略的一个问题。