SIP协议及其安全机制的研究与实现_第二章SIP协议分析_15_25

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第二章 SIP协议分析[1]

2.1 SIP消息

SIP是一种基于文本的协议,SIP消息使用UTF-8编码[8]。SIP消息分为请求消息和响应消息两种,请求消息由客户机发送到服务器,响应消息由服务器返回给客户机。所有的请求和响应消息都遵循由RFC2822所规定的基本格式[9],由一个起始行(start-line)、若干个消息头域(message-header)、一个空白行(empty-line)、可选的消息体(message-body)几个部分构成,消息中的每一行均以换行和回车字符(CRLF)作为结尾。对于请求消息,起始行为请求行(Request-Line),而对于响应消息,起始行为状态行(Status-Line)。SIP消息可以表示如下:

generic-message = start-line

*message-header

CRLF

[message-body]

start-line = Request-Line / Status-Line

2.1.1 请求消息

SIP请求消息的请求行由一个方法名(Method)、一个请求URI(Request-URI)和一个协议版本(SIP-Version)组成,三个部分之间以空格字符(SP)间隔。请求消息的格式可以表示如下:Request-Line = Method SP Request-URI SP SIP-Version CRLF

z Method:决定请求消息的类型与目的,在RFC3261中规定了六种方法,方法的名称与意义如表2-1所示。这六种方法完成了SIP协议的基本功能,其中,INVITE、ACK和BYE三种方法可以构成一次基本的会话建立直至终止的过程。除此之外,在其它的SIP相关RFC中还定义了REFER、SUBSCRIBE、NOTIFY、MESSAGE、UPDATE、INFO和PRACK七种方法[4],用于即时消息等附加功能。

名称意义

REGISTER 向注册服务器登记实际地址信息,提供地址映射

INVITE 邀请某个用户加入媒体会话

ACK 确认对于一个INVITE消息的最终响应

BYE 终止一条已经存在的媒体会话

CANCEL 取消一个尚未完成的请求

OPTIONS 查询服务器的当前状态及其所支持的媒体功能

表2-1 SIP Methods

z Request-URI:表明了请求消息的目的地址。SIP协议使用一种类似于Email地址的统一资源标识符(Uniform Resource Identifier, URI)地址格式[10],称为SIP URI。SIP URI通常采用“sip:user@host”的形式,例如“sip:bob@”,其中“bob”是用户名,“”是为该用户提供SIP服务的域,此外SIP协议还提供一种安全URI方案,称为SIPS URI,例如“sips:bob@”。通常,请求消息中的Request-URI是一种SIP URI或SIPS URI,但SIP协议也支持一些其它类型的Request-URI方案,如“tel” URI方案、“im” URI方案等。

z SIP-Verison表示请求消息或响应消息使用的SIP协议版本号,SIP协议当前的版本号是2.0,

所有的请求与响应消息都必须将SIP-Verison设置为“SIP/2.0”。

2.1.2 响应消息

SIP响应消息的状态行由一个协议版本(SIP-Version),一个状态码(Status-Code)和一个原因说明(Reason-Phrase)组成,类似于请求消息,三个部分之间也以空格字符(SP)间隔。响应消息的格式可以表示如下:

Status-Line = SIP-Version SP Status-Code SP Reason-Phrase CRLF

状态码是一个100~699之间的3位正整数,它表示对于一个请求消息的响应结果。原因说明是一串可以显示的字符,用于对响应的状态码进行简短说明。

状态码的第一位决定了响应消息的类型,状态码在100~199之间的响应消息归类为“1xx response”,状态码在200~299之间的响应消息归类位“2xx response”,以此类推,响应消息被分为六种类型,如表2-2所示,其中1xx响应通知客户机请求消息正在接受处理,还会有后继的响应消息被服务器返回,因此被称为临时响应,其它的五种响应均表示与这个请求相关的处理已经完毕,被称为最终响应。

类型描述状态码表示的意义

1xx 临时响应

(Provisional)之前的请求消息已经收到,并准备接着处理后面的请求消息。

2xx 成功响应

(Success)

操作成功,请求消息已被收到并且成功地处理。

3xx 重定向响应

(Redirection)服务器向客户端返回其它可能的位置,客户端应当根据响应中包含的地址信息向另一个服务器重发请求消息。

4xx 客户端错误

(Client Error)请求由于客户端的错误而失败,客户端可以根据响应状态码修改并重发刚才的请求消息。

5xx 服务器错误

(Server Error)请求由于服务器的错误而失败,客户端可以向另一个服务器重发请求消息。

6xx 全局错误

(Global Failure)请求失败,客户端不应该再向任何服务器重发该请求消息。

表2-2 SIP响应消息分类

2.1.3 消息头域

SIP消息的头域大部分与HTTP消息的头域相同,其格式符合RFC2822的规定,可以表示成“field-name: field-value”的形式。其中,field-name是消息头域的名称,field-value是消息头域所携带的信息。有些消息头域既可以用于请求消息,也可以用于响应消息;而有些消息头域只能用于请求消息或响应消息的一种。在一个合法的SIP请求消息中必须包含六种头域:From、To、Call-ID、CSeq、Max-Forwards和Via,在这六种头域中包含了构成一条SIP请求消息所需要最基本的信息。

对几种重要的消息头域说明如下:

1)From:表示请求消息发起方的逻辑地址,它的一般格式为:

display-name ;tag=xxx

其中,“display-name”是一个可选的用户名,用来在用户界面上显示;所有的From头域都必须包含一个“tag”参数,它由会话发起方在请求消息中插入,是一个由会话发起方生成的全局唯一的标识,From头域和To头域中的两个“tag”参数,与Call-ID头域一起唯一地标识一条SIP对话。

From头域示例如下:

From: "Bob" ;tag=a48s

相关文档
最新文档