我正在尝试一些 p2p 网络。在做了一些研究后,我了解到的最大障碍之一是“如果客户端位于 NAT/防火墙后面怎么办”,后来我发现了打孔,但它并不总是能保证工作。
据我了解,我不明白为什么它可能会失败,这是我迄今为止所知道的:
根据上图,这就是我理解如何建立成功连接的方式。
- Alice通过创建与目录服务器的连接来加入网络(1) 。发生这种情况时,Alice 的NAT 会创建一个从她的公共 ip 到她的本地 ip 的映射。
- 目录服务器接收连接并将Alice 的公开信息存储
ip:port
在目录中 - Bob也这样做(2),加入网络并
ip:port
在目录中发布他的 - Alice想与bob交流。所以她从目录中 查找Bob 的。 (3)
ip:port
- 爱丽丝发送她从服务器获得的关于鲍勃的数据。 (5)
ip:port
- 由于Bob也有一个从 is
ip:port
到他的 local的映射ip:port
,所以 NAT 只是将Bob 的public接收到的任何数据转发ip:port
到他的计算机。 - 同样适用于爱丽丝
我希望我在解释我的理解时很清楚。我的问题是,这有什么难的或不可靠的?我一定显然错过了一些东西。你能解释一下它是什么吗?