完全去中心化的P2P?

22

我正在考虑创建一个P2P系统。在初始研究中,我正在阅读《点对点——利用颠覆性技术的力量》一书。该书指出,“在今天的互联网上,完全去中心化的即时通讯方法是行不通的。”主要是因为防火墙和NAT。该书的版权年份为2001年。这些信息现在是否仍然正确?


3
你同意哪个答案,取决于你如何定义成功的解决方案。 - Brian
谢谢大家。看来我需要更多地研究UPNP、Tribler和Skype。我还在http://openp2p.com/上找到了另一个资源。我也会仔细研究“覆盖网络”,看看它们是否有一些潜力。诚挚地,Stephen - BrownFox97
你一定要更加关注这个答案http://stackoverflow.com/a/25863581/525578,因为RetroShare已经是一个可行的解决方案。它可以在任何地方工作。但目前可能存在一些安全问题,请参考http://specialmeaning.blogspot.com/2016/09/retroshare-scandal-of-free-communication.html。 - Sergei Krivonos
6个回答

10

这仍然是大体正确的。大多数用户仍然在防火墙或家庭路由器后面,这些设备会阻止传入连接。现在可以更容易地打开它们(例如使用uPnP),需要很少的用户交互和知识,但大多数商业终端用户应用程序 - 电话(Skype,VoIP),聊天(各种Messenger),远程控制 - 都是为了规避防火墙问题而采用中心化解决方案。


1
当你使用Skype进行通话时,它会通过P2P传输。 - Andrey
3
连接是通过一个中心服务器建立的,这就是这个问题的核心。 - Pekka
这是我没有理解的关键点。如果是P2P,那么“通过中央服务器建立”是什么意思? - Andrey
1
@Andrey,请阅读Chris Lively在他的回答中评论中的链接,它很好地解释了如何在两个防火墙之间打洞。 - Pekka
是的,使用第三方(任何第三方)可以进行双向端口转发连接。唯一真正的点对点是使用uPnp而没有节点,只有在已知网站中的链接。就像一个带有对等描述符的pastebin :D - m3nda
显示剩余2条评论

6
我认为现在和过去都是不正确的。 是的,你将有许多被防火墙保护的节点,但你也将有相当数量的未受防护的节点。 因此,如果使用端到端加密来保护流量免受窥探,那么您可以使用非防火墙客户端作为两个想要聊天的防火墙客户端之间的中介。
然而,您需要注意分散负载,以便少数未经防火墙保护的客户端不会承受太大的负载。
Skype使用类似的想法。 他们甚至允许通过中介进行文件传输,尽管他们限制了吞吐量以避免给中间人带来过多的负担。
话虽如此,现在在2010年,穿过防火墙变得比2001年容易得多,因为大多数路由器都允许您通过UPNP自动打开端口,因此您将有更大的未经防火墙保护的客户端池可供使用。

1
@Aaron Skype通过中央服务器建立连接。在全球范围内,特别是在企业防火墙后面,仍有相当数量的客户端电脑无法进行打洞操作。 - Pekka
2
几乎。Skype不通过中央服务器建立用户之间的连接。中央服务器仅用于对Skype网络进行身份验证和引导客户端(提供一些客户端供其连接)。他们可能还会将其用于目录服务,很可能也用于Skype-Out和语音邮件,但这超出了问题的范围。但是用户之间的通话肯定是通过P2P协商的。 - Aaron
2
据我所知,eMule的Kad网络至少是这样工作的。防火墙客户端的控制流量由非防火墙的“伙伴”转发。不过,关于这方面的文档似乎有点稀少,或者至少有些难以找到。 - DataWraith

3
我认为原始陈述不再正确。但是去中心化计算领域仍处于萌芽阶段,几乎没有真正的竞争者。
阅读这篇有趣的文章关于ZeroTier(感谢@joehand):NAT穿透的状态

NAT是可穿越的

在阅读有关此主题的互联网聊天时,我对许多人实际上并不了解这一点感到震惊,因此撰写了这篇文章。许多人认为NAT是对点对点通信的绊脚石,但事实并非如此。超过90%的NAT是可以穿越的,并且大多数都可以以可靠和确定的方式穿越。

归根结底,为了提供可靠的服务,点对点网络上的所有流量中有4%(我们的数字)至8%(Google提供的旧数字)必须被中继。为这么少的数量提供中继相当廉价,从而使得始终可用的可靠和可扩展的P2P网络成为可能。


我个人了解Dat Project,这是一个基于hypercore协议的去中心化数据共享工具包,用于P2P流媒体。根据他们的Dat - Distributed Dataset Synchronization And Versioning论文,发现阶段后,Dat应该有一份潜在数据源列表来尝试联系。Dat使用TCP、UTP或HTTP。UTP旨在不占用网络上所有可用带宽(例如,以便其他共享wifi的人仍然可以使用互联网),并且仍然基于UDP,因此与UDP打洞等NAT穿透技术兼容。HTTP支持与静态文件服务器和Web浏览器客户端的兼容性。请注意,这些是我们在参考Dat实现中支持的协议,但Dat协议本身是传输无关的。此外,您还可以将其与Bittorrent DHT一起使用。该论文还包含了一些启发Dat的其他技术的参考资料。

有关节点发现的实现,请参见:discovery-channel


还有IPFS,或者说'The Interplanetary File System',目前最有可能成为标准。

他们在使用DHT和NAT遍历方面有广泛的文档,以实现分散式P2P。


3

防火墙和NAT仍然常常会干扰家庭PC之间(以及家庭PC和企业桌面之间)的直接点对点通信。

它们可以被配置为允许特定的点对点协议,但这仍然是大多数不熟练用户的障碍。


0

-1

这是非常古老且不正确的。我相信现在有一个名为Tribler(新闻文章)的产品,可以使BitTorrent以完全分散的方式运行。

如果你想回到几年前(甚至是在那份文件之前),你可以看看Windows。Windows网络曾经以完全分散的方式运作。在某些情况下,它仍然如此。

UPNP也是以分散的方式确定本地网络上可用的设备。

为了实现分散,您需要有一种定位其他对等方的方法。这可以通过主动扫描网络(耗时)或通过某些客户端宣布其可用的手段来完成。

这些公告可以是简单的UDP数据包,每隔一段时间广播到子网中,其他对等方会监听。另一种机制是广播到IIRC频道(最常用于控制僵尸网络的命令和控制),等等。您甚至可以使用Twitter或类似的服务。在这里发挥您的想象力。

防火墙并不起到很大的作用,因为它们几乎总是会保留一些端口开放,例如80(http)。显然,如果该端口关闭,您将无法浏览网络。现在,如果防火墙被配置为仅允许来自内部客户端发起的连接,则您需要做更多的工作。但也不是很多。

NAT也不涉及类似的问题。


@Chris 防火墙确实起到了一定的作用 - 无论是在80端口还是其他端口,主动建立与标准路由器或防火墙后面的PC的连接仍然是不可能的。这就是为什么每个主要的通信服务都使用一个集中式的中间人,双方都主动连接到该中间人的原因。 - Pekka
@Pekka:如果双方都有防火墙,那么确实需要使用中介。这就是我说它们不再起作用,并且您需要多做一些工作的原因。顺便说一下,Skype在如何解释所有这些内容方面有很好的文章:http://www.skype.com/help/guides/p2pexplained/。 - NotMe
我知道链接的内容。在我的看法中,需要一个中间人是分散式消息服务面临的难题,这也是OP所问的。时至2010年,你仍然无法可靠地建立与另一台计算机的直接P2P连接。你可以使用中介的列表来建立连接,就像Skype一样,但是你又有了一个集中式基础架构,对不对?无论如何,我承认可以使用“中介群”来建立连接,从而构建出可行的P2P解决方案。 - Pekka
@Pekka:从那个角度来看,你是正确的,“真正”的点对点网络在全球互联网上无法运行。我想我更多地是从“我个人不必提供中介”的角度来考虑它。只有一个中介使得监视所有通信变得微不足道,而将中介分散到多个外部主机上是完全可行的,并且可以巧妙地避开这个问题。 - NotMe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接