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

第二章  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@biloxi”,其中“bob”是用户名,“biloxi”是为该用户提供SIP服务的域,此外SIP协议还提供一种安全URI方案,称为SIPS URI,例如“sips:bob@biloxi”。通常,请求消息中的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 <SIP URI>;tag=xxx
其中,“display-name”是一个可选的用户名,用来在用户界面上显示;所有的From头域都必须包含一个“tag”参数,它由会话发起方在请求消息中插入,是一个由会话发起方生成的全局唯一的标识,From头域和To头域中的两个“tag”参数,与Call-ID头域一起唯一地标识一条SIP对话。
From头域示例如下:
From: "Bob" <sips:bob@biloxi> ;tag=a48s
2)To:指定请求消息目的接收者的逻辑地址,它与From头域的格式类似。To头域的“tag”参数由
请求消息的目的接收者在响应消息中插入。
To头域示例如下:
To: Carol <sip:carol@chicago>
To: sip:;tag=2443a8f7
3)Call-ID:唯一标识某次邀请过程或者某个客户机的所有注册。Call-ID通常由一个随机的逻辑标
识、一个“@”字符、一个域名或IP地址组成,由于会话的发起方在自己的域上具有唯一的逻辑标识,逻辑标识和域名共同组成的Call-ID是全局唯一的。
Call-ID头域示例如下:
Call-ID: 34a5d553192cc35@15.34.3.1
4)CSeq:用于对SIP事务进行标识和排序,区分新的请求消息与重传的请求消息,它包含一个序列
数和一个方法名,方法名必须与请求消息的方法名相同。
CSeq头域示例如下:
CSeq: 4711 INVITE
5)Max-Forwards:用于限制一个请求消息在到达目的地之前所经过的跳数,每经过一跳,值减1,
当值减到0时,请求被拒绝。
Max-Forwards头域示例如下:
Max-Forwards: 70
6)Via:记录请求消息所经过的路径,并且指定响应消息的路由,防止在消息传递过程中产生回路。
Via头域中必须包含一个branch ID,用来对由该请求消息创建的SIP事务进行标识。
Via头域示例如下:
Via: SIP/2.0/UDP 100.101.102.103 ;branch=z9hG4bK776a
7)Contact:用来表示用户当前所在的实际地址,它由一个显示名、一个URI和几个参数组成。在
一次呼叫过程中,Contact头域中保存的用户地址被暂存下来,用来向该用户直接发送请求消息,例如:对于一条INVITE消息的200 OK响应中包含一个Contact头域,该头域中的URI指出了被叫用户当前所在的实际地址,之后由主叫方向被叫方发送的ACK消息和其它的任何请求消息都直接发往这个地址,而不经过网络中的代理服务器。在一次注册过程中,Contact头域被包含在REGISTER请求消息和200 OK响应消息中,用来建立用户逻辑地址到实际地址的绑定,其中的“expire”参数指出该绑定的有效期。
Contact头域示例如下:
Contact: sip:bob@pc11.biloxi
Contact: Bob <sips:bob@192.0.2.4>;expires=60
2.1.4  消息体
SIP消息可能会带有消息体,消息体可以包含多种类型的信息,最常见的是SDP信息,用于承载用SDP协议描述的媒体参数。一些消息头域用来对消息体进行说明,如:Content-Type头域说明了消息体的类型,Content-Length头域指定消息体的长度,Content-Encoding表示消息体的编码方式。
2.2  SIP网络元素
SIP网络中包含两种元素:SIP用户代理(User Agent, UA)和SIP网络服务器,如图2-1所示。UA 是SIP网络中的终端系统和用户接口;SIP网络服务器向UA提供服务,用于用户注册和消息路由,根据功能上的不同分为3类:代理服务器(Proxy Server)、重定向服务器(Redirect Server)和注册服务器(Registrar),这三种服务器都需要访问一个位置服务(Location Service),来查询或修改一些用户
的地址信息。图2-1中的实线部分,即UA和各种SIP网络服务器之间的交互均采用SIP协议;虚线部分,即SIP网络服务器对位置服务的访问不属于SIP网络的范畴,一般不使用SIP协议,常用的有轻量目录访问协议(Lightweight Directory Access Protocol, L DAP)[11]等。
图2-1 SIP网络示意图
2.2.1  用户代理
UA是一个支持SIP协议的网络终端,用户通过UA建立媒体会话,使用多媒体服务。根据UA在会话中扮演角的不同,又分为用户代理客户机(user agent client, UAC)和用户代理服务器(user agent server, UAS),它们之间的关系如图2-2所示。UAC是一个客户机应用,根据外部激励(如用户按键、
电话线上的信号等)发出请求消息,并处理响应消息;UAS是一个服务器应用,它接收并处理UAC
uasa
发起的请求消息,并根据处理结果向UAC返回响应消息。通常一个UA同时具有UAC和UAS两种功能。
图2-2 UAC与UAS
2.2.2  代理服务器
代理服务器构成SIP网络结构的骨干,它负责将请求消息路由到UAS,将响应消息路由到UAC。
在转发请求消息时,代理服务器通常通过位置服务来确定下一跳的地址。位置服务作为一个全局数据库,作用类似于DNS服务器,根据用户的逻辑地址查询并返回实际的位置信息。
从运行机制上,代理服务器与UA有以下三个主要的区别:
1)代理服务器不发起请求消息,它仅根据收到的请求消息向UA返回一定的响应;
2)代理服务器不具有媒体协商能力;
3)代理服务器仅仅根据SIP消息的头域处理消息路由,不解析消息体。
一个代理服务器可以工作在有状态和无状态两种模式下,称为有状态代理服务器和无状态代理服务器。无状态代理服务器仅仅对消息进行转发,不保存消息状态,因此效率较高;有状态代理服务器为每一个转发的请求消息记录状态信息,并使用这些信息影响以后对响应消息的处理,有状态的代理服务器是SIP域的主要管理者。
代理服务器是一个逻辑角,根据具体的应用场景,它可以扮演代理服务器的角,对消息进行路由,也可以扮演UAS的角,直接对请求消息给予响应,例如,对于格式错误的请求消息给予报错响应。
2.2.3  重定向服务器
重定向服务器也通过查询位置服务对UA提供消息路由的功能,但不同于代理服务器,它不利用查询到
的位置信息转发任何请求消息,而是将此位置信息封装在一个3xx响应消息中返回给UAC,让UAC自行尝试下一跳的位置。
2.2.4  注册服务器
在SIP系统中,用户使用URI进行标识,通常,与Email地址一样,用于标识用户的URI是一个逻辑地址,并不能直接表示用户当前所在的实际位置,它又被称为记录地址(address of record, AOR)。因此,用户必须首先向一个服务器登记他当前所在的位置,将自己的AOR地址绑定到当前所在的实际地址上,才能被呼叫者到,如果用户的位置发生变化,就必须向服务器重新注册新的位置。
注册服务器的作用就是完成对用户的注册,它将用户的AOR地址绑定到用户当前所在的实际地址,并将这个绑定的位置信息存储到位置服务中,例如,将一个逻辑上的AOR地址sip:bob@biloxi 绑定到一个可以对应到IP地址的位置sip:bob@pc1.biloxi上去。
2.3  协议层次结构
SIP协议具有分层的体系结构,协议的运行机制由四个相对独立的层次描述,从下向上分别为语法与编码层(syntax and encoding)、传输层(transport)、事务层(transaction)和事务用户层(transaction user, TU),如下图所示:
图2-3 SIP协议的层次结构
2.3.1  语法与编码层
语法与编码层是SIP协议的最底层,它规定了SIP的消息格式和编码方式,使用BNF语法[12]进行描述,所有的SIP网络元素都具有语法与编码层。

本文发布于:2024-09-22 04:37:41,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/377945.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:消息   请求   响应   用户   协议   地址   头域
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议