我正在考虑创建一个P2P系统。在初始研究中,我正在阅读《点对点——利用颠覆性技术的力量》一书。该书指出,“在今天的互联网上,完全去中心化的即时通讯方法是行不通的。”主要是因为防火墙和NAT。该书的版权年份为2001年。这些信息现在是否仍然正确?
我正在考虑创建一个P2P系统。在初始研究中,我正在阅读《点对点——利用颠覆性技术的力量》一书。该书指出,“在今天的互联网上,完全去中心化的即时通讯方法是行不通的。”主要是因为防火墙和NAT。该书的版权年份为2001年。这些信息现在是否仍然正确?
这仍然是大体正确的。大多数用户仍然在防火墙或家庭路由器后面,这些设备会阻止传入连接。现在可以更容易地打开它们(例如使用uPnP),需要很少的用户交互和知识,但大多数商业终端用户应用程序 - 电话(Skype,VoIP),聊天(各种Messenger),远程控制 - 都是为了规避防火墙问题而采用中心化解决方案。
NAT是可穿越的
在阅读有关此主题的互联网聊天时,我对许多人实际上并不了解这一点感到震惊,因此撰写了这篇文章。许多人认为NAT是对点对点通信的绊脚石,但事实并非如此。超过90%的NAT是可以穿越的,并且大多数都可以以可靠和确定的方式穿越。
归根结底,为了提供可靠的服务,点对点网络上的所有流量中有4%(我们的数字)至8%(Google提供的旧数字)必须被中继。为这么少的数量提供中继相当廉价,从而使得始终可用的可靠和可扩展的P2P网络成为可能。
有关节点发现的实现,请参见:discovery-channel
还有IPFS,或者说'The Interplanetary File System',目前最有可能成为标准。
他们在使用DHT和NAT遍历方面有广泛的文档,以实现分散式P2P。
防火墙和NAT仍然常常会干扰家庭PC之间(以及家庭PC和企业桌面之间)的直接点对点通信。
它们可以被配置为允许特定的点对点协议,但这仍然是大多数不熟练用户的障碍。
Session Messenger似乎通过使用激励混合网络来中继和存储消息解决了真正分散的p2p Messenger的问题。它是Signal Messenger的一个分支,添加了混合网络。https://getsession.org -- 白皮书:https://getsession.org/wp-content/uploads/2020/02/Session-Whitepaper.pdf
这是非常古老且不正确的。我相信现在有一个名为Tribler(新闻文章)的产品,可以使BitTorrent以完全分散的方式运行。
如果你想回到几年前(甚至是在那份文件之前),你可以看看Windows。Windows网络曾经以完全分散的方式运作。在某些情况下,它仍然如此。
UPNP也是以分散的方式确定本地网络上可用的设备。
为了实现分散,您需要有一种定位其他对等方的方法。这可以通过主动扫描网络(耗时)或通过某些客户端宣布其可用的手段来完成。
这些公告可以是简单的UDP数据包,每隔一段时间广播到子网中,其他对等方会监听。另一种机制是广播到IIRC频道(最常用于控制僵尸网络的命令和控制),等等。您甚至可以使用Twitter或类似的服务。在这里发挥您的想象力。
防火墙并不起到很大的作用,因为它们几乎总是会保留一些端口开放,例如80(http)。显然,如果该端口关闭,您将无法浏览网络。现在,如果防火墙被配置为仅允许来自内部客户端发起的连接,则您需要做更多的工作。但也不是很多。
NAT也不涉及类似的问题。