使用 TURN 服务器进行点对点通信

Using TURN server for peer-2-peer communication

我是 TURN 的新手,我想创建一个需要 TURN 服务器进行 udp 通信的实验性应用程序。

我已经使用过 UDP 打孔并且我熟悉 subject.Also 我知道 NAT 类型和用于端口映射的 UPnP。

要使用不具备 UPnP 功能的路由器解决对称和端口受限 NAT 中的端口映射,我必须与 TURN 服务器通信并通过 it.But 发送 UDP 数据包我不知道如何与 TURN 服务器通信以及如何在 C# programming.

中使用它

如果你能指出正确的方向并给我一些指示,我将不胜感激。

谢谢。

我可以回答如何使用TURN 完成中继呼叫。但是要了解如何为 TURN 形成消息,您需要阅读 RFC。

TURN 的工作原理

需要 TURN,因为它不可能绕过某些 NAT 过滤并与主机建立直接连接。由于 TURN 位于 public IP 上,任何人都可以连接它。

所以对称NAT下的主机可以向TURN服务器发送分配请求,TURN服务器会为主机分配一个端口。现在主机就会有对方的IP信息。它将向 TURN 发送另一个请求,指定其他主机的 IP 信息,来自分配端口中其他主机的数据包将被转发到对称 NAT 后面的主机。来自对称 NAT 后面的主机的数据包将被转发到另一台主机。这样他们就创建了一个中继连接。

您确实需要阅读 TURN 的 RFC 才能更详细地了解这一点。应有尽有。

@tahili 我看到这是一个旧的 post 但我想问你一个问题。 如果 Turn 服务器可以到达对等方的服务器自反地址,为什么客户端不能直接将包发送到对等方的自反地址。如果客户端由于映射问题而无法直接向对等方发送数据,那么轮流服务器如何向对等方服务器反射地址发送 udp。 请注意,您的对等方尚未联系转弯服务器 "relay address of the client",因此转弯服务器(客户端的中继地址)与对等方之间没有映射。 仅了解对等点的反身地址是不够的。毕竟我们可以直接向对端发送数据。

假设 peer 也在 NAT 后面。