当前位置: 首页 > 知识库问答 >
问题:

p2p打孔有什么难的?

吕霖
2023-03-14

我正在尝试一些p2p网络。在做了一些研究后,我学到的最大的障碍之一是“如果客户端在NAT/防火墙后面怎么办”,后来我发现了穿孔,但它并不总是能保证工作。

就我所知,我不明白它为什么会失败,这是我目前所知道的:

  1. Alice通过创建到目录服务器的连接来加入网络(1)。当发生这种情况时,Alice的NAT将创建一个从其公共ip到本地ip的映射。
  2. 目录服务器接收连接并将Alice的公共ip:port存储在目录
  3. Bob执行同样的操作(2),加入网络并在目录
  4. 中发布他的 ip:port
  5. 爱丽丝想和鲍勃交流。所以她从目录中查找Bob的ip:port。(3)
  6. Alice通过Bob的ip:port发送数据,这是她从服务器获得的。(5)
  7. 由于Bob还有一个从isip:port到其本地ip:port的映射,NAT只需将在Bob的公共ip:port上接收到的任何数据转发到其计算机。
  8. 爱丽丝也一样
    我希望我解释清楚了我所理解的内容。我的问题是,这有什么这么难或不靠谱的?我肯定很明显错过了什么。你能解释一下是什么吗?

共有1个答案

陆城
2023-03-14

一个问题是,Alice的NAT服务器中的NAT映射会超时,或者在固定时间之后,或者在一段时间不活动之后。

第二个潜在问题是,NAT服务器可能会限制Alice的NAT映射仅对Alice建立的TCP连接或Alice与所连接的初始IP“SHE”之间的连接“良好”。(换句话说,爱丽丝和鲍勃之间的直接交流可能会被阻断。)

等等。

不。这只是意味着它不会一直奏效。

 类似资料:
  • 我对NAT表的理解是 NAT表仅映射(专用IP:端口)->(公用IP:端口) 它不关心协议或套接字连接 主机A关闭套接字并在同一本地端口(100)上打开新监听套接字 但这没用!我发现了其他复杂的实现,但我很好奇这种方式有什么问题。

  • 我正在尝试在Delphi中做TCP打孔。我只有一个端口打开-10000(用于测试目的)。 下面是我的代码片段(完整源代码): 之后,我尝试连接到客户端的内部端口,但我得到错误“连接超时”。 我认为问题是远程客户端找不到要连接的服务器,因为客户端已经与重定向服务器建立了连接。

  • 我正在研究TCP打孔技术,从这篇文章中得到了一些知识:TCP_HOLE_PUNCHING。但我不明白下面的部分: 这里有几个问题,谁能帮忙解释一下吗?如有任何帮助或建议,我们将不胜感激!! 假设我们有一个客户端应用程序运行在NAT1后面,一个服务器应用程序运行在NAT2后面。他们将有消息传递和文件传输通信。模式将是服务器监听并接受来自客户端的连接。他们需要使用TCP打孔来保持TCP连接工作吗? Q

  • 我目前正在C中使用“打孔”方法实现一个(UDP)p2p应用程序。我发现了J.Selbie以前的文章,他解释了基本原理,并相应地进行了操作(post1,post2),但可能我遗漏了一些东西,只有一个对等体接收到数据,而另一个没有。 以下是我正在采取的步骤: > 设置:其中一个对等体连接到4G蜂窝加密狗(NAT a),另一个连接到通往ISP提供商(NAT B)的路由器。这些是针对两个NAT的stunc

  • 我已经尝试TCP打孔一段时间了,论坛似乎对基于TCP的方法和C编程语言没有多大帮助。主要参考文献如下, 我的设置是 客户端A--NAT-A--Internet--NAT-B--Client B。 假设客户机A知道B的公共endpoint和私有endpoint,而B知道A的endpoint(我已经编写了一个服务器'S',用于在对等点之间交换endpoint信息),并且两个NAT都不对称,如果两个客户