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

3
我理解在TURN中有一个客户端、一个TURN服务器和一个或多个对等方。客户端本身在TURN服务器上创建一个分配,然后将一个中继传输地址返回给客户端,以便向一个或多个对等方发送数据。
我了解客户端如何绕过其NAT,但是我没有在RFC5766中看到任何关于对等方如何能够从TURN服务器通过其NAT接受UDP的内容(否则通过TURN还是不通过,它将是未经请求的UDP)。对等方必须首先联系TURN服务器。
我是否漏掉了一步? 中继传输地址是否发送给对等方,以便在TURN服务器和其对等方之间的通信开始之前进行UDP打洞?
1个回答

5
客户端在TURN服务器上创建一个分配,例如在8.8.8.8端口3478上运行。为此,它从本地套接字向该地址发送STUN数据包。所有NAT(忽略阻止UDP的网络)都将允许TURN服务器通过该连接发送UDP数据(有时称为NAT绑定)。TURN服务器还可以通过该连接发送任何其他数据。
对等方不知道这个分配。它只知道TURN服务器告诉客户端的中继地址,例如8.8.8.8端口61468。客户端必须将此地址发送给对等方,例如作为ICE过程中信令的一部分(参见https://www.rfc-editor.org/rfc/rfc5245)。
然后对等方可以发送8.8.8.8端口61468的数据(有时客户端还必须告诉TURN服务器对等方可以发送的ip地址;请参见https://www.rfc-editor.org/rfc/rfc5766中的权限)。 TURN服务器将转发其收到的任何流量,作为STUN数据指示(或通过通道绑定,详见RFC 5766)。NAT对此没有问题,因为它来自8.8.8.8端口3478。客户端还可以通过STUN发送指示向对等方发送数据。TURN服务器将解开这些数据并从转发地址(8.8.8.8端口61468)发送它。就两侧的NAT而言,它们仅看到与其客户端首先发送数据包的IP地址和端口进行通信。

2
这很有道理。我没有看到RFC中谈到同级首先向中继传输地址发送数据的任何意义。我想这一定是必须的。感谢您提供的详细信息! - Mmm Donuts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接