Nat Punchthrough 理解 P2P 概念

Nat Punchthrough understanding P2P concept

所以,我一直在阅读 NAT-Punchthrough。我似乎明白了这个想法,但我很难实施它,而且我觉得我在这里错过了一步。 测试此功能有点困难,因为当涉及到基于 Internet 的连接时,我几乎无法控制环境。

我有一个 SQL 服务器到 运行 作为我的 "facilitator" 它保留了服务器和客户端的外部地址,以及外部看到的它们的端口。

到目前为止的步骤如下: - 我通过存储 server/client IP/PORT 的 Web 请求(PHP 脚本)连接到我的 SQL 服务器 - 当两者都已知时,客户端和服务器都尝试连接(服务器主机在设置的端口上,客户端通过设置的端口连接) - 没有什么重要的事情发生

这里有2个未知数,我想和你核实一个。 NAT-Punchthrough 是否真的要求我在第一步中使用我计划在之后的步骤中连接的确切 (internal/LAN) 端口?

如果是这样,我不知道我的服务器在水下究竟是如何工作的,所以它可能需要比我最初给定的静态端口更多的端口来连接,但这至少给了我一个提示。

如果有人比我有更多这方面的文档,请告诉我。

来源:
Programming P2P application
http://www.mindcontrol.org/~hplus/nat-punch.html

NAT 穿透基于有根据的猜测原则。它通常用于创建与执行 IP 伪装的设备的连接。这是大多数家庭互联网调制解调器中使用的技术,以至于 NAT 已可互换地用于指代 IP 伪装。

当您从位于 NAT 系统后面的设备(如家用调制解调器)连接时。您无法控制将用于出站连接到 Internet 的端口。然而,许多这些设备使用特定模式分配端口。例如,递增数字。

NAT 穿透涉及尝试直接连接两个位于独立 NAT 设备后面的源系统。第三个系统,您的 "facilitator" 充当检测器,用于检测两个 NAT 设备当前在出站连接上分配的原始端口号。然后将原始端口号与 IP 地址一起发送给其他方。

那么现在就来回答你的问题吧。两个想要直接连接的系统都开始尝试与对方通信。他们尝试连接到一系列端口,围绕服务商检测到的已知端口号。这是猜测。

重要的是两个源系统都开始尝试连接,因为这将在允许来自 Internet 的流量进入的本地设备中建立 NAT 会话。如果任一源设备正确猜测了其中一个 NAT 会话端口号,则已建立连接。

实际上,使用 NAT 穿透的组织的工程师可能已经花了一些时间研究更流行的 NAT 端口分配算法并调整他们的软件。如果您可以通过 NAT 设备控制连接,那么设置一些测试并查看端口号在与不同服务器的连接之间如何变化将相当容易。