【发布时间】:2014-06-04 07:14:48
【问题描述】:
我正在尝试一些 p2p 网络。在做一些研究后,我了解到的最大障碍之一是“如果客户端位于 NAT/防火墙后面怎么办”,后来我发现了打孔,但它并不总是能保证工作。
据我了解,我不明白为什么它可能会失败,这是我目前所知道的:
根据上图,这就是我理解如何建立成功连接的方式。
- 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 也有一个从 is
ip:port到他的本地ip:port的映射,因此 NAT 只会将在 Bob 的 publicip:port上接收到的任何数据转发给他的电脑。 - 同样适用于 Alice
我希望我在解释我的理解时很清楚。我的问题是,这有什么难的或不可靠的?我一定显然错过了一些东西。你能解释一下它是什么吗?
【问题讨论】:
标签: networking p2p hole-punching