RFC3261 sip协议学习------sip消息结构描述

来源:互联网 发布:unity3d游戏特效师招聘 编辑:程序博客网 时间:2024/04/29 05:28

SIP消息分为两种,request与response,SIP消息无论是request还是response在格式上是相同的,格式为:

generic-message:    start-line

*message-header

CRLF

[message-body]

start-line = request-line/response-line

request消息与response消息的关键区别在于start-line上。


request-line

request-line = method sp request-uri sp sip-version CRLF

method:

sip规范定义了六种method:registration用来向服务器注册的消息,invite、ack、cancel用来创建会话的消息,bye用来结束会话的消息,options用来查询服务器性能的消息。

sp:在这里指的是space空格的意思,request-line的参数与参数之间需要用空格隔开

request-uir:这个是一个sip uri,它用来标明这个request消息是由谁发起的。

sip-verison:与http-version格式相同。

      request-line如图中红框:

response-line

response-line = sip-version sp status-code sp reason-phrase CRLF

sip-version:上面说request-line的时候已经说过了

status-code:是由三位数字组成的返回状态码,其中第一个数字表示状态的类型,如图解释:

reason-phrase:这个在程序中不解析,这个是给程序员来读的,而状态码才是给机器来处理的。

下图红框为一个response消息的start-line:

头域:header fields

header-name  HCOLON header-value  COMMA header-value

其中:HCOLON表示冒号的意思 :

       COMMA表示逗号的意思

      一个头域可以有多个域值,它们之间要用逗号隔开。头域与头域之间没有固定的顺序,但是为了代理服务器解析方便,建议把路由相关的头域放在前面。值得注意的是,多个同名头域之间是有顺序要求的,如果顺序不同代表着不是同一个消息。

每个头域值都是依赖于它的头域名,域值格式为:

 field-name: field-value *(;parameter-name=parameter-value)

虽然在域值中可以有多个parameter-name=parameter-value对,但是parameter-name是不允许重复的。sip协议头域不区分大小写。

需要注意的是:有些头域是在request和response中通用的,而有些头域只能在request或者是response中使用的。

sip协议提供了一个缩写格式,防止数据过大,大于MTU值,对消息数据有所压缩。

包体:













  

0 0