三大关键点带你了解IPFS是如何运转的?
IPFS是点对点(p2p)存储网络。可以通过中继信息或存储信息(或同时做这两者)的对等方访问内容,并且这些对等方可以位于世界任何地方。IPFS知道如何通过其内容地址找到您要的内容,不论在哪里。
IPFS三大关键点
首先让我们看一下内容寻址以及该内容如何链接在一起。IPFS堆栈的“中间”部分将生态系统连接在一起。一切都建立在能够通过链接的唯一标识符查找内容的基础上。
1
内容寻址和链接数据
IPFS使用内容编址通过内容中的内容而不是内容的位置来标识内容。您一直都在按内容查找项目。例如,当您在图书馆里寻找一本书时,经常会要求书名,这是内容寻址。如果您使用位置寻址,找到那本书,你会问它在哪里:“我想要的书那是在二楼,第一组,倒数第三架,左四周书”。如果有人移动了那本书,那你真倒霉!
互联网和计算机上都是一样的。现在,可以按位置找到内容,例如:
● https://en.wikipedia.org/wiki/Aardvark
● /Users/Alice/Documents/term_paper.doc
● C:\Users\Joe\My Documents\project_sprint_presentation.ppt
相比之下,每一个使用IPFS协议的内容都有一个内容标识符,即CID,即其哈希值。哈希值对于其来源内容而言是唯一的,即使与原始内容相比看起来可能很短。
通过哈希值进行内容寻址,已成为区块链分布式系统中连接数据的一种广泛使用的方法。但是,这些系统中的基础数据结构不一定可以互操作。这就是IPLD项目的来历。
哈希值可以标识内容,而IPLD在数据结构之间转换。由于不同的分布式系统以不同的方式构造其数据,因此IPLD提供了一些库,用于组合可插拔模块(每种IPLD节点的解析器)来解析多个链接节点之间的路径,选择器或查询(允许您探索数据,无论其基础是什么)。IPLD提供了一种在内容可寻址的数据结构之间进行转换的方法:不论是使用Git样式还是使用以太坊,都可以关注那些链接来实现相关功能。
IPFS协议使用IPLD从原始内容获取IPFS地址。IPFS对于如何将数据分解为DAG有其自己的偏好和约定。IPLD使用这些约定将IPFS网络上的内容链接在一起。
IPFS生态系统中的其他所有内容都基于此核心概念:链接的可寻址内容是使其余工作正常进行的基本连接元素。
2
IPFS将文件转换为DAG
IPFS和许多其他分布式系统利用了称为有向无环图或DAG 的数据结构。具体来说,它们使用Merkle-DAG,它们是DAG,其中每个节点都有一个标识符,该标识符是节点内容的哈希值。听起来有点熟?这涉及到上一节中介绍的CID概念。查看此CID链接数据概念的另一种方法:通过其哈希值识别数据对象(如Merkle-DAG节点)是内容寻址。(请查看有关Merkle-DAG的概念指南,以更深入地处理此主题。)
IPFS使用为表示目录和文件而优化的Merkle-DAG,但是您可以采用许多不同的方式来构造Merkle-DAG。例如,Git使用Merkle-DAG,其中包含许多版本的仓库。
为了建立内容的Merkle-DAG表示,IPFS通常首先将其分成多个块。将其拆分为多个块意味着文件的不同部分可以有不同的来源,并且可以快速进行身份验证。(如果您曾经使用过BitTorrent,您可能已经注意到,下载文件时,BitTorrent可以一次从多个对等方获取文件,这是相同的想法。)
Merkle-DAG有点“全力以赴”,也就是说所有内容都有CID,您都会有一个具有CID的文件。如果一个文件夹中有几个文件怎么办?该文件夹具有一个CID,并且该CID包含下面文件的CID。反过来,这些文件由块组成,并且每个块都有一个CID。您可以看到如何将计算机上的文件系统表示为DAG。希望您还可以看到Merkle-DAG图如何开始形成的。要直观地了解这个概念,请查看我们的IPLD Explorer。
Merkle-DAG的另一个有用功能是将内容分成多个块,如果您有两个相似的文件,它们可以共享Merkle-DAG的一部分。也就是说,不同Merkle-DAG的一部分可以引用相同的数据。例如,如果您更新网站,则仅更改的文件将获得新的内容地址。您的旧版本和新版本可以为其他所有内容引用相同的块。这可以使传输大型数据集的版本(例如基因组研究或天气数据)更加高效,因为您只需要传输新的或已更改的部分,而不必每次都创建全新的文件。
3
DHT
因此,总而言之,IPFS允许您为内容提供CID,并使用IPLD在Merkle-DAG中将内容链接在一起。现在,让我们继续最后一部分:如何查找和移动内容。
为了查找哪些对等方正在托管您要查找的内容(检索),IPFS使用分布式哈希表或DHT。哈希表是值键的数据库。分布式哈希表是其中所述表在所有的对等体在一个分布式网络中分割。
该libp2p项目是为IPFS生态系统提供连接,并与我们谈到的DHT和DAG都是系统的一部分。(请注意,与IPLD一样,libp2p也可以用作其他分布式系统的工具,而不仅仅是IPFS。)
一旦知道了内容的位置(即哪个或哪些对等方正在存储构成您所要访问的内容的每个块),就可以再次使用DHT 查找这些对等方的当前位置(路由)。因此,为了获得内容,您可以使用libp2p两次查询DHT。
您已经找到了内容,并且已经找到了该内容的当前位置-现在您需要连接到该内容并进行获取(交换)。为了向其他对等方请求块并向其他对等方发送块,IPFS当前使用名为Bitswap的模块。Bitswap允许您连接到具有所需内容的一个或多个对等节点,将其发送给您的需求列表(您感兴趣的所有块的列表),然后让他们向您发送您请求的块。这些块到达后,您可以通过对它们的内容进行哈希处理以获取CID来对其进行验证。(如果需要,这些CID还允许您删除重复数据块。)
除此以外,协议实验室还讨论了其他内容复制协议,其中最发达的是Graphsync。正在讨论中的一项提案,旨在扩展Bitswap协议以在请求和响应周围添加功能。
新关于libp2p的说明
使libp2p对于对等连接特别有用的是连接多路复用。传统上,系统中的每个服务都会打开一个不同的连接,以与相同类型的其他服务进行远程通信。使用IPFS,您只打开一个连接,然后多路复用所有连接。对于您的对等方需要互相讨论的所有事情,您要发送一些东西,另一端知道如何对这些块所属的位置进行排序。
这很有用,因为建立连接通常很难建立并且维护成本很高。使用多路复用,一旦建立了连接,就可以在它上进行任何所需的操作。
一切都是模块化的
正如您从本次讨论中可能已经注意到的那样,IPFS生态系统由许多模块化库组成,这些库支持任何分布式系统的特定部分。您当然可以独立使用堆栈的任何部分,或以新颖的方式将它们组合在一起。
摘要
IPFS生态系统为内容提供CID,并通过生成IPLD-Merkle-DAG将内容链接在一起。您可以使用libp2p提供的DHT发现内容,并打开与该内容的任何提供程序的连接,然后使用多路复用连接下载它。所有这些都由堆栈的“中间”(链接的唯一标识符)保持在一起,这是建立IPFS的必要基础。
注:本文内容仅供学习参考,不构成投资建议。如有任何疑问请加官方客服微信号HQAL001咨询。
微信掃描關注公眾號,及時掌握新動向
2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表比特範的觀點或立場
2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表比特範的觀點或立場