TURN服务器如何将数据发送到NAT后的对等方?

时间:2019-02-11 01:35:51

标签: webrtc stun turn

我知道在TURN中有一个client,一个TURN serverpeer(s)。客户端本身在TURN服务器上创建一个分配,然后将relayed transport address返回给客户端,以便将数据发送给一个或多个对等端。

我了解客户端如何绕过NAT,但是在RFC5766中我没有看到有关对等端自身如何通过NAT从TURN服务器通过NAT接受UDP的任何信息(否则通过TURN,将是未经请求的UDP)。同行必须首先与TURN服务器联系。

我缺少一个步骤吗?是否将relayed transport address发送给对等方,以便在TURN服务器与其对等方之间进行通信之前,可以开始UDP打孔?

1 个答案:

答案 0 :(得分:1)

客户端在TURN服务器上创建分配,例如运行在8.8.8.8端口3478上。为此,它将STUN数据包从本地套接字发送到该地址。所有NAT(忽略阻止UDP的网络)都将允许TURN服务器通过该连接发送UDP数据(有时称为NAT绑定)。 TURN服务器还可以通过该连接发送所需的任何其他数据。

对等方不知道此分配。它仅知道TURN服务器告诉客户端的中继地址,例如8.8.8.8端口61468。客户端必须将此地址发送给对等方,例如,作为ICE过程中信令的一部分(请参见https://tools.ietf.org/html/rfc5245)。

然后,对等方可以发送8.8.8.8端口61468(有时客户端还必须告知TURN服务器对等方可以继续发送的ip;请参见https://tools.ietf.org/html/rfc5766中的权限)。然后,TURN服务器将转发在该端口上接收到的所有流量,作为STUN数据指示(或通过通道绑定,请参阅RFC 5766)。 NAT可以,因为它来自8.8.8.8端口3478。

客户端还可以通过STUN发送指示将数据发送到对等方。 TURN服务器将解包此数据并从中继地址(8.8.8.8端口61468)发送该数据

就双方的NAT而言,他们只看到与客户端首先发送数据包的ip和端口进行通信。