Nat Punchthrough 理解 P2P 概念

Smi*_*tor 6 port p2p nat nat-traversal hole-punching

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

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

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

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

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

如果有人对此有更多文档,请告诉我。

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

Ste*_* E. 7

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

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

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

所以现在聪明的一点来回答你的问题。想要直接连接的两个系统都开始尝试与另一个系统通信。他们尝试连接到一系列端口,围绕协调器检测到的已知端口号。这是猜测。

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

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