走进BDT协议之P2P协议发展小历史

2018-08-23

2018年8月10日,由GeekChain基金会生态企业巴克云开发的下一代P2P协议:BDT协议开启了万级节点公测。通过测试数据的回收与校验,BDT协议代码将得到进一步的优化,这是打造中国最好的P2P协议不可或缺的重要环节。

测试详情及测试程序包下载:http://www.gct.one/Ch/bdt-2/

本文将带大家透过程序及应用的更替窥探P2P协议的发展史,让大家走近分布式网络,让大家能更加深入地理解BDT协议对区块链网络发展的重要意义。

P2P即peer to peer,意为对等计算机网络。其核心是将数据存储在客户本地,通过存储信息(名称、地址、分块)的查询,让终端之间直接数据传递。

P2P技术属于覆盖层网络(Overlay Network)的范畴,是相对于客户机/服务器(C/S)模式来说的一种网络信息交换方式。

在C/S模式中,数据的分发采用专门的服务器,多个客户端都从此服务器获取数据。

这种模式的优点是:

  1. 数据的一致性容易控制
  2. 系统也容易管理

缺点是:

  1. 因为服务器的个数只有一个(即便有多个也非常有限),系统容易出现单一失效点
  2. 单一服务器面对众多的客户端,由于CPU能力、内存大小、网络带宽的限制,可同时服务的客户端非常有限,可扩展性差

P2P技术正是为了解决这些问题而提出来的一种对等网络结构。在P2P网络中,每个节点既可以从其他节点得到服务,也可以向其他节点提供服务。这样,庞大的终端资源被利用起来,一举解决了C/S模式中的两个弊端。

另外,在民主思想日益发展的现代社会,人们对于数据隐私的重视程度也日益增强,P2P也是将“数据权利”归还人民的重要工具。

透过应用看P2P协议发展史

1.P2P的第一代应用:Napster

img

Napster是一个音乐共享程序,1998年在美国波士顿大学读大一的学生肖恩范宁为了解决他室友“如何在网上找到音乐”而编写了一个简单程序。这个程序能够搜索音乐文件并提供检索,把所有的音乐文件地址存放在一个集中的服务器中,这样使用者就能够方便地过滤上百的地址而找到自己需要的MP3文件。到了1999年,这个叫做Napster的程序竟成为了人们争相转告的“杀手程序”,在短时间内就拥有了超过5000万的用户,但最终接到了来自美国唱片艺术家工业协会的一纸诉状,因为版权问题,明星陨落。

诸如Napster以及国内的OICQ,都属于第一代应用,采用的是集中式的对等网络。

它们基于中央目录服务器,为网络中各节目提供目录查询服务,传输内容无需再经过中央服务器。这种网络,结构比较简单,中央服务器的负担大大降低。但由于仍存在中央节点,容易形成传输瓶颈,扩展性也比较差,不适合大型网络。可由于目录集中管理,对于小型网络的管理和控制上倒是一种可选择方案。

2. P2P的第二代应用:Gnutella

Gnutella与Napster的最大区别在于:

(1)没有使用中央数据库以存储Gnutella网络中的所有可用文件,使用的是分布式查询法。这样,网络上所有的计算机都能告知彼此可共享的文件。

(2)有许多不同客户程序可用于访问Gnutella网络。

高度分布式网络使得Gnutella不再是凭法院的一个命令就能够被关闭的存在。

但在实际应用中,在Gnutella中的搜索模式并不可靠,由于每一个节点都是一台普通的计算机,频繁地连接和断开网络使得整个Gnutella网络结构永远都不是完全稳定的,并且在Gnutella网络中随着连接用户增加,宽带损耗也会随之递增,经常饱和的连接会导致较慢的节点失去作用。

Gnutella是第二代协议的代表,采用的是无结构分布式网络。

无结构分布式网络和集中式最显著的区别在于中心服务器的去除,网络节点通过查询包机制搜索想要的资源。具体实现方式为,某节点将包含查询内容的查询包发送到与之相邻的节点,该查询包以扩散的方式在网络中蔓延,由于这样的方式如果不加节制,会造成消息泛滥,因此一般会设置一个适当的生存时间(TTL),在查询的过程中递减,当TTL值为0时,将不再继续发送。

这种无结构方式由于组织比较松散,节点的加入和离开都比较自由,在查询热门信息时,可以轻松地找到,但如果查询信息比较冷门,小TTL值很可能并不足以支撑所需信息的发现,而大TTL值又容易引起较大的查询流量。

在实际应用中,发现当网络中存在一些拥有丰富资源的“类服务器”节点时,信息查询效率会显著提高,于是,P2P走向第三阶段。

3. P2P的第三代应用:KaZaA、迅雷

img

为了解决在二代协议阶段存在的“完全对等”的查找机制造成的网络压力和效率低的问题,在网络中引入了超级节点(SuperNode)的概念,选取网络中性能比较好的直接连接上网的用户作为超级节点,由超级节点来处理普通节点的查询。这样不仅缓解了性能较低对等点的压力,同时还能够解决FW/NAT等原因未能直接连接到网络上的主机的P2P共享和资源查找问题。

img

再拿我们熟知的迅雷来说,它是一款新型的基于多资源多线程技术的下载软件,其技术主要分成两个部分:

一部分是对现有Internet下载资源的搜索和整合,将现有Internet上的下载资源进行校验,将相同校验值的统一资源定位(URL)信息进行聚合。当用户点击某个下载连接时,迅雷服务器按照一定的策略返回该URL信息所在聚合的子集,并将该用户的信息返回给迅雷服务器。

另一部分是迅雷客户端通过多资源多线程下载所需要的文件,提高下载速率。迅雷高速稳定下载的根本原因在于同时整合多个稳定服务器的资源,实现多资源多线程的数据传输。多资源多线程技术使得迅雷在不降低用户体验的前提下,对服务器资源进行均衡,有效降低了服务器负载。

每个用户在网上下载的文件都会在迅雷的服务器中进行数据记录,如有其他用户再下载同样的文件,迅雷的服务器会在它的数据库中搜索曾经下载过这些文件的用户,服务器再连接这些用户,通过用户已下载文件中的记录进行判断,如用户下载文件中仍存在此文件(文件如改名或改变保存位置则无效),用户将在不知不觉中扮演下载中间服务角色,上传文件。

KaZaA以及迅雷都是P2P三代协议的代表应用,采用结构化分布式网络。

结构化分布式网络,是基于DHT技术的研究成果。它的基本思想是将网络中所有的资源整理成一张巨大的表,表内包含资源的关键字和所存放节点的地址,然后将这张表分割后分别存储到网络中的每一节点中去。当用户在网络中搜索相应的资源时,它将能发现存储与关键词对应的哈希表内容所存放的节点,在该节点中存储了包含所需资源的节点地址,然后发起搜索的节点根据这些地址信息,与对应节点连接并传输资源。这是一种技术上比较先进的对等网络,它具有高度结构化,高可扩展性,节点的加入与离开比较自由。这种方式适合比较大型的网络。

“关于P2P协议的发展阶段有着不同的分类依据,BDT协议的总架构师,也是前迅雷首席工程师刘智聪老师说:

以迅雷的视角来看,有中心的TCP P2P是第1代;有中心UDP P2P是第1.5代;无中心TCP P2P和无中心UDP是第2代;迅雷的是有中心无中心融合的P2P算第3代。”

P2P网络有3种比较流行的组织结构,被应用在不同的P2P应用中

img

  1. DHT结构

    分布式哈希表(DHT)是一种功能强大的工具,它的提出引起了学术界一股研究DHT的热潮。虽然DHT具有各种各样的实现方式,但是具有共同的特征,即都是一个环行拓扑结构,在这个结构里每个节点具有一个唯一的节点标识(ID),节点ID是一个128位的哈希值。每个节点都在路由表里保存了其他前驱、后继节点的ID。通过这些路由信息,可以方便地找到其他节点。这种结构多用于文件共享和作为底层结构用于流媒体传输。

  2. 树形结构

    在这种结构中,所有的节点都被组织在一棵树中,树根只有子节点,树叶只有父节点,其他节点既有子节点也有父节点。信息的流向沿着树枝流动。最初的树形结构多用于P2P流媒体直播。

  3. 网状结构

    网状结构又叫无结构。顾名思义,这种结构中,所有的节点无规则地连在一起,没有稳定的关系,没有父子关系。网状结构为P2P提供了最大的容忍性、动态适应性,在流媒体直播和点播应用中取得了极大的成功。当网络变得很大时,常常会引入超级节点的概念,超级节点可以和任何一种以上结构结合起来组成新的结构。

P2P技术的发展从基本网络机构上可以总结为:

集中式对等网络(中心化)→无结构分布式网络(去中心化)→结构化分布式网络(中心化和去中心化的结合)

P2P应用场景

  1. 分布式科学计算

    最著名的项目是SETI@home,通过几百万台计算机终端组成了让当前世界上性能最高的计算机都望尘莫及的“超级计算机”系统。P2P技术使得众多CPU资源联合服务于共同的计算成为可能,在计算过程中通过任务分片,利用分散的CPU资源完成计算任务并将计算结果反馈到某一个或多个服务器从而得出最终计算结果。

  2. 文件共享

    BT、Gnutella以及KaZaA都是代表。

  3. 流媒体直播

    Coolstreaming、AnySee、Gridmedia等是国内最早的P2P流媒体直播软件,背后团队都是著名的高校的科研团队,之后也出现了众多成功的P2P流媒体直播商业软件,知名度高的有PPLive、PPStream、沸点等。

  4. 流媒体点播

    由于观看直播节目时用户不能选择观看指定片段,所以在人们热烈研究P2P流媒体直播时,已有人开始将目光转向P2P流媒体点播服务,成功推出的有GridCast和PPStream等。

  5. IP层语音通信

    扩展性好、部署方便、价格低廉等是其最显著的优点,最著名的当属Skype,采取类似KaZaA的拓扑结构,在网络中选取一些超级节点。在通信双方直连效果不好时,一些合适的超级节点则担当起其中转节点的角色,为通信双方创建中转连接,并转发相应的语音通信包,在很多时候可以有效的解决因为通信双方所处网络环境的差异而造成的通话质量差的问题。

  6. 网络游戏平台

    受限于服务器的能力,往往热门的大型游戏需要限制同一场景下的人数或者通过增加服务器的方式来支撑游戏的正常运行,并且常常因为过度火爆而造成游戏卡顿延迟的情况,PKTown采取指数增长的同心圆环方式,很好地解决了这个问题。不需要改变游戏本身的代码,而是将用户和Internet邻居组建成一个虚拟局域网,将游戏发出的通信包截获后负载上虚拟局域网的地址,转发出去,游戏进程接收到之后认为是来自同一局域网的游戏包,则可以正常进行游戏。

  7. 区块链

    除了上述的几种应用场景,P2P也渗透了其它许多领域,P2P协议同样作为正处在风口浪尖的区块链的底层协议。作为互联网时代的重要产物,传统的P2P协议能否完美契合区块链这是值得思考的;当前大部分区块链项目沿用着DHT+TCP的架构模式,是否会对项目本身的可用性产生影响也是需要关注的。可以肯定的一点是,P2P技术的发展历程对于区块链未来定会起到一定的指引作用,同样是为了实现去中心化,P2P在经历了中心化、去中心化之后,实践证明在当前的网络情况和普遍算力水平之下,三代P2P协议最终采用的中心化和去中心化混合的治理机制是更适应当下发展状况的。区块链技术发展同样也受到网络、算力的制约,可以预见,在未来很长一段时间里,区块链同样需要这种混合机制来实现分布式和高效的平衡,更好地促进技术的应用及发展。