【发布时间】:2017-03-25 18:34:28
【问题描述】:
有没有什么方法可以在没有中间服务器的情况下通过 TCP 或 UDP 建立真正的 P2P 通信?我知道,如果两台计算机只有公共 IP 地址,这是非常可行的,但如果它们位于任何类型的 NAT 路由器或专用网络后面,它就会开始变得棘手.. 事实上,我越研究它似乎越多根本不可能。我发现了 STUN、TURN 和 ICE 协议以及打孔,但据我了解,它们都需要某种服务器来至少建立连接。我很惊讶看似如此简单的事情似乎很难做到,我错过了什么吗? 理想情况下,我正在寻找使用 Golang 的解决方案,任何 C++ 中的帮助或示例也会很有用,谢谢。
【问题讨论】:
-
if they are behind any sort of router主要问题是 NAT,而这又是因为 IPv4 中缺少地址。如果没有 NAT,它会很简单,是的。不,如果没有第三台主机,这是不可行的(在 IPv4 中)。一端必须开始连接,而另一台路由器无法知道它后面的哪个主机是目标。 -
你看过libp2p吗?
-
@ChristopherWaldon 看起来很有趣,但仍然是 WIP 并且似乎没有提供任何 ICE 不提供的功能,即,如果其他连接类型不可行,仍然依赖服务器中继。不过还是谢谢。
-
要建立 P2P 连接需要交换 IP 地址和端口。因此,至少需要一些服务来获取这些 IP 地址和端口。否则你会怎么做?我之前回答过这个问题here,并简要介绍了如何进行 ICE。