什么是星际文件系统(IPFS)

12 篇文章 0 订阅
2 篇文章 0 订阅

星际文件系统(IPFS)会是将来一个非常重要的技术。IPFS的全称是Interplanetary File System,是一种p2p的文件分享系统,目的是要改变信息分发的方式。它在通信协议和分布式系统方面都有几项创新。我们先来看一下它背后的科技突破,这些突破让IPFS的目的成为可能。

首先看一下通讯协议和分布式系统。如果两个人要交流信息,这两个人需要共同的一套标准,以便确定信息在何时以及如何传递。这些标准就是通常说的通讯协议。通讯协议就像语言一样。如果我们去某个国家但是不说该国语言,我们就不具备和当地人交流的“通讯协议”。计算机也是这样,起初计算机是彼此独立的计算设备,一直到20世纪80年代,出现了通讯协议,才得以相互通讯。

在计算机中,通讯协议一般都是协议套件的形式,包含几层。比如网络协议套件包含4层,每一层都有相应的功能。除了网络协议,我们还知道计算机之间相互交流的基本结构叫做系统架构。有很多种架构,不过和我们目前讨论的相关的有客户端-服务器端架构和点对点网络(p2p)。

目前的互联网主要是客户端-服务器端的形式,这种形式正是基于互联网协议套件。而其中HTTP则是信息交流的基础。

现在网络上的数据是存储在集中的服务器上。人们在访问网络上某个数据时,是通过地址来进行寻找的。如需查看一张图片,并不是通过图片内容来寻找图片,而是通过哪台服务器上有这张图片,就去访问这个服务器的方式实现的。这种方式可以让数据更容易发布和管理,更容易保护数据,可以让服务器和客户端的容量更大。但是在安全性、私密性和效率方面有很大的缺陷。有权限控制服务器的一方即有权限控制所有数据。也就是说,你的数据可以被任何有权限访问服务器的人查看和修改,或是删除。使用基于地址寻找数据的方式时,数据是由其地址而非其内容确定的。也就是,即便我们附近的网络里就有我们需要的内容,我们也得访问远程服务器来获得想要获取的内容。而且我们也没有办法识别信息是否被修改,因为客户端只知道数据存放的地址,而不知道数据的内容。

不过,在互联网起始以来,客户端-服务器模型以及HTTP就一直在使用当中,而且表现也很不错。这是因为使用HTTP的网络传输文本和图片之类的小文件很高效。在网络发展的20年,一个普通页面的大小仅仅从2KB增长到了2MB。

HTTP对于加载网页来说很方便。但是它在设计之初就不是用于传输大文件的。(像是音频或者是视频之类。)HTTP的这些限制也催生了如BitTorrent的下载方式,可用来下载电影等大文件。

到了2018年,大数据以及网络高清点播视频已经很普及了。我们所生产和消费的数据也在不断增多,同时我们也在开发更强有力的计算机来处理这些数据。云计算等技术可缓解这一问题,但是分发数据的基础架构还是和以前基本一样。

现在就是星际文件系统(IPFS)登场的时刻了。IPFS想要通过一种全新的p2p文件分享系统来解决客户端-服务器端和HTTP网络的不足。IPFS基于几种新技术以及几种现存的技术,是由Protocol Labs创建的开源项目。Protocol Labs是一个研究网络协议的实验室,之前还是Y Combinator投资的一个初创项目。此外,Protocol Labs还开发了IPLD以及Filecoin,作为补充的系统。IPFS的组成很庞大,其主要结构如下:

分布式哈希表

哈希表是一种数据结构,把数据以键值对的形式保存。在分布式哈希表中,数据分散存储在计算机网络中,我们可以方便地查询并访问相关的节点。

分布式哈希表的主要优点是去中心化、容错和可扩展。节点不需要中心的协调,即使节点出错或者不再存在于网络之中,系统仍然可以可靠地运行,分布式哈希表可以拓展到容纳数百万的节点。如此一来,就比客户端-服务器端结构更有弹性。

块交换

文件共享软件Bittorrent通过创新的数据交换协议,能够成功协调数百万节点之间的数据传输,不过仅限于种子生态系统。IPFS实现了这一协议的通用版本,称为BitSwap,可以作为任何类型数据的市场。这个市场是Filecoin的基础:Filecoin是一个建立在IPFS上的p2p存储市场。

默克尔的树和默克尔树

Merkle DAG

Merkle DAG即默克尔有向无环图,是默克尔树和有向无环图的一种组合。默克尔树保证在p2p网络上进行过交换的数据块正确无误、完好无损且未经修改。这样的校验是通过加密哈希函数实现的。函数接受一个输入值,通过计算输出一个独一无二的由数字和字母组成的字符序列,即哈希值。可以校验一个输入值经过计算之后得出的哈希值和现有的哈希值是否吻合,但是很难通过哈希值反推出输入值。

每一个独立的数据块叫做“叶子节点”,这些叶子节点计算了哈希值之后,得出“非叶子节点”。这些非叶子节点可以相互组合和计算哈希值,一直到所有数据块可以用一个单独的根哈希值表示。

下图形象地展现了该过程:

有向无环图用于对没有环的数据做出拓扑序列模型。有向无环图的最简单例子是家族树。默克尔有向无环图是一种数据结构,其中哈希值被用来引用有向无环图中的数据块和对象。这样就有了几个非常有用的特性:IPFS上所有内容都可被独一无二地确立,因为每一个数据块都有独一无二的哈希值。而且数据可以防止被篡改,因为如果修改了哈希值也就改变。如图:

IPFS的中心思想是把所有数据都建立在默克尔有向无环图上。这样可以使得安全性获得极大的提升。

版本控制系统

默克尔有向无环图的另一个强有力的特性是,可以让我们建立分布式的版本控制系统。比如Github就是一个例子,开发者可以同时协作开发项目。Github上面的文件就是通过默克尔有向无环图存储并分版本的。开发者可以单独复制和编辑文件的多个版本,保存这些版本,之后再把修改的内容和原文件合并。

IPFS对于数据对象使用的是相同的模型。只要对象对应于原来的数据,并且新的版本可访问,则整个文件的历史版本都是可获取的。如果数据块在网络中是保存在本地的,而且可以无限缓存,那么就表示IPFS对象可以永久保存。

而且,IPFS不依赖互联网协议。数据可以直接分布在覆盖网络上。这也是很重要的特性。

自认证文件系统

最后一个IPFS的重要特性是自认证文件系统(SFS)。它是分布式文件系统,不需要特殊权限就可以交换数据。

IPFS通过SFS这一概念实现了星际文件空间(IPNS)。IPNS是使用公钥来自认证用户在网络上发布的对象的SFS。上文提到,所有IPFS上的对象都可被独一无二地确定,节点也是这样。每个节点都有一套公钥和私钥,以及一个由其公钥经过哈希生成的节点ID。节点因此可以使用他们的私钥来签证其发布的任何数据对象,且数据的真实性可使用发送者的公钥来验证。

Reference:

https://hackernoon.com/a-beginners-guide-to-ipfs-20673fedd3f

https://hackernoon.com/merkle-trees-181cb4bc30b4

https://docs.ipfs.io/

https://docs.ipld.io/#the-data-model

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值