响应消息格式如下:
Response=Status-Line
*(general-header
I response-header
I entity-header)
CRLF
[message-body]
状态行(Status-Line)以协议版本开始,接下来是用数字表示的状态码(Status-Code)及相关的文本说明,最后以回车键结束,各个元素间用空格字符(SP)间隔,除了在最后的CRLF序列中,这一行别的地方不许使用回车或换行字符。
Status-Line=SIP-version SP Status-Code SP Reason-Phrase CRLF
SIP协议中用三位整数的状态码(StatusCode)和原因码(Reason Code)来表示对请求做出的回答。状态码用于机器识别操作,原因短语(Reason-Phrase)是对状态码的简单文字描述,用于人工识别操作。其格式如下:
Status-Code=Ixx(Informational)
I 2xx (Success)
I 3xx (Redirection)
I 4xx (Client-Error)
I 5xx (Server-Error)
I 6xx (Global-Failure)
I extension-code
状态码的第一个数字定义响应的类别,在SIP/2.0中第一个数字有6个值,定义如下:
• 1xx(Informational):请求已经收到、继续处理请求。
• 2xx(Uccess):行动已经成功地收到,理解和接受。
• 3xx(Redirection):为完成呼叫请求,还须采取进一步的动作。
• 4xx(ClientError):请求有语法错误或不能被服务器执行。客户机需修改请求,然后再重发请求。
• 5xx(ServerError):服务器出错,不能执行合法请求。
• 6xx(GlobalFailure):任何服务器都不能执行请求。
其中,Ixx响应为暂时响应(Provisionalresponse),其他响应为最终响应(FinalResponse)o
SIP消息头字段
SIP协议的消息头定义与HTTP在语法规则和定义上很相似。每个头字段都遵循以下格式:首先是字段名(Field Name),字段名不分大小写,后面是冒号;然后是字段值,字段值与冒号间可有多个前导空格(LWS)。其格式如下:
message-header = field-name":"[field-value]CRLF
field-name = token
field-value = *(field-contentILWS)
通用消息头(General–headeT)
通用头字段适用于请求消息和响应消息,包含的字段有:
general-header=Accept
I Accept-Encoding
I Accept-Language
I Call-ID
I Contact
I CSeq
I Date
I Encryption
I Expires
I From
I Organization
I Record-Route
I Timestamp
I To
I User-Agent
I Via
接下来,介绍通用头字段中各字段的含义:
• Accept,Accept-Encoding和Accept-Language字段用于客户机在请求消息中给出其可接受的响应的媒体类型、编码方式以及描述语言。用于服务器在415响应(请确认)中表明其可理解的请求消息的媒体类型、编码方式以及描述语言。
• Call-ID字段:用于惟一标识特定邀请或某个客户机的注册请求,一个多媒体会议可产生多个Call-ID不同的呼叫。
• Contact字段:给出一个URL,用户可以与此URL建立进一步的通信。
• Cseq字段:用于标识服务器发出的不同请求,若Call-ID值相同,那么Cseq值必须各不相同。
• Date字段:反映首次发出请求或响应消息的时间,重发的消息与原先的消息有相同的Data字段值。
• Encryption字段:表明内容经过了加密处理,这种加密为端到端的加密。
• Expire字段:它给出消息内容截止的日期和时间。
• From字段:所有消息中都必须有From字段,此字段给出请求的发起者。
• Organization字段:它给出发出请求或响应消息的实体所属的组织的名称。
• Record-Route字段:它给出一个全局可到达的Request-URI,用于标识代理服务器。
• Time-Stamp字段:给出客户机向服务器发出请求的时间。
• To字段:所有消息中都必须有To字段,此字段给出请求的目的收方。
• User-Agent字段:含有与发起请求的用户代理客户机有关的信息。
• Via字段:它给出请求消息迄今为止经过的路径。