我希望在代理来自下游UAS的401响应时,对SIP代理的预期行为进行一些说明。SIP代理401响应处理
我们的SIP代理被配置为以循环方式代理下游请求。如果下游UAS响应带有401的INVITE,我希望SIP代理保持足够的状态,以便在始发上游UAC发送包含认证凭证的第二个INVITE时,选择与目标相同的UAS。
相反,我所看到的是SIP代理将代理401响应,从上游UAC接收ACK,并立即销毁与此对话有关的所有状态。然后,当上游UAC以认证证书发送第二个INVITE时,SIP代理将以循环方式转发该请求。如果我们运气好的话,SIP代理将为第二个INVITE选择相同的UAS,但大多数时候它会选择其他下游目标。
我是SIP新手,我一直在阅读RFC 3261,试图理解正确的行为应该是什么,但我没有看到明显的答案。
你是正确的,没有记录路由或路由头被插入交换中的任何地方。但是,我想知道为什么这是必需的。 Record-route只能通过代理插入,所以如果代理之后的下一跳不是另一个代理,而是远程URI(就像代理只是一个负载平衡器一样),那么肯定不会在记录路由头中列出。代理仍然需要记住之前的选择以正确处理第二个INVITE。 我注意到第二个INVITE没有来自第一个INVITE的“to-tag”,所以也许这是相关的? – bs1982
添加一条记录 - 路线是可操作的。因此,对于可以从循环中“丢弃”的代理,是的,他们不会添加记录路由。很难知道谁在这里有问题。你可以说这是sip代理不添加到Record-Route中,你可以指责主代理处理邀请。如果认证是“很好地”实现的,那么代理获取INVITE并不重要,它应该能够验证它是否成功通过认证。 –
还有一个问题,即如果请求已签名,则除非您辞职,否则无法修改请求。因此,中间代理必须是无状态的,或者知道如何验证请求。 –