SIP IP 电话系统的呼叫路由
SIP IP 电话系统的呼叫路由 SIP IP 电话系统的呼叫路由
赵志峰1,2,3 杨永康2 仇佩亮1
(1. 浙江大学博士后科研流动站杭州 310027)
(2. 东方通信博士后科研工作站杭州 310053)
(3. 解放军理工大学通信工程学院南京 210007)
摘要: 文章首先介绍了SIP IP 电话系统呼叫路由使用的几个基本概念,包括请求资源标识、路由头部、路由记录和路由集。然后对SIP 呼叫路由的基础---注册和注销过程进行了描述。文章还分对话内和对话外两种情况对SIP 系统的呼叫路由过程进行了详细分析。最后给出了SIP 的移动框架和移动呼叫路由过程。关键词:SIP IP 电话系统呼叫路由移动性重定向
1 引言
SIP IP 电话系统的呼叫路由过程是由用户代理、代理服务器、注册服务器共同协调完成的。其中用户代理用于发起和接收呼叫, 代理服务器负责对呼叫请求和响应消息进行转发。注册服务器接受用户代理的注册请求并更新定位服务器中用户的地址映射信息。
本文将在[1]的基础上对SIP 的呼叫路由过程进行介绍。主要内容有基本的概念和术语、注册/注销过程、对话内和对话外的呼叫路由过程以及移动时的呼叫路由过程等。
2 基本概念
2.1 请求资源标识
请求资源标识(Request-URI) 是请求消息起始行的主要内容, 在RFC 3261[2]中其作用是标识请求消息的最终接收者。当用户代理客户(UAC:User Agent Client) 发送请求消息时, 请求资源标识的内容一般是被叫的逻辑地址。当请求消息到达被叫域时, 代理服务器通过查找定位服务器, 找到被叫的联系地址。在向被叫转发请求消息时, 请求资源标识将被修改为被叫的联系地址。
2.2 路由记录和路由头部
路由记录(Record Route)头部的作用是记录请求消息经过的路径,用代理服务器SIP URI 地址序列的形式来表示。该头部由请求消息经过的代理服务器根据需要插入, 用以强制本对话后续的所有请求消息必须经过本代理服务器。
路由(Route) 头部的作用与TCP/IP 中源点选路选项的作用非常类似。该头部作为请求消息的一部分, 描述了本请求消息必须经过的代理服务器列表。路由头部也以代理服务器SIP URI 列表的形式来表示,在构造请求消息时由用户代理客户生成。对于尚未建立对话( 称为对话外) 的请求消息,路由头部一般根据预设路由集的内容来设置。而对于已建立对话( 称为对话内) 的请求消息, 路由头部则根据该对话路由集(Route Set) 的内容来设置。
2.3 路由集
路由集是一个SIP URI 序列,它表示用户代理在对话内向对端用户代理发送请求消息时必须要经过的服务器列表。路由集的内容是从建立对话的请求或响应消息携带的路由记录头部抽取出来的, 它仅在本对话的范围内有效。
3 注册和注销过程
SIP 采用了逻辑地址和联系地址相分离的思想。逻辑地址用于标识用户, 而联系地址表明用户的当前位置。这种分离为用户的移动性提供了技术上的可能性。为了实现逻辑地址和联系地址之间的动态映射, 必须要有注册和注销过程的支持。
SIP 定义了注册服务器和REGISTER 消息。用户代理可以通过向注册服务器发送REGISTER 请求消息来完成注册、注销、刷新、地址映射获取等操作。在构造注册请求消息时,Request-URI 域应包含注册服务器的域名信息;To 包含要注册或注销的用户的逻辑地址; From 包含发送注册消息者的地址记录;Contact 包含要注册的联系地址信息。
要实现与注册服务器的通信, 用户代理首先要确定注册服务器的地址。SIP 定义了三种确认方法: 静态配置、使用地址记录和通过多播, 详见RFC 3261。
注册: 当用户代理要向注册服务器添加一个地址映射记录时,Contact 域包含要增加的联系地址信息,通过Expires 头部域或该地址信息的expires 参数来声明该联系地址的生命期。用户可通过一个REGISTER 请求消息同时增加多个地址映射记录。
刷新: 当要刷新一个地址映射记录时,Contact 域包含要刷新的联系地址信息, 通过Expires 头部域或该地址信息的expires 参数声明该注册地址的生命期来对映射记录进行刷新。用户可以对某个特定的记录进行刷新, 也可以同时刷新多个映射记录。
注销: 当用户代理要删除一个映射记录时, 可在Contact 域中填写要删除的联系地址信息, 并将expires 参数置0, 注册服务器收到后就会删除该映射记录。如果将Contact 域设为“*”, 且Expires 头部域设为0, 将会删除该用户的所有联系地址映射记录。
获取地址映射: 注册服务器每次成功处理完REGISTER 请求消息后, 它将返回一个状态码为200 的成功响应。该响应的Contact 头部将包含本用户注册的所有联系地址信息。用户可以从响应消息来获取用户的所有地址映射记录。
用户代理在注册服务器成功注册后, 就可以接收呼叫了。其入向代理在接收到对该用户代理的呼叫请求时, 根据对该用户地址映射信息的查询结果, 将呼叫请求消息转发到用户代理的当前联系地址。如果不进行注册, 入向代理将无法得知用户代理的当前位置。
4 呼叫路由
SIP 系统的呼叫路由从本质上而言是INVITE 请求消息的路由过程。它包含了用户代理客户如何构建请求消息, 发送给下一跳; 代理服务器如何处理请求消息, 转发给下一跳; 直至请求消息到达入向代理, 并发送给用户代理服务器这样一个过程。在呼叫过程中, 下一跳的URI 地址一旦确定, 就可以使用RFC 3263[3]定义的DNS 查找过程来确定使用的传输协议、目标IP 地址和端口号, 从而将消息发送给下一跳。下面分对话外的呼叫路由和对话内的呼叫路由两种情况进行介绍。
4.1 对话外的路由
对话外的路由指用户代理客户使用INVITE 请求消息发起呼叫时的路由过程。
4.1.1 用户代理客户
当用户代理客户UAC 要发送请求消息时, 它将请求消息的To 头部的值设置为被叫方的逻辑地址, 将From 头部的值设置为本用户的逻辑地址, 将Contact 头部设置成本用户的当前联系地址。将Request-URI 的值设置为与To 头部相同的逻辑地址。用户代理客户根据需要和配置信息来构造请求消息的其它内容。
路由(Route) 头部域的处理比较复杂。一般情况下, 用户代理客户有一个预设路由集, 包含了该用户代理客户发送请求消息时必须要经过的代理服务器列表。这样可以对请求消息的路由进行灵活的控制。预设路由集的最简单应用就是只包含出向代理的SIP URI 地址。这样所有的请求消息都将被发送到出向代理, 由出向代理负责对消息进行转发。用户代理客户将预设路由集的内容作为路由头部, 按次序插入到请求消息中。
完成上述步骤后, 就要对Request-URI 进行DNS 查询以获取下一跳的IP 地址、端口号和使用的传输协议。用户代理客户在请求消息中插入Via 头部( 包含自己的主机地址、端口号、使用的传输协议等信息), 将请求消息发送给下一跳。
4.1.2 代理服务器
代理服务器收到请求消息后, 首先对其合法性进行检查。可能的步骤有: 语法检查、Request-URI 检查、环路检测等。为了实现后向兼容性, 代理服务器还要对请求消息进行进一步处理, 以形成一个满足RFC 3261 要求的标准请求消息。
如果本代理服务器是中间代理服务器(Request-URI 中的域不是由本代理服务器负责), 那么该请求消息的目标就是Request-URI, 无需执行更多的操作。
如果本代理服务器是入向代理(Request-URI 中的域是由本代理服务器负责)。代理服务器需要为该请求确定请求目标。RFC 3261 把确定请求目标的手段抽象成访问一个定位服务器, 访问结果是一组SIP URI。代理服务器使用这些SIP URI 来构建目标集(target set), 即请求消息的实际接收者列表。一般情况下, 入向代理将目标集中的SIP URI 按优先级进行排序, 并按照优先级的高低依次处理。代理服务器将消息的Request-URI 替换成从目标集选中的地址。这意味着该请求消息的目的地变成了新的地址, 即从用户的逻辑地址变换成了用户的当前联系地址。
如果代理服务器要求由本请求消息建立的对话的后续请求消息必须经过本代理服务器, 它将自己的SIP URI 插入到路由记录头部的最前面。然后根据请求资源标识的内容确定下一跳的IP 地址、端口号, 代理服务器在请求消息中插入Via 头部, 将消息发送给下一跳。
4.1.3 用户代理服务器
用户代理服务器收到请求消息后, 若消息合法, 将准备以成功响应回送, 并建立对话。用户代理服务器要为该对话构建对话上下文。其路由集的内容根据请求消息包含的路由记录头部来构建, 它表明了从被叫到主叫的请求消息必须经过的代理服务器的列表。
用户代理服务器构建响应消息, 从请求消息中拷贝To、From、Via、Record-Route 等头部信息。将Contact 头部的内容设置为自己的联系地址。
由于Via 头部标明了请求消息的发送路径,响应消息将沿该路径原路返回到发送方的用户代理客户。
4.1.4 重定向
SIP 定义了重定向服务器, 可以根据配置对呼叫请求进行重定向。比如: 某用户开启了呼叫前转服务, 如果收到对它的呼叫请求就可以通过重定向来响应。再如, 如果重定向服务器通过查询定位服务器发现用户已经移动出了本域,它也可以通过重定向指示主叫用户代理重新发起呼叫。
重定向服务器可以和入向代理服务器或用户代理服务器放置在一起,以实现对呼叫请求的控制。当重定向服务器确定要对一个请求消息重定向后, 它将构造一个重定向响应消息。响应消息的To、From、Via 等头部的内容从请求消息拷贝。Contact 域的内容包括重定向的目标地址列表。重定向响应消息将根据Via 头部的内容按原路返回给用户代理客户。用户代理客户收到重定向响应后, 根据响应消息Contact 头部域的内容构建新的目标集并使用对话外的呼叫路由过程重新发起呼叫请求。
4.2 对话内的路由
当对话建立后, 用户代理客户和用户代理服务器将为对话建立对话上下文。对话上下文包含了对话双方的逻辑地址、联系地址、请求消息经过的路由集等信息。有了这些信息, 请
求消息的路由过程就变得非常简单。由于代理服务器无法感知到对话的存在, 对话内发送请求消息时, 代理服务器的行为与对话外相同。
4.2.1 用户代理客户和服务器
当用户代理客户要构建一个请求消息时, 消息的To、From 域的内容分别设定为对话上下文的远端URI 和本地URI。Request-URI 的值设定为对话上下文的远端目标。对话上下文的路由集作为路由头部插入请求消息中。消息构建完成后发送给下一跳。
用户代理服务器的动作更为简单, 收到请求消息后加以处理并给予适当的响应。响应消息按照Via 头部的路径原路返回到用户代理客户。
如果收到成功响应, 本次请求操作成功完成。如果收到重定向响应, 对重定向响应消息进行相应的处理。
4.2.2 目标刷新
对话过程中一个非常重要的过程是目标刷新, 即刷新用户的联系地址和会话参数。在对话过程中, 如果任一方的联系地址或会话参数发生变化, 都可以通过目标刷新通知对方。
目标刷新通过对话中的INVITE 请求消息( 称为Re-INVITE) 来实现。当用户代理的联系地址改变时, 它使用对话上下文信息构造一个INVITE 请求消息, 将新的联系地址放入Contact 头部域, 使用对话内的路由过程将消息发送给对方。对方收到请求消息后, 发现Contact 头部的内容和对话上下文的远端目标不同, 就使用新的联系地址更新对话上下文的远端目标。目标刷新过程还可以用于修改当前的会话参数, 比如增加媒体流、改变端口等。
5 移动时的呼叫路由
为了满足多媒体通信系统移动性的需要,SIP 在设计的初期就考虑到了对移动性的支持, 并采用了多种简单、灵活的机制。比如逻辑地址和联系地址分离、注册/注销、目标刷新等等。SIP 的用户代理、注册服务器和代理服务器在移动框架中都承担了一定的功能。
5.1 移动框架
SIP 的移动框架包括地址分离机制、注册/注销、呼叫重定向和目标刷新过程。
用户移动性的基础是其标识唯一性,其它用户就用这个唯一的标识跟移动用户联系,SIP 中称之为移动用户的逻辑地址。但要实现与移动用户的通信, 必须要能将报文发送到其当前所在的位置, 即它的联系地址。该联系地址是随着移动用户位置的变化而变化的。用户使用逻辑地址进行呼叫, 网络实体使用联系地址进行通信。
地址分离为移动性支持提供了基础。要完成对移动用户的呼叫, 必须知道用户的当前位置信息。这需要注册和注销过程的支持。当用户接入SIP 系统时, 它首先要发起注册, 以报告自己当前的联系地址。当用户由于移动改变了联系地址, 它必须要注销老的地址映射, 并通过注册过程建立新的地址映射。这样, 定位服务器中的地址映射总能反映用户的最新位置信息, 确保完成对移动用户的呼叫。
与移动性支持直接相关的一个过程是呼叫重定向。当重定向服务器发现本次呼叫需要重定向后( 比如发现用户已移动), 它生成一个重定向响应消息, 将被叫用户的当前联系地址告知主叫用户。主叫用户向新联系地址发起INVITE 呼叫请求。请求消息会被路由到联系地址所在的用户终端。由此可见, 呼叫重定向是用户移动后呼叫建立的通用信令过程。
目标刷新可供用户告知通信对方自己的联系地址发生了变化。这对于通信中的移动是非常重要的。当用户在通信中进行移动时, 它的联系地址有可能发生变化( 比如进入到另一个域而使IP 地址发生变化)。当联系地址改变后, 用户使用目标刷新过程, 将新的联系地址告知对端。对端就可以使用新的联系地址与其通信, 保证了移动中通信的不中断。目标刷新过程完成后, 用户还要及时向自己的注册服务器注册新地址, 以使网络获知其当前位置。
5.2 移动性支持
在图1 中, 移动终端用户移动到外地网络后, 首先要通过注册过程向其归属网络注册当前的联系地址。对端用户使用移动终端用户的逻辑地址发起呼叫, 呼叫请求达到移动终端用户的入向代理服务器时, 查询定位服务器发现移动终端已经移动出其归属网络。入向代理将移动终端用户的当前联系地址通过重定向消息告知对端用户。对端向移动终端用户的当前联系地址重新发起呼叫请求。因此, 移动后的呼叫路由过程是由地址分离机制、注册/注销和呼叫重定向过程共同完成的。
在图2 中, 通信对端和移动终端用户正在进行通信, 移动终端用户从外地网络1 移动到了外地网络2, 致使其联系地址发生了变化。移动终端用户使用目标刷新过程将其新联系地址告诉对端, 对端就可以使用新地址与其通信了。由此可见, 在通信过程中的移动性支持是靠目标刷新过程完成的。
screen.width-333) {this.width=screen.width-333;this.alt='Click Here to Open New Window';}" border=0 pop="Click Here to Open New Window"2 通信过程中的移动
6 结束语
本文对SIP IP 电话系统的呼叫路由过程进行了详细的介绍。在描述了基本概念后, 首先对基本的注册/注销过程进行了介绍。注册/注销过程是SIP 呼叫路由过程的前提。文章分对话外和对话内两种情况对SIP 的呼叫路由过程进行了分析。由于SIP 在设计时就考虑到了对移动性的支持, 可以很好地支持移动后的呼叫路由和通信过程中的移动。
随着SIP 的逐渐成熟和普及应用, 很多研究人员提出了对SIP 的扩充使用方案。比如对及时消息的支持[4], 对会议功能的支持[5]等。我们将密切跟踪SIP 应用的发展动态, 对这些新的应用方法进行研究。
参考文献
[1] 赵志峰, 杨永康, 仇佩亮. 基于SIP 的IP 电话系统. 中国数据通信, 2004 年第1 期.
[2] IETF RFC 3261, Session Initiation Protocol, June 2002.
[3] IETF RFC 3263, Session Initiation Protocol (SIP): Locating SIP Servers, June 2002.
[4] IETF RFC 3428, Session Initiation Protocol (SIP) Extension for Instant Messaging,Dec,2002
[5] J. Rosenberg. draft-ietf-sipping-conferencing-framework-01, Oct 2003.
赵志峰: 男,1975 年3 月出生。2002 年获解放军理工大学通信工程学院通信与信息系统博士学位。现在浙江大学博士后科研流动站&东方通信博士后科研工作站从事下一代网络技术的研究工作。研究方向为下一代网络、软交换技术、Ad Hoc 网络和移动网络技术。
杨永康: 男, 东方通信博士后科研工作站导师, 东方通信网络通信研究所副总工程师。仇佩亮: 男, 浙江大学博士后科研流动站导师, 浙江大学信息科学与工程学院博士生导师。