SIP消息体结构与Http协议结构相似,均由三部分组成:
请求行(request-line)与状态行(status-line)
消息头(header)
正文(body)
一、request-line 请求行
格式:Method Request-URL SIP-Version CRLF
举例:INVITE sip:bob@zte.com SIP/2.0 /r/n
Method:
REGISTER:注册联系信息
INVITE:发起会话请求
ACK:INVITE请求的响应的确认
CANCEL:取消请求
BYE:终结会话
OPTIONS:查询服务器能力
MESSAGE:RFC3428对Sip协议的扩展,增加了MESSAGE方法。采用Pager Model进行通信,传递不超过1300字节的数据。
Request-URL:
指示请求的用户或者服务的地址信息
SIP-Version:
请求和响应消息都需要包含SIP版本信息。
二、status-line 状态行
格式:SIP-Version Status-Code Reason-Phrase CRLF
举例:SIP/2.0 200 OK /r/n
Status-Code状态码:
状态代码由3位数字组成,表示请求是否被理解或被满足
状态代码的第一个数字定义了响应的类别,后面两位没有具体的分类。
第一个数字有5种可能的取值:
1XX:临时响应、表示请求消息正在被处理
2XX:成功响应、表示请求已被成功接收完全理解并接收
3XX:重定向响应、表示需采取进一步完成请求
4XX:客户机错误、表示请求消息中包含语法错误或服务器无法完成客户机的请求
5XX:服务器错误、表示服务器无法合法完成请求
6XX:全局故障、表示任何服务器都无法完成该请求
常用的状态码举例:
100:Trying 试呼叫
180:Ringing 振铃
181:Call is Being Forwarded 呼叫正在前转
200:OK 成功响应
302:Moved Temporarily 临时迁移
400:Bad Request 错误请求
401:Unauthorized 未授权
403:Forbidden 禁止
404:Not Found 用户不存在
408:Request Timeout 请求超时
480:Temporarily Unavailable 暂时无人接听
486:Busy Here 线路忙
504:Server Time-out 服务器超时
600:Busy Everywhere 全忙
三、Header 消息头
Header字段含义说明如下:
Call-ID:由本地设备Client生成,全局唯一,每次呼叫这个值唯一不变
举例:Call-ID:asd88asd77a@1.2.3.4
From:表示请求的发起者
举例:From: sip:user1@domain.com;tag=49583
To:表示请求的接收者
举例:To:sip:user2@domain.com
Via:Via头域是被服务器插入request中,用来检查路由环,并且可以使response根据via找到返回的路
举例:Via:SIP/2.0/TCP user1pc.domain.com; branch=z9hG4bK776sgdkse
Max-Forwards:用于表示这个包最多可以传送多少跳,每经过一跳都会减一当Max-Forwards==0系统会返回483.默认为70
举例:Max-Forwards:70
Contact:包含源的URL信息,用来给响应方直接和源建立连接用
举例:Contact:sip:192.168.100.1:1111
Content-Type:指明消息体的类型(SDP会话描述协议)
举例:
Content-Type:text/plain;
Content-Type:application/sdp;
Content-Type:application/cpim;
Content-Length:指明消息体的字节大小
举例:Content-Length:18