2017-04-03 146 views
1

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

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

下面是步骤至今: - 我通过存储服务器/客户端的IP/PORT web请求(PHP脚本)连接到我的SQL服务器 - 当两个是已知的,客户端和服务器尝试连接(服务器主机在一个设置的端口上,客户端通过设置的端口连接) - 没有发生重大事件

这里有2个未知数,我想检查一个与你。 NAT-Punchthrough是否确实需要我在第一步中准备与我在此之后的步骤中连接的确切(内部/ LAN)端口?

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

如果有人有关于此的更多文档,请让我知道。

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

回答

1

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

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

NAT打穿涉及尝试直接连接是两个独立的背后NAT设备两个源系统。第三个系统,您的“协调者”充当出站连接上两个NAT设备当前分配的始发端口号的检测器。然后将源端口号和IP地址发送给其他各方。

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

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

在现实中,工程师从具有对NAT组织打穿可能已经花了一些时间研究比较流行的NAT端口分配算法和调整他们的软件。如果您通过NAT设备控制连接,那么设置一些测试并查看连接到不同服务器的端口号如何改变将非常简单。

+0

所以,长话短说。认为我们可以从1端口或线性增量进行自己的NAT-Punch实现是天真的,因此应该找到一种服务为我们做点“魔术”来代替? – Smileynator

+0

没有理由不能尝试,但[此前的研究](http://www.brynosaurus.com/pub/net/p2pnat/)表明,在某些技巧下,成功率可能在60%左右。如果你确实尝试并得到任何结果 - 那么对于其他人知道你做了什么,这将是很好的反馈。 –

+1

由于我们需要能够达到90%,至少要通过它在生产中,我们将退出此。有些服务可以为您提供NAT-Punchtrough。然而据我所知,他们都会做一些类似插座的东西,所以你被困在运行linux serverto的时候为你做这个魔术。他们获得了90%的成功。如果你想要100%的可靠性,你会被卡住,使用一个RELAY服务器,这就像Photon Networking。这通常会变得很昂贵,特别是在我们想要发送的数据负载的情况下。在一个小团队中取得胜利实在太难了! #延迟 – Smileynator