我一直在通过TURN rfc 5766并没有找到解决问题的方法.rfc只讨论了支持TURN的1台设备(客户端),而其他设备不支持TURN。 当两者都支持TURN时,我有一些疑问。我正在使用SIP协议。假设两个设备都在坏NAT后面(即地址和端口限制NAT)。
如果两个设备,例如设备A和设备B支持TURN,
1.设备A向哪个传输地址发送其应用数据? a。分配给其中继的地址。 b。远程方的继续地址。
1.设备A从哪个传输地址接收应用程序数据? a。从其分配的RELAYED ADDRESS。 b。从远程方的继续地址。
谢谢和问候
答案 0 :(得分:3)
假设有两个TURN服务器。客户端1使用IP 1.2.3.4。另一个由客户端2使用,IP 5.6.7.8。两个TURN服务器都在监听3478的标准侦听端口。
让我们说在ICE或类似ICE的协商会话期间,客户端1在其TURN服务器上分配了端口8888。客户端2在其TURN服务器上分配了端口9999。
ICE否定后,假设客户端无法直接连接,两个客户端之间的数据流将 ONE 以下
OR
换句话说,如果选择了TURN服务器,则一方将始终使用TURN协议作为封装消息在TURN端口3478上发送/接收数据。另一方将始终发送/接收数据包(未封装)到另一个客户端分配的中继端口。它如何决定选择哪个TURN服务器?它在ICE中并不总是确定的。
在极少数情况下,它可以“TURN to TURN”。两个客户端都从各自的TURN服务器端口3478发送/接收数据.TURN服务器将数据转发到另一个客户端分配的中继地址。这种情况并不常见,但如果在ICE协商期间所有其他候选检查都失败,则可能会发生这种情况。
答案 1 :(得分:1)
RFC谈到NAT之外的TURN服务器和NAT之后的客户端,它需要与NAT后面的另一个客户端通信。该想法是,每个客户端连接到TURN服务器(不必相同),从服务器获取公共地址并将该SIP地址内的地址(例如SDP主体)发送到另一个客户端,例如,
如果客户端#1可以直接到达addr#2(通常情况下,除非你有一个限制性防火墙而不是简单的NAT),它会向addr#2发送一个数据包,从而将隧道挖入自己的NAT。因此,不仅可以从客户机#1到地址#2的数据包,还可以从地址#2到客户机#1的数据包。结果是以下通信场景:
客户#1< --- NAT#1 --->转#2(地址#2)< --- NAT#2 --->客户端#2
只有当客户端#1和地址#2(或客户端#2到地址#1)之间的直接通信不可能时(不常见,只有两者都在限制性防火墙之后),您才需要使用两个TURN服务器:
客户#1< - FW#1 --->转#1(地址#1)< --->转#2(地址#2)< --- FW#2 --->客户端#2
感谢selbie @指出通常只有一个TURN服务器就足够了。