1 概述
在RFC3261中,所使用的是松散路由,但是在RFC2534中使用的是严格路由,二者在路由规则中存在区别。为了能够识别松散路由和严格路由,在SIP消息的Record-Route头域中存储的URI会添加lr标记,严格路由则不进行标记。
2 路由规则
松散路由和严格路由遵循不同的规则来对Route头域进行处理。
2.1 严格路由规则
严格路由是在RFC2534中中提出的,并且遵循以下规则:
-
1 严格路由接收到的消息的Request-URI必须为自身的URI;
-
2 确认Request-URI是自身URI之后,严格路由会把在Route头域中的下一个路由取出作为新的Request-URI;
-
3 重新进行路由;
简单来说,对于严格路由而言,下一个路由的地址始终是Request-URI头域中的URI值。
2.2 松散路由规则
松散路由是在RFC3261中提出,同时为了兼容之前RFC2534中严格路由的规则,所以设计了如下的路由规则:
-
1 松散路由首先会去确认Request-URI是否属于自己所负责的域,如果是,那么使用location service将Request-URI翻译为具体的联系地址,否则不进行任何操作;
-
2 松散路由检查Route头域中的第一个URI是否和其本身的URI相同,如果相同,就将其删除;
-
3 松散路由检查Route头域中是否有Request-URI放入;如果有,则将Record Route头域中的最后一个URI取出作为Request-URI,否则不处理;
-
4 松散路由检查下一个路由是否为严格路由,如果为严格路由,则将Request-URI添加到Route头域的末尾,将Route头域中的第一个URI取出作为Request-URI,否则不进行处理;
-
5 如果Route头域为空,则路由给Request-URI
在以上松散路由的规则中,第3点对则是为了处理来自严格路由的消息,第四条则是为了让严格路由能够处理来自松散路由的消息所进行的处理;松散路由规则这样的设计兼容了在RFC2534中严格路由的路由规则。
3请求创建
-
如果路由集存在并且第一个URI没有附加lr,那么表明第一个路由为严格路由,这时要将remote URI添加到路由集末尾,然后取出路由集中的第一个URI,作为Request-URI,然后将路由集按照顺序填充到Route Record头域中;
-
如果路由集存在并且第一个URI附加了lr参数,那么表明第一个路由为松散路由,这是要将Remote URI设置到Request URI中,然后将路由集按照顺序填充到填充到Route Record头域中;
-
如果路由集不存在,那么只要将Remote URI设置到Request URI中即可;
网友评论