分享

SIP协议解析与实现(c和c++ 使用osip) 8

 gljin_cn 2014-03-16

第三节 重定向服务器

在一些框架下,依靠代理服务器能够减少代理服务器的负载从而有益于转发请求和增强信号。

重定向允许服务器将路由信息通过对请求的应答发送给客户端,因此它使自己从这个事务的后继的消息环中解脱出来,同时还能够继续为请求目标进行准确定位。当请求的原始发送者接收到重定向,它将基于接收到的一个或多个URI重新构造新的请求。使用URI重定向可以允许大型的网络,并从网络的中心发送到边缘。

一个重定向服务器是一个服务器的事务层和需要某些定位服务(RFC3261第10节介绍注册和定位服务更多的信息)的事务用户的逻辑组成部分。定位服务是一个有效的数据库,该数据库映射一个URI和可以找到这个URI的一系列可选择的位置。

一个重定向服务器不能自己发送任何SIP请求。在接收到除了CANCEL外的其它请求后,服务器或者拒绝,或者用位置服务获得一列可选的位置信息并且发送3xx类型的最终应答。对于正常的CANCEL请求,服务器应该发送2xx应答,用来结束这个SIP事务。重定向服务器为一个完整的SIP事务维护事务的状态。由客户端探测重定向服务器之间的循环路由。

当一个重定向服务器为一个请求发送了3xx应答,它填充一列(一个或多个)可选的位置信息到Contact头域。Contact头域的"expires"参数用来标识Contact头域数据的生命周期。

Contact头域包含多个URI,这些URI包含新的位置信息或者用户名,用来重新发送请求,或者简单的指定附加传输参数。301(Moved Permanently)或者302(Moved Temporarily)应答可能会给出与原始请求目标一样的位置信息或用户名,但是指定的附加传输参数,如需要重试一个不同的服务器或者广播地址,或者通知SIP传输层使用TCP而不是UDP,或者反之。

尽管如此,重定向服务器不能将一个请求Request-URI头域的URI不等于它自己的请求重定向。这时如果URI不指向该服务器,服务器应该将请求发送到目标URI,或者使用404应答拒绝它。

 如果一个客户使用对外代理,而这个代理重定向请求,这回潜在的引起重定向循环。
 
注意,一个Contact头域的值可能引用到一个与原始呼叫者不同的资源。比如一个SIP电话连接到PSTN网关可能需要传递一个特别的声明信息,像“The number you have dialed has been changed.”

一个应答的Contact头域可能包含任何能够联系到被呼叫方的URI,而不仅仅限于SIP URI。比如它可能包含电话、传真、、irc或者邮件(RFC 2368 [32])URI(如果它们被定义了)。RFC3261第26.4.4节讨论关于将SIP URI重定向到一个非SIP URI的限制等问题。

Contact头域的"expires"参数指出URI多长时间是有效的。该参数的值是一个以秒为单位的数字。如果这个参数没有被提供,Expires头域的值指示URI的有效时间。非合法的值一律被视为3600。

这保证了一个能够向后兼容RFC2543的适当的值,它允许在头域中的绝对时间。如果接收到一个绝对时间,它将被视为是不合法的,并被默认定义成3600.

重定向服务器必须忽略任何它不理解的元素(包括不被承认的头域,请求中任何不知道的选项标签,甚至方法名)继续为请求提供重定向服务。 

 


 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多