SIP代理401响应处理

时间:2014-02-28 16:29:45

标签: proxy sip state-machine digest-authentication

我希望在代理来自下游UAS的401响应时,对SIP代理的预期行为做出一些澄清。

我们的SIP代理配置为以循环方式代理下游请求。如果下游UAS使用401响应INVITE,我希望SIP代理保持足够的状态,以便在发起上游UAC发送包含身份验证凭据的第二个INVITE时选择与目标相同的UAS。

相反,我所看到的是SIP代理将代理401响应,从上游UAC接收ACK,并立即销毁与此对话相关的所有状态。然后,当上游UAC向第二INVITE发送具有认证凭证时,SIP代理将以循环方式转发该请求。如果我们幸运的话,SIP代理将为第二个INVITE选择相同的UAS,但大多数时候它会选择其他一些下游目标。

我是SIP新手,我一直在阅读RFC 3261,试图了解正确的行为,但我没有看到明显的答案。

1 个答案:

答案 0 :(得分:0)

我认为您真正要问的是了解对话框中的进一步请求是如何工作的。为此,您需要了解“Record-Route”/“Route”标题。

它确实没有响应代码是什么,对话框中的下一个请求将直接转到远程URI,除非(并且几乎总是)提供了路由集。

RFC 3261第12节:

  

路由集是需要遍历的服务器列表   向对等方发送请求。

从第16.6节“请求转发”

  4. Record-Route

     If this proxy wishes to remain on the path of future requests
     in a dialog created by this request (assuming the request
     creates a dialog), it MUST insert a Record-Route header field
     value into the copy before any existing Record-Route header
     field values, even if a Route header field is already present.

从20.34路线

  

Route头字段用于强制请求路由   通过列出的代理集。使用的例子   路径标题字段在第16.12.1节中。

从12.1.2 UAC行为

  

路由集必须设置为Record-Route
中的URI列表   来自响应的头字段,以相反的顺序和保留   所有URI参数。如果
中没有Record-Route标题字段   响应,路由集必须设置为空集。这条路线   设置,即使为空,也会覆盖为将来设置的任何预先存在的路由   此对话框中的请求。

从16.12代理路由处理摘要

  

在没有当地政策的情况下,处理a   代理对包含Route头字段的请求执行可以是
  总结如下。

  1.  The proxy will inspect the Request-URI.  If it indicates a
      resource owned by this proxy, the proxy will replace it with
      the results of running a location service.  Otherwise, the
      proxy will not change the Request-URI.

  2.  The proxy will inspect the URI in the topmost Route header
      field value.  If it indicates this proxy, the proxy removes it
      from the Route header field (this route node has been
      reached).

  3.  The proxy will forward the request to the resource indicated
      by the URI in the topmost Route header field value or in the
      Request-URI if no Route header field is present.  The proxy
      determines the address, port and transport to use when
      forwarding the request by applying the procedures in [4] to
      that URI.

请参阅此example了解其工作原理。

因此,基本上初始请求应该构建“Route-Set”,然后用于在以下请求中生成“Route”头。

因此,对于您的问题,听起来似乎没有构建和/或在响应中发回“路由集”,或者UAC没有使用远程目标和路由集来构建请求 - 正确的URI和路由标头用于下一个请求。

strict and loose routing之间也存在差异,这也可能在这里发挥作用。我想你会使用lr tho。