我对 TURN 很陌生,我想创建一个需要 TURN 服务器进行 udp 通信的实验性应用程序。
我已经使用过 UDP 打孔,并且我对这个主题很熟悉。我也知道 NAT 类型和 UPnP 用于端口映射。
要使用没有 UPnP 功能的路由器解决对称和端口受限 NAT 中的端口映射,我必须与 TURN 服务器通信并通过它发送 UDP 数据包。但我不知道如何与 TURN 服务器通信以及如何使用它C# programming.
如果您能指出正确的方向并给我一些指示,我将不胜感激。
谢谢。
@tahili 我看到这是一篇旧帖子,但我想问你一个问题。如果 Turn 服务器可以到达对等方的服务器自反地址,为什么客户端不能直接将包发送到对等方的自反地址。如果客户端由于映射问题而无法直接向对等方发送数据,那么转服务器如何向对等方服务器自反地址发送 udp。请注意,对等方尚未联系转服务器“客户端的中继地址”,因此转服务器(客户端的中继地址)与对等方之间没有映射。仅知道对等方的反身地址是不够的。毕竟我们可以直接向对等方发送数据。
假设对等点也在 NAT 后面。
我可以回答如何使用 TURN 完成中继呼叫。但是要知道如何为 TURN 形成消息,您需要阅读 RFC。
转的工作原理
TURN 是必需的,因为它不可能绕过某些 NAT 过滤并与主机建立直接连接。由于 TURN 位于公共 IP 上,因此任何人都可以连接到它。
所以对称NAT下的主机可以向TURN服务器发送分配请求,TURN服务器会为主机分配一个端口。现在主机将拥有对方的IP信息。它会向 TURN 发送另一个请求,指定其他主机的 IP 信息,并且来自分配端口中的其他主机的数据包将被转发到对称 NAT 后面的主机。来自对称 NAT 后面的主机的数据包将被转发到另一台主机。这样他们就创建了一个中继连接。
您确实需要阅读 RFC for TURN 才能更详细地了解这一点。你需要的一切都在那里。