我正在尝试制作一个 P2P 程序,需要帮助来穿越客户端的 NAT。我很好奇:
UPnP 需要路由器中的软件支持。即使路由器有它,有时也会出于安全考虑而将其关闭。
STUN 使用简单的公共服务器来检测 NAT 的存在和真实 IP 地址。这对于其他执行有用工作的更高级别协议很有用。
打孔是一种连接两台计算机的简单技术。它需要第三台公共计算机才能在 NAT 后面的 2 台计算机之间进行通信。您可以使用自定义协议运行自己的服务器,您可以使用 STUN 和现有的 STUN 服务器。 (仅需要几个数据包进行设置,其余的都是点对点的)。
当然,有些NAT防火墙与上述不兼容,因此您可能需要自定义协议。 Bittorrent 就是这样做的:他们根据哪些客户端位于防火墙后面等使用不同的技术。