6

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

我有一个 SQL 服务器作为我的“促进者”运行,它保存服务器和客户端的外部地址,以及外部看到的它们的端口。

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

这里有两个未知数,我想和你一起检查一个。NAT-Punchthrough 是否确实要求我使用我计划在之后的步骤中连接的确切(内部/LAN)端口执行第一步?

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

如果有人有更多关于这方面的文件然后我,请告诉我。

资料来源:
编程 P2P 应用程序
http://www.mindcontrol.org/~hplus/nat-punch.html

4

1 回答 1

8

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

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

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

所以现在聪明地回答你的问题。想要直接连接的两个系统都开始尝试与另一个系统通信。他们尝试连接到服务商检测到的已知端口号周围的一系列端口。这是猜测。

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

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

于 2017-04-03T10:40:08.967 回答