当前位置:文档之家› SIP协议主要消息讲解

SIP协议主要消息讲解

第一章SIP协议主要消息

1.1 SIP消息分类

SIP协议是以层协议的形式组成的,就是说它的行为是以一套相对独立的处理阶段来描述的,每个阶段之间的关系不是很密切。

SIP协议将Server和User Agent之间的通讯的消息分为两类:请求消息和响应消息。

请求消息:客户端为了激活特定操作而发给服务器的SIP消息,包括INVITE、ACK、BYE、CANCEL、OPTION和UPDATE消息。

SIP请求的6种方法:

1、邀请(INVITE)——邀请用户加入呼叫

2、确认(ACK)——确认客户机已经接收到对INVITE的最终响应

3、可选项(OPTIONS)——请求关于服务器能力的信息

4、再见(BYE)——终止呼叫上的两个用户之间的呼叫

5、取消(CANCEL)

6、注册(REGISTER)——提供地址解析的映射,让服务器知道其它用户的位置

响应消息:服务器向客户反馈对应请求的处理结果的SIP消息,包括1xx、2xx、3xx、4xx、5xx、6xx响应

1.2 SIP消息结构

请求消息和响应消息都包括SIP消息头字段和SIP消息体字段;

SIP消息头主要用来指明本消息是有由谁发起和由谁接受,经过多少跳转等基本信息;

SIP消息体主要用来描述本次会话具体实现方式;

1.3 消息格式

1.3.1 请求消息格式

SIP请求消息的格式,由SIP消息头和一组参数行组成,如图1-1所示。通过换行符区分命令行和每一条参数行。

图1-1 SIP 请求消息结构

注意:参数行的顺序不是固定的。对应的参数解释见错误!未找到引用源。。

消息体定义:

Call-ID :头字段是用来将消息分组的唯一性标识

From :头字段是指示请求发起方的逻辑标识,它可能是用户的注册地址。From 头字段包含一个URI 和一个可选的显示名称

CSeq :头字段用于标识事务并对事务进行排序。它由一个请求方法和一个序列号组成,请求方法必须与对应的请求消息类型一致

Max-Fowords :头字段限定一个请求消息在到达目的地之前允许经过的最大跳数。它包含一个整数值,每经过一跳,这个值就被减一。如果在请求消息到达目的地之前该值变为零,那么请求将被拒绝并返回一个483(跳数过多)错误响应消息。

Via :头字段定义SIP 事务的下层(传输层)传输协议,并标识响应消息将要被发送的位置。只有当到达下一跳所用的传输协议被选定后,才能在请求消息中加入Via 头字段值。 expires :参数指出了该值中包含的URI 地址的有效期。这个参数的值是以秒为单位计算的。如果没有提供该参数,那么URI 地址的有效期由Expires 头字段值来确定。

消息头

SIP请求消息实例:

INVITEsip:**********.0.1:5060;User=phoneSIP/2.0

Call-ID:***********************.0.1

Via:SIP/2.0/UDP 127.0.0.1:5061

From:;tag=29005358336B53 4F610A000

To:

Contact:sip:************.0.1:5061

CSeq:1 INVITE

Max-Forwards:70

Content-Type: application/SDP

Content-Length:168

v=0

o=UserA 2890844526 2890844526 IN IP4

s=Session SDP

c=IN IP4 192.0.0.1

t=0 0

m=audio 49172 RTP/AVP 0 8

a=rtpmap:0 PCMU/8000

a=rtpmap:8 PCMA/8000

a=sendonly

INVITE消息是其中一种SIP请求消息。

第一行由消息头和对端SIP实体的URI(通用资源标识)以及SIP版本号码组成。

SIP URI是电话URI,附在IP地址上,表示对端和端点收发SIP消息的端口的域。

“From”、“To”和“Contact”这三个SIP消息头属于电话URI。

当背靠背用户代理发出呼叫时,“From”消息头中的URI填写在“Via”消息头里。

请求消息类型填写在CSeq消息头里,并且当该SIP端点发送一个请求,号码就相应递增。

SIP协议版本为SIP/2.0。其中SDP被加入到INVITE消息内容里,在消息头里的Content-Length说明了SDP内容的长度。

INVITE请求消息详解:

INVITEsip:********************/2.0

<=请求方法、请求地址(Request-URI)、SIP版本号(目前都是SIP/2.0)

<=请求地址一般就是被叫方地址,跟MSN中好友eMail地址类似

Via: SIP/2.0/UDP :5060;branch=z9hG4bKfw19b

<=SIP版本号(2.0)、传输类型(UDP)、呼叫地址、

<=branch是一随机码,它被看作传输标识

<=Via字段中地址是消息发送方或代理转发方设备地址,一般由主机地址和端口号组成

<=传输类型可以为UDP、TCP、TLS、SCTP

Max-Forwards: 70

<=最大跳跃数,就是经过SIP服务器的跳跃次数,主要是防止循环跳跃

<=每经过代理服务器,该整数减一

To:G.Marconi

From:NikolaTesla;tag=76341 <=表示请求消息的发送方和目标方

<=如果里面有用户名标签,地址要求用尖括号包起来

<=对于INVITE消息,可以在From字段中包含tag,它也是个随机码

Call-ID:**************************.org

<=呼叫ID是由本地设备生成的,全局唯一值。每次呼叫该值唯一不变

<=对于用户代理发送INVITE消息,本地将生成From tag和Call-ID 全局唯一码,被叫方代理则生成To tag全局唯一码。这三个随机码做为整个对话中对话标识(dialog indentifier)在通话双方使用。

CSeq: 1 INVITE

<=CSeq,又叫命令队列(Command Seqence),每发送一个新的请求,该数自动加1

相关主题