一文讲懂IPFS

IPFS

什么是IPFS?

星际文件系统是一个旨在创建持久且分布式存储和共享文件的网络传输协议。它是一种内容可寻址的对等、点到点 的超媒体分发协议。在IPFS网络中的节点将构成一个分布式文件系统,它尝试为所有计算设备连接同一个文件系统,可以让我们的互联网速度更快,更加安全,并且更加开放,IPFS协议的目标是取代传统的互联网协议HTTP
一文讲懂IPFS

什么是超媒体?超媒体对应之前的超文本,超文本意思就是我们建立文本与文本之间的连接,超媒体的意思是它要建立的是文本、图片、视频之间的连接。http这个协议就是一个超文本协议。

IPFS(InterPlanetary File System,星际文件系统)是一个将分布式哈希表(Distributed Hash Tables (DHTs))、BitTorrent、版本控制系统Git、自认证文件系统(Self-Certified Filesystems - SFS)与区块链相结合的文件存储和内容分发网络协议。这些系统的综合优势给它带来的显著特性:

  1. 永久的、去中心化保存和共享文件 (区块链模式下的存储DHTs)
  2. 点对点超媒体:P2P 保存各种各样类型的数据(BitTorrent)
  3. 版本化:可追溯文件修改历史(Git - Merkle DAG默克尔有向无环图))
  4. 内容可寻址:通过文件内容生成独立哈希值来标识文件,而不是通过文件保存位置来标识。相同内容的文件在系统中只会存在一份,节约存储空间。

在某些方面,IPFS类似于万维网,但它也可以被视作一个独立的BitTorrent群、在同一个Git仓库中交换对象。换种说法,IPFS提供了一个高吞吐量、按内容寻址的块存储模型,及与内容相关超链接。这形成了一个广义的Merkle有向无环图(DAG)。IPFS结合了分布式散列表、鼓励块交换和一个自我认证的名字空间。IPFS没有单点故障,并且节点不需要相互信任。分布式内容传递可以节约带宽,和防止HTTP方案可能遇到的DDoS攻击。

IPFS基于什么产生的呢?为什么会有IPFS?

大家都知道互联网是建立在HTTP协议上的. HTTP协议是个伟大的发明,让我们的互联网得以快速发展.但是互联网发展到了今天HTTP逐渐出现了不足:

  1. 现在http协议的效率非常低,并且成本还很高。一旦使用HTTP协议每次需要从中心化的服务器下载完整的文件(网页,视频,图片等),速度慢,效率低,如果改用P2P的方式下载,可以节省近60%的带宽,P2P将文件分割为小的块,从多个服务器同时下载,速度非常快.

  2. web文件经常被删除。我们可能在上网的过程中会遇到,收藏某个网页,在使用的时候浏览器网页会显示404。原因有很多,有可能是服务器停了,有可能是服务器受到一些外部的干扰坏掉。所以会发现web文件经常被删除。IPFS提供了文件的历史版本回溯功能(就像git版本控制工具一样),可以很容易的查看文件的历史版本,数据可以得到永久保存。

  3. 互联网的中心化会抑制了web的成长,我们的现有互联网是一个高度中心化的网络,互联网是人类的伟大发明,也是科技创新的加速器,各种管制将对这互联网的功能造成威胁,例如: 互联网*,管制,监控等等。这些都源于互联网的中心化。

  4. 互联网非常依赖于其他网络,如果说因为一些不可抗拒的因素,比如说自然灾害这些,把主干网络给破坏了,那一切真的就完了,起码说互联网会损失很多,当然这种几率是比较小的,还会受到各种病毒网络的攻击,会造成中心化服务器的断机。

怎么解决HTTP的缺点?

那么为了解决以上问题,ipfs就出来了,它怎么解决的呢,当我们利用ipfs上传文件的时候,系统会先对文件进行一个加密,得到一个数值,这个数值很重要,我们叫做哈希值,它是唯一的,一个文件对应一个哈希值,随后系统会将文件进行分割,分割成很多份,然后复制,最后分布式地存到若干区块当中。

在未来,使用ipfs网访问东西或者下载东西的时候,系统会从离我们最近的距离的一个节点传输数据,或者说文件的碎片来给到我,最终呈现的是整个文件。

上面讲到的【哈希值】:在ipfs网络里的文件会被赋予一个哈希值,那么这个哈希值就类似于我们的身份证,独一无二的,一个文件一个哈希值,这个哈希值是从文件内容中计算出来的。即使说文件里面它有一个标点符号被改动计算出的哈希值也完全不一样,所以就像我们说的一个人对应一个身份证,一个文件就对应一个哈希值,没办法改动。所以说ipfs网络中的文件只存在独一无二的一份,文件自然不会重复地去存储,不会被恶意篡改,大大降低了存储的成本,减少了存储的资源浪费,这也是为什么说ipfs的目标是补充http的不足或者是完全取代http。

IPFS如何存储文件?

我们将一个文件放到IPFS系统中,会得到根据内容计算出的加密哈希值。哈希值直接反映文件的内容,哪怕只修改1字节,哈希值也会完全不同。当使用IPFS访问一个文件的哈希值时,它会使用一个分布式哈希表找到文件实际存储节点,同时访问多个字节来提高访问速度,下载文件并校对文件的哈希。由于每个文件的哈希值全网唯一,查询(访问)将很容易进行。如果被存储过,直接从其它节点读取它,不需要重复存储。

存储块

信息可以存储进IPFS系统中的对象(块)里,这些块可以存储至多256KB的数据,它们还可以链接其他IPFS对象。

存储小于256KB的文件时,只需将这个文件放进一个对象内就可以了。而大于256KB的文件会被分成多个256KB然后放进对象中,之后IPFS将创建一个空对象,该对象将链接到文件的所有其他部分。这个空块就类似于一个大信封,里面会涵盖整个文件的所有部分。

一文讲懂IPFS

系统会给同一个文件的每一个块计算一次哈希值一,所有对象的哈希值一计算完毕之后,会将所有的哈希值一拼凑成一个数组B,再计算一次哈希值,从而得到最终的哈希值下进行。最后把最终的哈希值和原文件捆绑起来,组成一个对象,从而形成一个索引结构d。把块和最终的索引结构d上传至IPFS节点,文件便同步到网络了。

如何访问IPFS?

IPFS的做法只关注文件中可能出现的内容。比如,我们把照片文件cat.jpg放到IPFS节点,它会得到一个新名字Qjhash23jhJhjhf56j65h,这是一个由文件内容计算出的加密哈希值。当IPFS被请求一个文件哈希时,它会使用一个分布式哈希表找到文件所在的节点,取回文件并验证文件数据。

如果仅仅使用哈希值来区分文件的话,会给传播造成困难,因为哈希值不容易记忆,就像IP地址一样不容易记忆,于是人类便发明了域名。与之类似,IPFS使用一个叫强脉冲中子源的分布式命名系统,将难于记忆的数据哈希值映射为易于记忆的字符串。这可以类比于域名与IP地址的映射关系。

举个具体场景的例子,假设我想要看“碟中谍6”这部电影,A同学之前下载过这部电影,他启动了IPFS节点,将这个视频文件加入了IPFS网络。他会得到一个哈希指纹b,同时发布到公共网关,通过IPNS映射得到了一个/IPFS/b的路径名。

他把哈希指纹和路径名都告诉我,我要做的事情是启动一个本地节点,对该网关发一个寻址PIN的请求,IPFS自动索引分布式哈希表的哈希值,找到指纹b所对应的节点列表。

如何解决无人保种的问题?

针对问题的解决方案:Filecoin

分布式存储就意味着需要在全球都有足够多的节点,上面提出的问题,实际就是如何才能让这些节点愿意贡献自己的硬盘和带宽。这当然少不了一套合理的奖励机制,此时就需要Filecoin出场了。

通过使用代币(FileCoin)的激励作用,让各例程有动力去存储数据。按照各节点的贡献大小,它们会获得相应数量的Filecoin作为奖励,即矿工(存储资源贡献者)通过为网络提供开放的硬盘空间获得Filecoin,其他用户想在IPFS里存储文件时,也需要支付Filecoin作为成本。
一文讲懂IPFS
存储矿工的挖矿行为可以理解为是共享出自己的硬盘资源并获得酬劳。

通过Filecoin的奖励机制,IPFS激励公众参与进来贡献出自己的存储资源。这就在全球范围内极大的增加了网络的节点数量,让整个分布式存储网络变成了一个巨大的存储空间。在整套机制的配合下,IPFS在跟HTTP的竞争中拥有了更强的发展优势。

参考资料

https://baijiahao.baidu.com/s?id=1647038148693057911&wfr=spider&for=pc
https://zhuanlan.zhihu.com/p/92895578?utm_source=wechat_session