sip协议采用UTF-8 进行编码的文本传输协议
SIP的消息格式如下:
SIP消息=起始行
*消息头部(1个或多个)
CRLF(空行)
消息体
注意:起始行、消息头部、空行都必须使用回车换行(CRLF)来表示终结。消息中未包含消息体可选项空行也不能省略。
请求:
请求消息的起始行为为请求行(Request-Line)。格式如下:
Request-Line=方法[] 请求URL[] sip协议版本 CRLF
方法[]:INVITE、ACK、CANCEL(这三个用于建立会话连接)、OPTIONS*(查询服务器能力)、BYE、REGISTER(发送注册信息)
注意:1.方法名必须为大写字母。 2.sip协议其他文档有其他方法实现协议扩展。
请求URL:被邀请的用户当前地址,URL中不允许出现空格或其他控制字符且不能包含于<>符号之内。除了使用sip、sips外,url还可以使用“tel”的URL定义机制。
版本:定义协议的当前版本号,如 SIP/2.0
响应:
响应的起始行为状态行(Status-Line),
Status-Line=SIP版本信息[] 状态码[] 原因 CRLF
状态码(Status-Code):一个3位的十进制整数,用于指示请求消息的执行响应结果。
原因(Reason-Phrase) :此参数用于对状态码进行简单的文本描述。
SIP/2.0协议有6类状态码,其中第1位数字用于指示响应类型,后两位用于表示具体响应。
100-199:临时响应,表示请求消息正在被处理。
200-299:成功响应,表示请求已经被成功接收,完全理解并接受
300-399:重定向响应,表示需要采取进一步以完成改响应
400-499:客户机错误,表示请求消息中包含语法错误信息或服务器无法完成客户机请求。
500-599:服务器错误,表示服务器无法完成合理请求。
600-699:全局故障,表示任何服务器无法完成该请求。
头字段:
SIP头字段的语法和语义定义与HTTP头字段定义基本相同,
SIP协议定义的头字段语法规则如下所示:
header=“header-name”HCOLON header-value *(COMMA header-value)
SIP头字段允许一个头字段可以定义多个参数值,且多个参数值之间用“,”进行分隔。当属性值不为“*”时,Contact头字段允许属性值之间用","字段进行分隔。
头字段格式:
SIP协议中,头字段名和字段值之间用字符“:”进行分隔。
field-name:field-value
消息头字段允许出现多个空格字符。在具体实现过程中,建议在字段头部右侧,字段名和: 之间应该减少出现空格。而字段头部左侧。即::和字段值之间应该用一个空格进行分隔。如下所示:
field-name:[]field-value
消息头字段内不同头字段名的顺序可任意排列,但是建议与代理服务器处理相关的字段名(via、Route、Record-Route、Proxy-Require、Max-Forwards、Proxy-Authorization等)应尽可能的排列在消息头字段的前几位以加快代理服务器对消息的处理速度。字段值为多个字段值列表且字段值列表遵循定义的语法规则,则一个消息内允许同时存在多个相同的字段名行。同理 ,多个相同字段名的字段行可以组成一个单一的字段行,其字段值为一个用“,”字符分割的值列表。WWW-Authenticate、Authorization、Proxy-Authenticate和Proxy-Authorization字段不能遵循以上规则。