SIP协议主要消息讲解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章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:<sip:************.0.1:5061;User=phone>;tag=29005358336B53 4F610A000
To:<sip:**********.0.1:5060;User=phone>
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<sip:*****************>
From:NikolaTesla<sip:************************>;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
* 以上几个字段是所有SIP消息体所必须的,其它头字段有些是可选的,有些在特定请求也是必须
Subject: About That Power Outage...
Contact:<sip:************************.org>
<=Contact是INVITE消息所必须的,它用来路由到被叫设备地址,也称为用户代理(UA)
Content-Type: application/sdp
Content-Length: 158
<=最后两位附属字段说明消息体类型以及字段长度
v=0 <=SDP版本号,目前都是0
o=Tesla 28908445262890844526 INIP4 <=主叫源地址,类型等
s=Phone Call
1.3.2 响应消息格式
SIP响应消息的格式,由SIP响应消息头和一组参数行组成,如0所示。
通过换行符区分命令行和每一行参数。
SIP响应消息结构
消息头
注意:参数行的顺序不是固定的。
对应的参数解释见错误!未找到引用源。
SIP响应消息实例:
SIP/2.0 200 OK
Content-Type:application/SDP
Via:SIP/2.0/UDP 127.0.0.1:5061
Call-ID:***************************.0.1
CSeq:1 INVITE
From:<sip:************.0.1:5061;User=phone>;tag=29005358336B 534F610A000
To:<sip:**********.0.1:5060;User=phone>;tag=5358336B534F2900 CD1B0000
Contact:<sip:**********.0.1:55061>
Content-Length:156
v=0
o=HuaweiSoftX3000 1073741824 1073741824 IN IP4 127.0.0.1
s=Sip Call
c=IN IP4 110.111.112.113
t=0 0
m=audio 5060 RTP/AVP 0
a=rtpmap:0 PCMU/8000
200 OK消息是SIP响应消息的一种。
第一行由SIP版本号和200响应消息组成。
SIP URI是电话URI,附在IP地址上,表示对端和端点收发SIP消息的端口的域。
“From”、“To”和“Contact”这三个SIP消息头属于电话URI。
当背靠背用户代理发出呼叫时,“From”消息头中的URI填写在“Via”消息头里。
请求消息类型填写在CSeq消息头里,并且当该SIP端点发送一个请求,号码就相应递增。
SIP协议版本为SIP/2.0。
把SDP加入到INVITE消息内容里,在消息头里说明内容的长度。
第二章SIP协议主要响应码
2.1 响应码分类
SIP响应消息用于对请求消息进行响应,指示呼叫的成功或失败状态。
不同类的响应消息由状态码来区分,状态码包含三位整数,状态码的第一位用于定义响应类型,另外两位用于进一步对响应进行更加详细的说明。
响应消息的分类如下所示。
1)1XX:临时响应,表示请求消息正在被处理。
2)2XX:成功响应,表示请求已被成功接收,完全理解并被接受。
3)3XX:重定向响应,表示需采取进一步以完成该请求。
4)4XX:客户机错误,表示请求消息中包含语法错误信息或服务器无法
完成客户机请求。
5)5XX:服务器错误,表示服务器无法完成合法请求。
6)6XX:全局故障,表示任何服务器无法完成该请求。
上述消息中,临时响应用于指示呼叫正在进行,其余最终响应用于结束请求消息。
2.2 1xx类消息(临时响应)
1xx消息表示服务器或代理正在进行处理,还未得到确定的响应。
客户应该继续等待服务器的响应。
当服务器预测在200毫秒之内不能得到最终响应时,它应该发送一个1xx响应。
服务器可以发送多个1xx响应。
下面是常见的1xx类消息列表。
表1-1常见的1xx类消息列表
2xx消息表示请求已经被接收、处理并被成功接受;
200 :OK---请求成功。
2.4 3xx类消息(重定向响应)
3xx消息表示响应给出有关用户新位置或其它可选服务的信息。
下面表1-2是常见的3xx类消息列表。
表1-2常见的3xx类消息列表
4xx消息表示请求消息中包含语法错误或者SIP服务器不能完成对该请求消息的处理。
下面表1-3是常见的4xx类消息列表。
表1-3常见的4xx类消息列表
2.6 5xx类消息(服务器错误)
5xx消息表示SIP服务器故障不能完成对正确消息的处理。
下面表1-4是常见的5xx类消息列表。
表1-4常见的5xx类消息列表
2.7 6xx类消息(全局错误)
6xx消息表示请求不能在任何SIP服务器上实现。
下面表1-5是常见的5xx类消息列表。
表1-5常见的5xx类消息列表。