NAT穿透理解:P2P概念

7
因此,我一直在研究NAT-Punchthrough。我似乎有了想法,但我很难实现它,感觉我在这里缺少一步。 测试这个功能有点难,因为我在基于互联网的连接方面的环境控制很少。
我有一个SQL服务器可以作为我的“协调器”,它保留了服务端和客户端的外部地址及其端口。
到目前为止,以下是步骤: - 我通过Web请求(PHP脚本)连接到我的SQL服务器,该请求存储服务器/客户端IP/PORT - 当两者都已知时,客户端和服务器尝试连接(服务器在设定端口上托管,客户端通过设定端口连接) - 没有发生重大事件
这里有2个未知数,我想与你检查其中之一。 是否真的需要使用我计划在之后的步骤中使用的确切(内部/LAN)端口来执行第一步NAT-Punchthrough?
如果是这样,我不知道我的服务器在水下如何工作,所以它可能需要更多的端口比我最初给出的静态端口来连接,但那至少给了我一个提示。
如果有人对此有更多文档,请告诉我。
来源:
编写P2P应用程序
http://www.mindcontrol.org/~hplus/nat-punch.html
1个回答

8
NAT穿透的工作原理基于有根据的猜测。通常用于与使用IP伪装技术的设备建立连接。这是大多数家庭互联网调制解调器使用的技术,以至于NAT已经可以互换地用来指代IP伪装。
当您从一个位于NAT系统后面的设备(如家庭调制解调器)连接时,无法控制用于与Internet进行出站连接的端口。然而,许多这些设备使用特定模式分配端口。例如,增量数字。
NAT穿透涉及尝试直接连接两个源系统,这两个系统都位于独立的NAT设备后面。第三个系统,即“促成者”,充当检测器,检测正在被两个NAT设备分配到的出站连接的源端口号。然后将源端口号和IP地址发送给其他各方。
现在,聪明的部分回答您的问题。希望直接连接的两个系统都开始尝试相互通信。他们尝试连接一系列端口,围绕着促成者检测到的已知端口号。这就是猜测。
重要的是,两个源系统都开始尝试连接,这将在本地设备中建立允许Internet流量进入的NAT会话。如果任何一个源设备正确猜测到其中一个NAT会话端口号,则建立连接。
实际上,有用于NAT穿透的组织的工程师可能已经花费了一些时间来检查更流行的NAT端口分配算法并调整其软件。如果您可以控制通过NAT设备的连接,则很容易设置一些测试,并查看端口号在连接到不同服务器时如何更改。

长话短说,认为我们可以从仅有1个端口或线性增量开始制作自己的NAT穿透是天真的,因此我们应该找到一个服务来代替我们完成这一点“魔法”吗? - Smileynator
你可以尝试一下,但是这项先前的研究表明,如果有一定技巧,成功率可能会达到60%左右。如果你尝试并得到了任何结果——那么对于其他人来说,了解你的行动将是很好的反馈。 - Steve E.
1
由于我们需要至少达到90%的通过率,才能在生产环境中进行测试,所以我们将放弃这一方案。有一些可以提供 NAT-Punchtrough 的服务。然而据我所知,它们都会做一些像套接字的工作,因此你需要运行一个 Linux 服务器来完成这个任务。它们声称可以达到约90%的成功率。如果您想要100%的可靠性,那么您需要使用一个类似Photon Networking的中继服务器。这通常会变得非常昂贵,特别是在我们发送大量数据时。对于一个小团队来说实现这个目标太难了! # 延迟 - Smileynator

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接