sip 学习一 (概述)

来源:互联网 发布:淘宝店挣钱吗 编辑:程序博客网 时间:2024/06/05 07:55

一 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——用于会话中信令。

 

 

原创粉丝点击