Nat Punchthrough理解P2P概念

时间:2017-04-03 10:12:30

标签: port p2p nat hole-punching nat-traversal

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

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

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

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

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

如果有人有更多关于此的文件,请告诉我。

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

1 个答案:

答案 0 :(得分:2)

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

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

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

所以现在聪明一点回答你的问题。两个系统都希望直接连接,开始尝试与另一个进行通信。他们尝试连接到辅助器检测到的已知端口号周围的一系列端口。这是猜测。

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

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