DARMA Cash DMCH
$1.12 4.16%
DARMACash匿名公链技术(二):区块网络的核心框架LIBP2P
牛币圈
来自达摩技术爱好者

大家好,人工智能和区块链技术是下一个十年的朝阳行业,我们来自达摩社区区块链技术小组(以下简称Bodhi),专注于区块链技术的投资。Bodhi是匿名公链 DARMACash(DMCH)的早期支持社区之一,我们将按照深入浅出、由浅入深的方式逐步推出DARMACash匿名公链技术的系列文章,为大家介绍DMCH的精彩世界。


我们在DARMACash匿名公链技术(一)的介绍中,向大家阐述了DMCH项目使用了GO编程语言的战略意义,运用传统SSL/TLS技术对DMCH区块网络加密的安全手段。在这篇文章中我们重点阐述DMCH分布式区块网络的核心网络层框架libp2p,目前国内互联网还没有相关资料能够很好的解释清楚libp2p的重要性,但是理解libp2p的重要性将有助于我们理解DMCH项目及其生态为什么能够成功,当然我们在公链技术系列文章不过多讨论生态问题,应用生态将在另一个系列中阐述。


libp2p简介

区块链去中心化的概念已经深入人心,但是实际上区块链是一个分布式点对点去中心化网络。大部分人对点对点的概念是很模糊的,点对点网络实际上是参与者(称为对等点或节点)在或多或少“平等”的基础上彼此直接通信的网络。这并不一定意味着所有对等点都是相同的;有些对等点可能在整个网络中扮演不同的角色。然而,对等网络的定义特征之一是它们不需要一组行为“客户端”完全不同的特权“服务器”,比如客户端/服务器模型。因为对等网络的定义相当宽泛,所以已经建立了许多不同类型的系统,它们都属于“对等”的范畴。大家比较熟悉的是BitTorrent这样的文件共享网络,而区块链网络(比特币、以太坊、DMCH)也是点对点网络。


libp2p原本是协议实验室(protocollab)IPFS项目的网络层,后来因为其具有颠覆传统互联网架构的能力被独立成一个单独的项目,我们从图1的IPFS栈结构可以有更直观的认识。简单来说,libp2p就是帮助链接节点的一个库,任意两个节点,不管在哪里,不管处于什么环境,不管运行什么操作系统,不管是不是在NAT之后,只要他们有物理上链接的可能性,那么libp2p就会帮你完成这个链接。


图1


现在让我们举一个例子来阐述libp2p的重要性,假设老祖告诉我们达摩社区20万社区成员需要访问一个网站查阅信息,网站服务器就会同时接受20万个http请求,这个过程导致了以下几个问题:


1.网站服务器可能无法同时响应20万个请求,因此大部分社区成员访问不了网站。

2.运营商机房故障,导致使用该运营商的社区成员访问不了网站。

3.网站的内容由于各种原因不能被访问,导致某些国家的社区成员访问不了网站。


这些问题暴露出来的问题在于我们的网站信息是中心化的,某些因素对社区成员能否访问网站有决定性因素。libp2p就是用于解决这个问题,假设我们20万社区成员都安装了DMCH的服务,DMCH借助libp2p把20万个社区成员互联,此时当社区成员去访问网站的时候,情况从访问一个中心化网站变成了社区成员之间的互相访问,这将形成访问效率和访问成功率指数级上升的局面。


当前分布式去中心化网络的问题

今天的大多数互联网公司都有集中的服务器,其中大部分都托管在数据中心。我们今天看到的互联网仍然以某种方式充满了类似于电话接线员的服务,这些服务高度集中和脆弱。今天,我们比以往任何时候都更加依赖互联网,我们在生死关头都依赖于它。但目前的互联网,是相当脆弱的,并且存在许多设计问题,这些问题大多源于位置寻址。所谓的位置寻址就是当我们要通过互联网访问一张照片的时候,需要在浏览器里输入http://darmacash.com/cat.png,这个网页链接就是位置寻址。


目前的解决方案是内容寻址,它是弹性更强的分布式点对点网络模型。但是要实现内容寻址,有很多来自于传统互联网的阻力,主要体现为NAT,防火墙,网络延迟,网络可靠性,漫游,监管,不同设备的不同标准,技术迭代的缓慢等各种因素。


libp2p并不是第一个使用点对点内容寻址模型的项目。像Emule,Kazaa,LimeWire,Napster,BitTorrent这样的项目数不胜数,其中一些甚至一直存在到今天。即使有些项目流行起来,但都存在着各种问题。WebRTC就是一个很好的例子,它是Web平台的点对点传输应用,但它的大部分开源实现都是通过黑客借鉴Chrome浏览器构建的,因此存在缺陷且不可靠。


分布式点对点去中心化网络需要一个面向未来的框架,该框架可以有效地封装所有标准,并具备以下优点:

更快的创新:因为当前的互联网需要模块化和互相兼容化属性。         ·面向未来的系统:在未来添加新事物时,系统能够保持一致性。  


·交叉兼容:不仅允许添加新的东西,也需要保留对以前使用的标准的支持,确保老系统的可用性。


因此libp2p登上历史舞台了,他是一个工具包,允许创建和管理标准和协议,这些标准和协议致力于解决上述问题。


libp2p主要解决的问题

传输

libp2p的基础是传输层,它负责从一个对等点到另一个对等点的实际数据传输和接收。目前使用的跨网络发送数据的方式有很多种,更多的方式正在开发中,还有更多的方式有待设计。libp2p提供了一个简单的接口,可以修改该接口以支持现有和未来的协议,从而允许libp2p应用程序在许多不同的运行时和网络环境中运行。


身份

在一个拥有数十亿联网设备的世界里,知道自己在和谁说话是安全可靠通信的关键。libp2p使用公钥加密作为对等身份的基础,这有两个互补的目的。首先,它以PeerId的形式为每个对等点提供一个全局唯一的“名称”。其次,PeerId允许任何人检索所标识的对等体的公钥,从而实现对等体之间的安全通信。


安全

我们必须能够在对等方之间安全地发送和接收数据,这意味着我们需要信任通信的对等方的身份,并且任何第三方都不能读取我们的对话或进行实时更改。libp2p支持将传输提供的连接“升级”到安全加密的通道中。这个过程很灵活,可以支持多种加密通信的方法。当前默认使用secio,secio正在开发支持TLS1.3。


对等路由

当您想要向另一个对等点发送消息时,您需要两条关键信息:他们的PeerId,以及在网络上定位他们的方法以建立连接。在许多情况下,我们只有我们想要联系的对等方的PeerId,因此我们需要一种方法来发现他们的网络地址。对等路由是通过利用其他对等设备的知识来发现对等设备地址的过程。在对等点路由系统中,对等点可以提供我们需要的地址(如果他们有地址),或者将我们的查询发送给另一个更有可能获得答案的对等点。随着我们联系越来越多的对等点,我们不仅增加了找到我们正在寻找的对等点的机会,而且在我们自己的路由表中构建了更完整的网络视图,这使得我们能够回答来自其他人的路由查询。libp2p中当前稳定的对等路由实现使用分布式哈希表,使用Kademlia路由算法迭代地将请求路由到更接近所需PeerId的位置。


内容发现

在某些系统中,我们更关心的是他们能为我们提供什么,而不是我们在和谁交谈。例如,我们可能想要一些特定的数据,但是我们并不关心从谁那里得到它,因为我们能够验证它的完整性。libp2p为此提供了一个内容路由接口,使用的是基于Kademlia的分布式哈希表。


消息传递/PubSub

向其他对等点发送消息是大多数对等系统的核心,而pubsub(Publish/Subscribe的缩写)是向感兴趣的接收者组发送消息的一种非常有用的模式。libp2p定义了一个pubsub接口,用于向订阅了 “主题”的所有对等点发送消息。该接口目前有两个稳定的实现方法:Flowdsub使用非常简单但效率低下的“网络泛洪”策略,而gossipsub定义了一个可扩展的gossip协议。Episub也正在积极开发中,episub是一种扩展的gossipsub,它针对单源多播场景进行了优化。


现在让我们通过几张图片更好的理解libp2p:

libp2p是P2P协议的集合


libp2p模块化的特点可以对接各种接口


正如我们在上面看到的,libp2p是一组构建模块的集合,这些公开的构建模块是可组合、可交换、可升级的。换句话说,libp2p采用当前的“垂直” OSI模型并将其设为水平结构。


“垂直” OSI模型

上图网络模型有几个缺点:

·在多个层中重复操作,因此存在大量重复工作和资源浪费的情况。  ·信息隐藏在各层之间,错失了重大的改进机会。


上述缺点主要是因为互联网协议分布在多个层上,并且非常紧密地耦合在一起,这使得它们很难改变,从而阻碍了创新。而libp2p改变了这一点,提供了一个框架,所有这些协议都可以在其中共存和协作,见下图。

DMCH与libp2p

我们已经对libp2p的重要性进行了阐述,那么DMCH使用libp2p框架意味着什么呢?首先是技术实力,使用libp2p作为分布式点对点去中心化网络的网络框架对于开发人员的要求比较高,目前使用libp2p框架的区块链项目有DMCH, Polkadot, Ethereum 2.0以及Libra。其次是生态应用,我们知道libp2p源于IPFS(见下图),而IPFS分布式存储的激励生态是Filecoin。



考虑到DMCH开发人员对于DMCH生态的公告信息(见下图),我们有理由相信基于DMCH生态的“IPFS”和“FileCoin”是开发团队已经在着手准备的事情。



更近一步,我们关注到开发人员提到的KCPVPN信息中其实对应到两个github的项目:

·https://github.com/libp2p/go-libp2p/issues/193

·https://github.com/paralin/go-libp2p-kcp

我想大家已经从链接中的go两个字母猜测到了这是libp2p的GO相关项目,我们在公链技术系列文章一中提到开发人员选用GO语言进行项目开发的雄心在libp2p框架就有了对应,GO语言能够很快与libp2p进行整合。此外,熟悉分布式点对点网络的读者应该都清楚,针对跨国跨境的复杂情况,libp2p采用的QUIC不一定能解决问题,而KCP才是利器,KCP已经被几十万游戏大军无国界的广泛使用,而基于KCPVPN+BGP routing形成的区块链互联网更是令人期待。

达摩社区区块链技术小组(Bodhi)将持续关注DMCH项目的发展,并在完成公链技术系列文章后给大家带来DMCH生态应用分享。


2020年07月06日 10:45图文分享