我正在尝试进行一些p2p网络的实验。在做了一些研究后,我发现最大的障碍之一是"如果客户端在NAT/防火墙后面怎么办",后来我发现了关于Hole Punching的知识,但它并不总是能保证成功。
就我所理解的而言,我不明白为什么它可能会失败,这是我目前所知道的:
![enter image description here](https://istack.dev59.com/MlnEe.webp)
根据上图,这是我理解如何建立一个成功连接的方式。
- Alice通过与目录服务器创建连接,加入了网络(1)。当这发生时,Alice的NAT会创建从她的公共IP到她的本地IP的映射。
- 目录服务器接收到连接并将Alice的公共
ip:port
存储在目录中。 - Bob也是同样的操作 (2),加入网络并将
ip:port
发布到目录中。 - Alice想要和Bob通信。因此,她从目录中查找Bob的
ip:port
(3) - Alice通过服务器获取的Bob的
ip:port
发送数据。 (5) - 由于Bob也将自己的
ip:port
映射到本地ip:port
,因此NAT只需将在Bob的公共ip:port
上收到的任何数据转发到他的计算机。 - 对于Alice同样适用。
我希望我的解释清楚了我理解的内容。我的问题是,为什么这个过程会很困难或不可靠?我肯定漏掉了什么重要的东西。你能向我解释一下吗?