我们为什么需要SIP;“100次尝试”;TCP上的响应?

我们为什么需要SIP;“100次尝试”;TCP上的响应?,sip,sip-server,opensips,Sip,Sip Server,Opensips,SIP over UDP:SIP over UDP需要有SIP响应“100 Trying”来关闭计时器,这将由调用方启动,从而停止SIP消息的重新传输。它非常重要,因为其他响应(临时和最终)可能需要一段时间的初始邀请消息,因为我们必须考虑的情况下分叉,UE-B不可达,回退…等等,这可能需要一些时间 TCP上的SIP:调用方不会启动计时器-A,因此不会重新传输消息。TCP可靠,无需重新传输。即使如此,为什么大多数实现都会通过TCP发送100次尝试?可能是因为它使SIP堆栈实现更容易。如果SIP事务

SIP over UDP:SIP over UDP需要有SIP响应“100 Trying”来关闭计时器,这将由调用方启动,从而停止SIP消息的重新传输。它非常重要,因为其他响应(临时和最终)可能需要一段时间的初始邀请消息,因为我们必须考虑的情况下分叉,UE-B不可达,回退…等等,这可能需要一些时间


TCP上的SIP:调用方不会启动计时器-A,因此不会重新传输消息。TCP可靠,无需重新传输。即使如此,为什么大多数实现都会通过TCP发送100次尝试?

可能是因为它使SIP堆栈实现更容易。如果SIP事务层是相同的,则无论使用的SIP传输是什么,都会使工作更轻松。如果事务层对不同的传输有不同的规则,那么这是没有实际好处的额外代码,即不发送100次尝试响应所节省的带宽在方案中可以忽略不计

很少有理由认为SIPoverTCP仍然需要100次尝试

  • 拥有TCP连接并不保证SIP应用程序正在工作,也不保证它是SIP感知应用程序。100 Trying向您提供反馈,表明您的请求正在由SIP应用程序处理

  • 缺少100次尝试也可能是正确的触发器,不仅可以重新传输,还可以重新尝试配置中的不同服务器。即使连接是TCP,您也可能不希望在配置中的每台服务器上花费32秒

  • 在部署场景中,如果存在SBC或负载平衡器之类的元素,则会与它们建立TCP连接。它背后的应用程序可以是不同的实体,通常这些边缘元素传递所有消息或生成消息以指示处于动作状态的调用