我知道在TURN中有一个client
,一个TURN server
和peer(s)
。客户端本身在TURN服务器上创建一个分配,然后将relayed transport address
返回给客户端,以便将数据发送给一个或多个对等端。
我了解客户端如何绕过NAT,但是在RFC5766中我没有看到有关对等端自身如何通过NAT从TURN服务器通过NAT接受UDP的任何信息(否则通过TURN,将是未经请求的UDP)。同行必须首先与TURN服务器联系。
我缺少一个步骤吗?是否将relayed transport address
发送给对等方,以便在TURN服务器与其对等方之间进行通信之前,可以开始UDP打孔?
答案 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和端口进行通信。