一、 开始行
根据开始行的不同,消息分为请求消息和响应消息
(1) 请求
SIP请求的开始行格式包括三部分:方法名、请求uri,协议版本,三者通过一个空格分开,
结束时回车(用CR表示) 换行(LF表示)。
SIP协议定义了6种方法
invite:该方法用来邀请其他用户加入会话,相应的消息体是对会话的描述,通常是采取与
SIP相配套的SDP协议。 SDP描述的内容包括 主叫可以接受的媒体类型,可以发送
的媒体类型以及相关的参数。invite也可以修改一个已经存在的会话参数
bye:当ua客户端准备结束一个呼叫时可以向服务器发送bye请求。主叫和被叫都可以发送请
求,相当于电话中的挂机操作
ack:uac在接受到invite的最终响应后发出的确认,并且ack只与invite捆绑使用。ack请求
消息也可以包含消息体
cancel:cancel请求可以取消一个尚未完成的请求,此时邀请cancel请求消息将与被取消的
消息具有相同的 call-id to from cseq标题字段。uac和大量的服务器都可以发出
cancel请求。虽然cancel请求可以取消ack和cancel以外的其它请求类型,但是通
常只是用来取消invite请求
register:uac利用register请求消息将to标题字段的地址登记到定位服务器中。uac在开机
启动后将register请求以组播方式发出。登记服务器的每个登记记录都有一个响
应的有效期一旦到期,记录就会被删除。另外,一般登记请求需要鉴权
oprions:options请求用于查询用户代理服务器uas的能力。uas在响应消息的allow标题字段 中指明它能支持的方法。代理服务器和重定向服务器只将该请求消息前转而不是指示它们自己的能力
(2) 响应
响应的开始行的格式包含 协议版本,数字状态码+描述
SIP/2.0 100 Trying
数字状态码
1xx 表示接受到请求,但是正在处理中
2xx 表示接受到请求,并成功的处理完成
3xx 表示要完成的请求,需要进一步的行动
4xx 客户端错误,请求的保护坏的语法或者不能被服务器接收
5xx 服务器端错误,服务器实现有效的请求失败
6xx 全局错误,表示请求在任何服务器上均不能实现
二、标题字段
标题字段的顺序并不重要,但是为了更快速解析消息建议按照如下顺序排序
Via Route Record-Route Proxy-Require Max-Forwards Proxy-Authorization
标题字段的使用说明:
To:该标题字段要先指定的是请求的“逻辑”的接受者,或者用户或者资源的记录地址 它是请求的目标。(不一定是最终的接受者:说白了就是这个字段只告诉地点,不 告诉你具体给哪个人)
From:该标题字段指示的是请求的发起者的逻辑身份,也可能是用户的address-of- record (逻辑身份:告诉你名字,至于怎么解析交给dns服务器去搞定) From字段一定包含一个新的tag参数,由uac选定
Call-ID:该标题字段是用来唯一标识一个特定邀请或者标识一个客户的所有信息。有UAC产生,使用密码乱序随机串,call-id的格式如: localid@host,大小写 敏感
说明:A和B发起会话,那么A和B之间的所有消息的Call-ID均相同,即使A和B 突然断掉其重新尝试的请求也不会被当做一个新的请求,所以也不需要新的 Call-ID。
Cseq:同一会话中的不同请求消息进行排序 Cseq: 74 invite
Max-Forwards:限制请求在传输到目的地过程中的转发次数。它由一个整数组成,每转发一次就减一。默认值70不建议改变这个值 该值足以保证请求在任何 SIP网络中不丢失(无环路)
Via:该标题字段是为了确保响应和请求选择同样的路径,以保证通过防火墙或者满足 其他要求。
Contact:该标题字段的目的是给出其后和用户直接通信的地址
Supported and Require:如果UAC支持SIP扩展,即可被服务器用于响应,UAC应该在请 求中包含supported标题字段并未那些扩展字段列出选项标识