SIP UAS / UAC是否必须在同一端口上侦听TCP和UDP协议?

时间:2018-12-14 07:09:50

标签: sip freeswitch

我有一个freeswitch,上面有两个订阅者。
例如A和B。
但是B无法同时在同一端口上侦听TCP和UDP协议。因此,如果我为UDP配置B并通过freeswitch从A调用到B。 Freeswitch尝试通过TCP连接到B,然后失败,并向A发送503服务不可用。
我知道RFC3261中的条款8.1.3.1。但是我不确定,我想问一下SIP标准对此有何评论。如果无法建立TCP连接,是否应该尝试通过UDP发送消息?
我读了SIP标准,但没有找到任何关于SIP的信息(也许我错过了)。
而且,我想知道这是否是一个freeswitch错误。

2 个答案:

答案 0 :(得分:0)

如果您从B发送带有联系人头中TCP传输的REGISTER请求,则freeswitch将与TCP进行通信,否则将与UDP进行通信。 对于您的情况,是可能的。 UAS / UAC可以使用TCP和UDP侦听同一端口。 您可以使用代码中的TCP和UDP创建套接字。 UAS下面正在监听UDP和TCP。 enter image description here

答案 1 :(得分:0)

来自rfc3261:

  

18.2服务器

     

18.2.1接收请求

     

服务器应准备好接收任何IP地址上的请求,   端口和传输组合可能是DNS查找的结果   在出于以下目的而分发的SIP或SIPS URI [4]上   与该服务器通信。在这种情况下,“分发”
  包括将URI放在REGISTER的Contact标头字段中
  请求或重定向响应,或者在
中的Record-Route标头字段中   请求或响应。也可以通过放置URI来“分发” URI
  在网页或名片上。还建议服务器   侦听默认SIP端口上的请求(对于TCP和UDP,为5060,
  所有公共接口上的TLS over TCP的5061)。典型的
  专用网络或多个服务器的情况下
  实例在同一主机上运行。对于任何端口和接口
  服务器侦听UDP,它必须侦听同一端口
  和TCP接口。这是因为可能需要发送一条消息   如果太大,请使用TCP而不是UDP。结果,
  相反是不正确的。服务器不必在
上监听UDP   特定的地址和端口,只是因为它正在监听相同的地址和端口   TCP的地址和端口。当然,可能还有其他原因   服务器需要在特定的地址和端口上侦听UDP。

在实践中,现实生活中的服务必须侦听所有强制运输。否则,用户会遇到麻烦。

无论如何,客户端实际上将使用UDP或TCP(或TLS)。但不是两者。如果A和B使用不同的传输,这实际上应该不是问题,因为该服务(此处的freeswitch)应该与UDP进行通信,以便A和与TCP进行通信,对于每个用户使用不同的传输一定不是路由失败的原因。

为完成此操作,如果没有现有连接(由于NAT,防火墙...),SIP服务器通常无法将消息发送到SIP客户端。 SIP客户端通常将进行注册(并因此创建可重用的TCP连接或可重用的UDP绑定),然后,在需要时,服务器将始终重用该TCP连接或UDP绑定(所谓的反向路径)进行转发新的请求(INVITE)。

在现实世界中,别无选择!