我需要在服务器和客户端之间建立连接,它们都可以位于任何类型的 NAT 之后。为此,我在 Internet 上有一个专用主机,其 IP 干净,用于托管 STUN/TURN 服务器。我不会使用 WebRTC,我只想使用 STUN/TURN 服务器在客户端和服务器之间进行消息传递。在阅读了 RFC、SO 等之后,我还有一些不清楚的问题:
- 在什么情况下使用 STUN?据我了解,STUN 仅用于全锥 NAT。在所有其他情况下,由于主机和/或端口限制,必须使用 TURN 服务器。那是对的吗?
- 看来我需要一个信令服务器来通知客户端服务器地址,反之亦然。但是一旦客户端/服务器向信令服务器发送消息,我就知道他们的外部主机:端口,所以我让每一方都知道对方的主机:端口,每一方都可以向这个信令服务器发送包含对等方的主机:端口数据的消息,信令服务器可以使用它来检测此消息是针对哪个对等点并将其转发给相应的对等点。乍一看,这个逻辑在我看来非常简单,我的信令服务器变成了一个 TURN 服务器——这就是 TURN 服务器的实现方式吗?但如果是这样,我不明白,为什么我需要像“coturn”、“reTurn”等这样的 TURN 服务器?我知道他们实现了 ICE,但是如果我的信令服务器从具体主机接收到消息:对等方的端口,这个 ICE 将如何工作,
- 在受限 NAT(端口、地址或对称)的情况下,客户端外部(公共)端口在路由器上打开多长时间以接收 UDP 数据报?我读到 TURN 客户端向服务器发送刷新消息以保持通道打开,这是客户端如何防止端口关闭的方式吗?