SIP:松散路由(loose router)与严格路由(strict router)
前言
由于不了解松散路由与严格路由的区别,自行学习之后在这里进行总结。
一、什么是松散路由和严格路由?
SIP中的松散路由和严格路由是指对SIP信令中Request-URI和Route Header的两种不同的处理方法,rfc2543中的处理方法为严格路由,rfc3261中的处理方法为松散路由。
1.如何区分
通常根据SIP信令中的Route Header字段是否含有"lr"属性来区分,携带“lr”字段的为松散路由,否则为严格路由。
下图所示,其中proxy1与proxy3对应松散路由代理,proxy2对应严格路由代理。
INVITE sip:user@remoteuas SIP/2.0
Route: <sip:proxy1;lr>,<sip:proxy2>,<sip:proxy3;lr>
2.功能区别
严格路由是每次SIP请求经过UAS后,INVITE都会被重写。如下图所示:
全部为严格路由情况:
松散路由是每次SIP请求经过UAS后,INVITE不会改变。如下图所示:
全部为松散路由情况:
假定INVITE到达proxy1时,经过处理后的INVITE:
严格路由:
INVITE sip:sip:proxy2 SIP/2.0
Route: <sip:proxy3>,<sip:user@remoteuas>
松散路由:
INVITE sip:user@remoteuas SIP/2.0
Route: <sip:proxy2;lr>,<sip:proxy3;lr>
3.具体规则
1.松散路由和严格路由代理首先都会检查Route字段第一个地址是否为自己,如果是则从Route字段删除自己。
2.严格路由在发往下一跳时将使用Route字段下一跳地址更新Request-URI。
3.松散路由首先会检查Request-URI是否为自己,如果不是,则不作处理;如果是,则去除Route字段最后一个地址作为Request-URI地址,并从Route字段中删除最后一个地址。
4.松散路由会检查下一跳是否为严格路由,如果不是,则不作处理;如果是,则将Request-URI地址添加到Route字段最后一个地址,并用Route字段下一跳严格路由的地址作为Request-URI。
总结
以上就是总结的内容,本文仅仅简单介绍了SIP中松散路由和严格路由的区别,具体可以参考rfc了解。