什么是点对点网络?
点对点网络(peer-to-peer 或 P2P)又称对等网络,是去中心化、依靠用户群(peers)交换信息的互联网体系,它的作用在于,减低以往网路传输中的节点,以降低资料遗失的风险。
与有中心服务器的中央网络系统不同,对等网络的每个用户端既是一个节点,也有服务器的功能,任何一个节点无法直接找到其他节点,必须依靠其户群进行信息交流。
点对点网络的分类
根据中心化程度,点对点网络可以分为三大类:
一般型 P2P
- 节点同时作为客户端和服务器端。
- 没有中心服务器。
- 没有中心路由器。
比特币(Bitcoin)网络、BitTorrent 网络、eDonkey 网络(电驴,电骡,ed2k)均属于一般型 P2P,每一个节点均可以作为客户端和服务端,它没有一个中心,没有任何一个节点能够控制整个网络,每一个节点的功能和权限都是对等存在的。
特殊型 P2P
- 有一个中心服务器保存节点的信息并对请求这些信息的要求做出响应。
- 节点负责发布这些信息(因为中心服务器并不保存文件),让中心服务器知道它们想共享什么文件,让需要它的节点下载其可共享的资源。
- 路由终端使用地址,通过被一组索引引用来获取绝对地址
早期的 Napster 网络属于特殊型 P2P 网络,一群高性能的中央服务器保存着网络中所有活动对等计算机共享资源的目录信息。当需要查询某个文件时,对等机会向一台中央服务器发出文件查询请求。中央服务器进行相应的检索和查询后,会返回符合查询要求的对等机地址信息列表。查询发起对等机接收到应答后,会根据网络流量和延迟等信息进行选择,和合适的对等机建立连接,并开始文件传输。
混合型 P2P
- 同时含有一般型 P2P 和特殊型 P2P 的特点。
Skype 属于混合型 P2P 网络,用户信息和聊天信息存储在中心化服务器中,当用户直接进行文件传输时,Skype 客户端之间又可以发起直连,不通过服务器,允许客户端之间直接传递文件。
点对点网络发展史
1969 年 — ARPANET
ARPANET(Advanced Research Projects Agency Network,阿帕网),是美国国防高级研究计划局开发的世界上第一个运营的数据包交换网络,是全球互联网的鼻祖。
阿帕网的主机之间视彼此为对等的计算机节点,而非 C/S(Cilent-Server) 结构。
1979 年 — Usenet
1979年杜克大学的研究生汤姆·特拉斯科特与吉姆·埃利斯设计出来 Usenet,并于1980年发布。Usenet 包含众多新闻组,它是新闻组(异于传统,新闻指交流、信息)及其消息的网络集合,他就像早期的 reddit,是用户聚集的论坛。
Usenet 比万维网的诞生早了十年,被称为“穷人的阿帕网”。
当用户发布文章时,根据所分 Usenet 层级(新闻组)存储在服务器,它一开始仅在该用户使用的新闻服务器上可以浏览。 每个新闻服务器与其他服务器(“新闻源”)交换文章。这种方式就是 P2P 信息传输,文章从一个服务器复制到另一个服务器 ,最终可以传达到网络中的每个服务器,新闻组消息得以被分布式存储于全球大量的计算机中。每一台服务器都包涵所有的文章内容,服务器之间独立运行,同步文章。
从 90 年代开始,用户便不断上传体积庞大的非文本类内容(色情图片、软件等),自此开始 Usenet 的服务器在流量和存储空间上开始呈现爆炸趋势。AOL 于 2005 年停止使用 Usenet。2010年5月,早在30多年前就开始使用 Usenet 的杜克大学关闭了它的 Usenet 服务器,其理由是使用率低且成本不断上升。
1999 年 — Napster
Napster 是一种提供线上音乐服务的软体,最初由约翰·范宁、肖恩·范宁和西恩·帕克共同创立的档案共享服务。
用户可以免费下载Napster客户端,然后从别人那里下载MP3文件,同时自己也作为一台服务器,供别人下载。
Napster有一台中心服务器,向所有用户提供文件目录服务,客户想下载音乐时,需要先到这台中心服务器上查询哪些客户端拥有这首音乐,然后直连到那台机器下载。(上文所述特殊型 P2P 网络)
Napster 是第一个被广泛应用的点对点音乐共享服务,它极大幅度地影响了人们,特别是对于大学生使用互联网的方式。而它的出现,也使得音乐爱好者间共享MP3歌曲变得容易,却也因此招致了影音界对其大规模侵权行为的指责。尽管在法庭的责令下该服务已经终止,但它却为其他点对点文件共享程序 — — 如 Kazaa,Limewire 和 BearShare — — 的拓展铺好了路,且对这种方式的文件共享的控制,亦变得愈加困难。如今 Napster 以经营付费服务为主,而免费的 Napster 的流行和回响使其在电脑界和娱乐业里成为一个传奇的象征。
2000 年 — Gnutella
与半中心化网络的 Napster 不同,Gnutella 网络是完全分布式的。其最初的流行是源于 2001 年早期 Napster 由于法律纠纷而被关闭的威胁。不断增长的用户也使得该协议的最初版本暴露了不少缺陷。2001年早期,各种不同版本的协议(最初以专有闭源客户软件形式实现)使得 Gnutella 的扩展性得到了增强。与先前的协议将每一个用户节点都当作用户以及服务器不同,改进过的协议将某些用户当作”超节点”(ultrapeer),其为与之连接的所有用户路由搜索请求及回应。
2000 年 — Freenet
Freenet 是一个内容发布和沟通平台,专为抵御内容审查而设计。海盗湾、维基解密、丝绸之路等著名平台都是基于 Freenet 的。
P2P 本身的特性使其具有天然的抗审查特性,其平台的内容得以在节点中永久保存且不容易一次性删除或屏蔽所有节点,可以说 Freenet 的发布正式开启了暗网时代。
2001年 — Bittorrent
BitTorrent 协议(简称 BT,俗称比特洪流、BT 下载)是用在对等网络中文件分享的网络协议程序。
BitTorrent协议下载的特点是,下载的人越多,提供的带宽也越多,下载速度就越快。同时,拥有完整文件的用户也会越来越多,文件的“寿命”也就越长。
种子文件本质上是文本文件,包含 Tracker 信息和文件信息两部分。Tracker 信息主要是BT下载中需要用到的 Tracker 服务器的地址和针对 Tracker 服务器的设置,文件信息是根据对目标文件的计算生成的,计算结果根据 BitTorrent 协议内的 Bencode 规则进行编码。
后来 BitTorrent 引入了分布式哈希技术( DHT ),相比泛洪查询技术,DHT效率显著提升。DHT 全称为分布式哈希表(Distributed Hash Table),是一种分布式存储方法。在不需要服务器的情况下,每个客户端负责一个小范围的路由,并负责存储一小部分数据,从而实现整个 DHT 网络的寻址和存储。使用支持该技术的 BT 下载软件,用户无需连上 Tracker 就可以下载,因为软件会在DHT网络中寻找下载同一文件的其他用户并与之通讯,开始下载任务。这种技术好处十分明显,就是大大减轻了 Tracker 的负担(甚至不需要)。用户之间可以更快速创建通讯(特别是与 Tracker 连接不上的时候)。
2009 年 — Bitcoin
比特币(英语:Bitcoin,缩写:BTC)是一种基于去中心化,采用点对点网络与共识主动性,开放源代码,以区块链作为底层技术的加密货币,比特币由中本聪(网名,Satoshi Nakamoto)于 2008 年10月31日发表论文,2009 年 1 月 3 日,创世区块诞生。
比特币结合 P2P 对等网络技术和密码学原理,来维持发行系统的安全可靠性。与有中心服务器的中央网络系统不同,在 P2P 网络中无中心服务器,每个用户端既是一个节点,也有服务器的功能,任何一个节点都无法直接找到其他节点,必须依靠其户群进行信息交流。比特币使用以下 3 种机制,来解决初次运行时,查找其他节点的问题。
在默认情况下,运行比特币的用户端加入一个IRC聊天通道,并可以获知加入该通道的其他用户端的IP地址和端口。该通道的名称和IRC聊天服务器的名称被写在了比特币软件中。
一些“知名的”比特币节点也被编写在软件中,以防IRC聊天服务功能因故无法访问。
可以手动添加运行比特币的其他用户端的 IP 地址。
现在不需要运行上述 3 个机制,一旦连接到比特币的某个节点,在发送的信息中,就会包含对等网络 P2P 其他节点的地址,直接通过其匿名用户群来找到其他节点。节点遍布整个互联网的 P2P 技术和密码学原理相结合,确保了比特币发行系统无法被政府、组织、或黑客监控、隔离、或破坏,从而保障了系统的可靠性和匿名性。拒绝服务式(DDoS)以及其他攻击,其目标都是针对比特币交易中心,这和攻击或关闭传统货币交易所的网络,理论上不影响其货币发行和使用一样。
2012 年 — Diaspora
Diaspora 将自己定位为开源的个人 Web 服务器和去中心化的社交网络。2010 年在 Kickstarter 上筹资 $200,000 后,项目正式成立,并迅速发布了一个测试版本,到了2012年,稳定的社区版才算正式发布。Diaspora 的目标之一就是替代 Facebook。Facebook 是一个集中式的平台,用户使用它时,只需要一台 Web 浏览器即可,而Diaspora 是需要专门下载自己的程序客户端的,这也使得推广起来比较难。另外,有的人其实根本不关心集中式平台带来的隐私问题。
总结
自 1969 年以来的 50 多年时间里,P2P 网络由从昂贵走向廉价,由专用(音乐)逐渐走向通用(文件、网站),多元化程度也得以发展,虚拟货币、隐私网络、开放公共资源等等方向层出不穷,使用方式也开始进行通证激励式的探索。
但 P2P 网络仍非主流。近 20 年来网络基础设施的发展使得普通个人能够接入高速宽带网络,大型机房里每个虚拟主机甚至都可以通过万兆的带宽为用户提供服务,这催生了一系列新生代信息传播方式和娱乐途径。互联网人在产品模式上都探索空间大大增加,人们在尽情享受中心化服务带来的便捷与乐趣,去中心化和点对点的需求在 Web2.0 时代大力发展的背景下也显得不那么重要了。
但 P2P 技术本身并没有被抛弃,甚至还在幕后为互联网服务着。
Web2.0 大互联网时代的点对点
P2P CDN 边缘加速
CDN
内容分发网络(英语:Content Delivery Network 或Content Distribution Network,缩写:CDN)是指一种透过互联网互相连接的电脑网络系统,利用最靠近每位用户的服务器,更快、更可靠地将音乐、图片、视频、应用程序及其他文件发送给用户,来提供高性能、可扩展性及低成本的网络内容传递给用户。
例如某小型论坛网站只有一台服务器,其带宽为 10M,10M 的带宽完全可以为几百名在线的论坛用户同时提供数据传输服务。但论坛加入上传图片功能后,10M 的带宽就不堪重负了,每张图片几百 K 至几十 M 不等,90% 以上的带宽被用来传输图片,而这些图片本身是不会变化的,每个用户看到的都是相同的图片。用户加载速度也开始变慢了。此时 CDN 技术就来帮忙了,CDN 技术帮助网站主把图片存储在全世界各地的服务器上,加州的用户访问论坛时只从论坛服务器拿到帖子正文内容和其中的图片地址,而图片是从加州本地的某个服务器上传输到用户计算机的。类比法国的用户也可以从法国本地的服务器上拿到该图片。全世界的用户都在从距离自己最近的服务器加载图片,用户的加载速度变快了,论坛的服务器带宽负载也下降了。
边缘节点
上述例子中的存储和提供图片的「加州本地服务器」和「法国服务器」即被称作CDN 网络中的「边缘节点」。
边缘节点不仅能提供静态文件(图片、音乐、视频等不变的资源)服务,也能提供动态内容的服务。例如我们想要每一张图片加上防盗水印,水印内容为登录用户的用户名和 IP,这样可以标记来源,防止用户盗取图片发到其他网站,因此每个用户访问时看到的都是带有不同水印的图片。该服务也可以运行在边缘节点上,在边缘节点上写好加水印的代码,在用户访问时直接加好水印提供给用户。边缘节点提供动态计算服务的功能就叫做边缘计算。
P2P CDN 融合加速
当我们访问大型文件时,CDN 边缘节点的带宽可能也不足够用户使用,此时很多服务商开始提供 P2P CDN 融合加速服务。Youtube 等流媒体服务商就是使用此技术让用户能够无延迟播放高清视频的。
暗光纤(Dark Fiber)是指运营商在为城市铺设光纤的时候,倾向于多铺一些。比如它们预计这个楼未来也就用 1TB 的宽带,但会在地下铺 10TB 带宽容量的设备和光纤。因为光纤铺设的成本主要来自挖地挖墙埋线,就和你家装修走线一样,开一次墙只有多铺的道理。虽然 1TB 的带宽足够目前使用,但随着用户数量的增加、用户需求的增加、互联网服务的升级,运营商预计未来一段时间内可能会用到 10 TB 的带宽。就像十年前我们都在用 10M 的宽带,但是现在大多在用 100M 以上的宽带网络了。提前铺设好冗余带宽可以降低未来施工的费用。
而这部分暗光纤带宽在目前来说是闲置的。Google 在运营商手中购买了大量的暗光纤使用权和二次售卖权。他们把这些暗光纤的带宽用来加速 YouTube 视频播放。例如当你加载一个大小为 100M 的视频时,原本 CDN 单个节点已经无法承载这样的内容加速了(因为同时可能有很多用户都在请求 CDN 节点上的大文件),但你所在的城市可能有10台 接入了暗光纤的 Youtube 小型服务器都缓存了这个视频,YouTube 便开始使用这 10 台节点和你的个人电脑通过暗光纤建立 P2P 连接,每台服务器向你发送 10M 大小的视频。从整体上来看这 10 台服务器都仅使用了很小的带宽和流量,而你却能够瞬间获得 100M 的视频文件,播放体验得到了提升。因为流量走的是暗光纤网络,没有占用公共带宽,不会影响该区域内其他用户的上网体验,可谓一举两得。
现如今暗光纤及其二次销售几乎被抢购一空,部分厂商发布了分润模式的带宽共享服务,即在个人路由器、电脑或智能设备上安装带宽共享软件,在闲时启动,使用个人智能设备作为缓存节点,对其他有需要对用户进行 P2P 的资源共享服务,并获得利润分成。
中心化客户端中的 P2P 直连
虽然不是每个服务商都拥有 Google 的财力和技术水平能够使用暗光纤,但小型软件服务商仍然能够通过 P2P 技术提升用户体验。
想必大家都有这样的体验:当你和同事坐在同一个楼宇(同一内网中)时,你们在 Skype 或其他聊天软件中互传文件时的速度比你给不在同一地区的客户传输文件的速度要快得多。因为 Skype 发现你们在同一内网中,于是你们的文件传输就不需要走 Internet,而是直接建立点对点的连接,通过楼宇的路由器沟通,就可以直接传递了,而内网的带宽一半是非常大的,所以即便是几个 G 大小的文件也可以在几十秒钟之内传输完毕。
同样的场景也适用与广域网中,同一片社区,同一个城市,同一个 ISP 中的用户 P2P 直连传递文件通常要比经过互联网中心化服务器传输要快很多。
虽然这些软件普遍都是中心化的,脱离了中心服务器便无法运作,但是还是在这些功能上整合了 P2P,极大提升了用户体验。
最近大家都在讨论 #Nostr ,我也借此讨论一个比较少有人讨论的话题,去中心化网络的结构化和点对点特性,以 #Nostr 和 Rings Network 举例来阐述一些异同点。
Nostr 和 Rings Network
1⃣️ 中心化,去中心化,混合式
中心化网络大家都了解,像 Twitter 这样,运营者可以决定是否删除更改用户数据,如果停止运营或封禁用户,大家的虚拟资产(内容)便随之消失。
去中心化网络里最广为人知的就是比特币和以太坊,无论哪个节点下线都不影响网络的内容安全,传输安全和一致性通过加密算法保证而非人工干预。
混合式当前比较著名的就是 Mastodon,各个服务器之间可以相关联,不同服务器的用户可以相联系,但若某个服务器停止工作,用户的账户也便不复存在。Mastodon 在混合式网络里是偏中心化属性强一点的。
2⃣️ Nostr 网络结构
Nostr 在某种程度上来说是去中心化网络,但是我更愿意表述其为混合式网络,但是是去中心化程度较高的那种。Nostr 的拓扑结构大体上是这样的:
每个用户都是独立的客户端,客户端只和 relay 相连接,relay 如其字面上意义可以认为是转发节点。relay 和 relay 之间可以互相连接,但是前提是互相之间知道对方的地址,对于不知道地址的 relay 是连接不到的,只能通过其他 relay 帮助转发。一个客户端也可以连接多个 relay,这样整体上寻址和通信的效率也会提升上来。
我知道这些已经是老生常谈了,但是如果你不是这个领域的专家,理解起来有困难,大家可以把 Nostr 网络想象为移动网络:
客户端就是手机,relay 就是基站(信号塔),手机(客户端)可以连接一个或多个信号塔(relay),如果连接不到任何信号塔,也就无法发送和接收信息。
信号塔之间当然也需要互相连接,这样才能组成一张通讯网。一个信号塔可能会连接一个或几个其他信号塔,当其中某个连接不畅的时候可以有备选,多个连接也能保证最短到达需要寻找的手机。一个信号塔大多数情况下连接了成百上千的手机,而一个手机通常只会连接到个位数的信号塔,我们称这种结构为星型网络(星型拓扑)。多个基站联合起来组成了扩展式的星型网络。这就是 Nostr 的基本网络结构。
3⃣️ Rings Network 网络结构
Rings Network 使用的是 Chord 环状网络,所有节点依次列成一个环,然后通过算法控制,各个节点也会和环上其他节点建立若干个链接,当某个链接断开时(例如节点退出或网络断开),算法会控制不影响其他节点运行而重新组成环和建立新的链接。
4⃣️ 差异对比
各种网络结构组成都各有优势和劣势,基本上不存在本质上的优良之分,而是基于使用场景和所解决的问题采用合适的网络结构才是最优方案。这里我们谈一下两者在一些常见场景下的处理差异:
连接方式
Nostr 客户端和 relay 之间的连接是基于 WebSocket 的,不允许 p2p 连接。而 Rings Network 节点间是基于 WebRTC 的,节点间可以进行 p2p 连接。
此处连接方式上可以看得出两个网络在设计上都有很强的指向性 — — 为 web 服务。浏览器目前是大家主流的互联网交互方式,脱离浏览器的 app 则会受到例如 App Store 或 Google Play 等中心化组织的审核审查,所以本身可运行在浏览器中、连接方式被浏览器默认支持是非常重要的。无论 WebSocket 还是 WebRTC,在浏览器中进行高效、并行连接,或进行流式数据传输,都是很好的选择。
与此同时,Rings Network 选择了 p2p 的方式进行连接,在传输效率上必然没有 Nostr 星型网络的中心节点群带宽状态好,但是连通性上会更胜一筹。两种去中心化网络在数据传输效率和连通性上有所不同取舍。
节点角色
Nostr 网络中存在中心节点(群),它们负责维护整个网络的状态;Rings Network 网络中没有中心节点,所有节点在整个网络中具有相同的角色。
如果网络中有恶意节点存在,两种网络均不会被钓鱼或虚假消息攻击,因为两者都是经过加密算法保证每一条消息的可靠性。但是当恶意节点的目的是监听、追踪、蓄意不传递消息位置时,在 Nostr 网络中,恶意的客户端不会造成太大影响,但是恶意的 relay 则会造成网络故障或用户隐私暴露;在 Rings Network 中,精心编排的 Chord id 恶意节点也有可能通过控制一定数量的恶意节点达成监听和追踪的目的,但是不容易造成网络故障或不可用。
数据存储
Nostr 网络中,数据存储在 relay 节点;Rings Network 网络中,数据分布存储在整个网络中的各个节点,不过目前而言 Rings Network 的 DHT 暂且没有节点连接信息以外的内容,以胶水协议形式使用任意第三方进行存储。
Nostr 这种设计更偏向现有区块链的节点形式,但并非所有 relay 都对所有消息进行持久化,是一种在成本和效率中有所兼顾的方案。而 Rings Network 本身没有这种功能,依赖第三方在形式上为开发者提供了更多灵活的选择、降低了开发难度,不过同时也舍弃了网络本身的功能。
数据查询
Nostr 网络中,数据查询需要经过中心节点;Rings Network 网络中,数据查询可以通过环状网络中的任意节点进行。因此大多数情况下 Nostr 查询吞吐量较高,而查询较为中心化,relay 节点性能要求、网络要求均较高,Rings Network 平均查询吞吐量则较低,但是不会收到单点退出网络而造成数据丢失。
可靠性
Nostr 网络的可靠性取决于 relay 节点的可靠性,如果中心节点故障,整个网络将受到影响;Rings Network 网络的可靠性较高,即使一个或多个节点故障,整个网络仍然能够正常工作。
当遭遇单点故障时,主要取决于故障点属性。Nostr 网络中,如果故障点发生在 relay 节点上,大量客户端将受到影响,如果多个 relay 节点遭遇故障,可能会造成网络分裂成几部分,甚至整个网络瘫痪。而 Rings Network 遭遇单点故障时则表现较好,因为各个节点关系对等,即使 50% 节点遭遇故障仍能保持 95% 以上的可用性。
效率
Nostr 网络的效率可能受到中心节点的限制,数据的查询和存储都需要经过中心节点;Rings Network 网络的效率较高,数据的查询和存储都可以通过任意节点进行。
Nostr 网络中随着网络的发展壮大,客户端数量和 relay 数量的比值如果一直较为均衡,则不容易出现堵塞,但如果客户端数量剧增而 relay 数量和质量没有跟上网络发展的速度,瘫痪的情况则有可能发生。不过在理想状态下,整体传输效率较高,速度也较快,但是即使在这种情况下,随着网络中消息包数量剧增,很容易造成类似 DDOS 效果的消息风暴出现,可能会拖垮整个网络。
Rings Network 网络则相反,如果节点数量剧增,则网络效率和传输质量会有所提升,理论上节点越多连通性越好,相应的多点传输带来的带宽效应也会体现;而如果节点数量较少,偏僻节点则可能无法获得很好的体验。但随着节点数量增加顺势导致的消息量增加时,因为点对点传输的缘故,消息风暴出现的可能性非常低。
没有评论:
发表评论