rfc 5766:当两个设备都支持TURN时出现问题

时间:2014-01-24 09:56:31

标签: sip nat rfc stun

我一直在通过TURN rfc 5766并没有找到解决问题的方法.rfc只讨论了支持TURN的1台设备(客户端),而其他设备不支持TURN。 当两者都支持TURN时,我有一些疑问。我正在使用SIP协议。假设两个设备都在坏NAT后面(即地址和端口限制NAT)。

如果两个设备,例如设备A和设备B支持TURN,

1.设备A向哪个传输地址发送其应用数据?         a。分配给其中继的地址。         b。远程方的继续地址。

1.设备A从哪个传输地址接收应用程序数据?         a。从其分配的RELAYED ADDRESS。         b。从远程方的继续地址。

谢谢和问候

2 个答案:

答案 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 以下

  • 客户端1将数据包(封装在TURN消息中)从其本地端口发送到其TURN服务器的侦听端口(1.2.3.4:3478)。 TURN服务器将打开此数据包并将消息从其中继端口(8888)转发到客户端2的地址。客户端2发送的数据将按原样发送到客户端1分配的TURN服务器上的中继端口。 1.2.3.4:8888)。当TURN服务器在中继端口上从客户端2接收数据报时,它会将数据包封装到TURN消息中,并将其从端口3478转发到客户端1的地址。

OR

  • 客户端2将数据包(封装在TURN消息中)从其本地端口发送到其TURN服务器的侦听端口(5.6.7.8:3478)。 TURN服务器将打开此数据包并将消息从其中继端口(9999)转发到客户端1的地址。客户端1发送的数据将按原样发送到客户端2分配的TURN服务器上的中继端口。 5.6.7.8:9999)。当TURN服务器在中继端口上从客户端1接收数据报时,它会将数据包封装到TURN消息中,并将其从端口3478转发到客户端2的地址。

换句话说,如果选择了TURN服务器,则一方将始终使用TURN协议作为封装消息在TURN端口3478上发送/接收数据。另一方将始终发送/接收数据包(未封装)到另一个客户端分配的中继端口。它如何决定选择哪个TURN服务器?它在ICE中并不总是确定的。

在极少数情况下,它可以“TURN to TURN”。两个客户端都从各自的TURN服务器端口3478发送/接收数据.TURN服务器将数据转发到另一个客户端分配的中继地址。这种情况并不常见,但如果在ICE协商期间所有其他候选检查都失败,则可能会发生这种情况。

答案 1 :(得分:1)

RFC谈到NAT之外的TURN服务器和NAT之后的客户端,它需要与NAT后面的另一个客户端通信。该想法是,每个客户端连接到TURN服务器(不必相同),从服务器获取公共地址并将该SIP地址内的地址(例如SDP主体)发送到另一个客户端,例如,

  1. 客户端#1将连接到#1并获得公共地址#1
  2. 客户端#2将连接到#2并获得公共地址#2
  3. 客户端#1将addr#1发送到客户端#2
  4. 客户端#2将addr#2发送到客户端#1
  5. 如果客户端#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服务器就足够了。