首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python P2P网络(NAT Punchtrough)

Python P2P网络(NAT Punchtrough)
EN

Stack Overflow用户
提问于 2014-03-14 13:10:13
回答 3查看 3.4K关注 0票数 3

因此,为了便于理解,我们假设两台计算机都在ipv4上并在NAT网络之后。我希望能够在两台机器上打开一个套接字,并让机器通过这些套接字(或类似的系统)进行连接。我知道这需要nat穿透,但我不确定nat穿透如何应用(曾经连接的套接字现在可以接受吗?)任何在python中使用过nat punchthrough的人,我都会非常感谢你的帮助。

EN

回答 3

Stack Overflow用户

发布于 2018-10-09 02:18:17

这就是所谓的"NAT穿越问题“

有三种解决方案

  1. 将NAT静态配置为在给定端口将传入连接请求转发到您的服务器。它也称为端口forwarding

  1. Internet网关设备(IGD)协议。允许NATed主机执行以下操作:

NAT路由器的-learn公共IP地址

-添加/删除端口映射(带有租用时间)

即自动执行静态NAT端口映射configuration

  1. Relaying (在Skype中使用)

-NATed客户端建立到中继/服务器的连接

-external客户端连接到中继

-relay将数据包桥接到connections

有关更多信息,请参阅Computer Networking A Top-Down Approach第6版-James F. Kurose,Keith W. Ross章节4>>Network地址转换(NAT)

票数 3
EN

Stack Overflow用户

发布于 2014-03-14 13:29:56

the Wikipedia entry中很好地描述了打孔

打洞是一种计算机网络技术,用于在位于受限防火墙后面的不同组织中的两方之间建立通信。用于在线游戏、P2P和VoIP等应用程序,这两个客户端都与不受限制的第三方服务器建立连接,该服务器为它们揭示外部和内部地址信息。由于每个客户端都向服务器发出请求,因此服务器知道为该会话分配的IP地址和端口号,它们彼此共享。具有有效端口号会导致防火墙接受来自每一端的传入数据包。ICMP穿孔、UDP穿孔和TCP穿孔分别使用Internet控制报文、用户数据报和传输控制协议。通过使用TCP恶意打孔,可以将压缩的SYN数据包发送到公共ACK路径中。

这里有TCP、UDP和ICMP保留冲压的各种技术的链接。

通常,要从A到B(都在NAT之后)打孔,需要第三方服务器C,它们最初都可以连接到该服务器。服务器将A的连接信息发送到B,反之亦然。然后,A&B使用此信息尝试彼此直接连接,但该过程不是100%可靠的。

如果你没有第三方服务器,那么我认为它不会工作。

编辑

您可能还想了解一下UPnP http://en.wikipedia.org/wiki/Universal_Plug_and_Play#NAT_traversal。我不确定路由器对它的支持有多好,但它听起来很适合您的应用程序。

票数 2
EN

Stack Overflow用户

发布于 2014-03-14 13:18:00

这听起来像是您需要设置端口转发--本质上是告诉您的路由器将它在特定端口上收到的呼叫转发到位于它后面的服务。

这通常是通过路由器的管理界面完成的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22396635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档