IPFS是对等(p2p)存储网络可以通过鈳能中继信息或存储信息(或同时做这两者)的对等方访问内容,并且这些对等方可以位于世界任何地方IPFS知道如何通过其内容地址找到您要的内容,而不是在哪里
关于IPFS,需要了解三点重要信息
首先让我们看一下内容寻址以及该内容如何链接在一起IPFS堆栈的“中间”部分將生态系统连接在一起。一切都建立在能够通过链接的唯一标识符查找内容的基础上
1.内容寻址和链接数据
IPFS使用内容编址通过内容中的内嫆而不是内容的位置来标识内容。您一直都在按内容查找项目例如,当您在图书馆里寻找一本书时经常会要求书名。这是内容寻址洇为你问什么是。如果您使用位置寻址找到那本书,你会问它通过在那里它是:“我想要的书那是在二楼第一组,倒数第三架左四周书”。如果有人搬了那本书那你真倒霉!
互联网和计算机上都是一样的。现在可以按位置找到内容,例如…
相比之下每一个使用IPFS協议的都有一个,即CID即其哈希值。散列对于其来源内容而言是唯一的即使与原始内容相比看起来可能很短。如果您不熟悉哈希请查看获取介绍。
通过散列进行内容寻址已成为从分布式支持代码到运行加密货币的怎么做区块链链的分布式系统中连接数据的一种广泛使用嘚方法但是,这些系统中的基础数据结构不一定可以互操作
这就是的。哈希标识内容而IPLD在数据结构之间转换。由于不同的分布式系統以不同的方式构造其数据因此IPLD提供了一些库,用于组合可插拔模块(每种IPLD节点的解析器)来解析多个链接节点之间的路径选择器或查询(允许您探索数据,无论其基础是什么)协议)。IPLD提供了一种在内容可寻址的数据结构之间进行转换的方法:“哦您使用Git样式,鈈用担心我可以关注这些链接。哦您使用以太坊,我知道了我也可以关注那些链接!”
IPFS协议使用IPLD从原始内容获取IPFS地址。IPFS对于如何将數据***为DAG有其自己的偏好和约定(有关以下DAG的更多信息!);IPLD使用这些约定将IPFS网络上的内容链接在一起
IPFS生态系统中的其他所有内容都基于此核心概念:链接的可寻址内容是使其余工作正常进行的基本连接元素。
IPFS和许多其他分布式系统利用了称为有或DAG 的数据结构具体来說,它们使用Merkle-DAG它们是DAG,其中每个节点都有一个标识符该标识符是节点内容的哈希值。听起来有点熟这涉及到上一节中介绍的CID概念。查看此CID链接数据概念的另一种方法:通过其哈希值识别数据对象(如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图如何开始形成的。要直观地了解这个概念请查看我们的。
Merkle-DAG嘚另一个有用功能是将内容分成多个块如果您有两个相似的文件,它们可以共享Merkle-DAG的一部分也就是说,不同Merkle-DAG的一部分可以引用相同的数據例如,如果您更新网站则仅更改的文件将获得新的内容地址。您的旧版本和新版本可以为其他所有内容引用相同的块这可以使传輸大型数据集的版本(例如基因组研究或天气数据)更加高效,因为您只需要传输新的或已更改的部分而不必每次都创建全新的文件。
洇此总而言之,IPFS允许您为内容提供CID并使用IPLD在Merkle-DAG中将内容链接在一起。现在让我们继续最后一部分:如何查找和移动内容。
为了查找哪些对等方正在托管您要查找的内容(发现)IPFS使用或DHT。哈希表是值键的数据库甲分布式哈希表是其中所述表在所有的对等体在一个分布式网络分割。要查找内容请问这些同行。
该是IPFS生态系统提供连接并互相交谈的DHT和手柄同行的一部分。(请注意与IPLD一样,libp2p也可以用作其他分布式系统的工具而不仅仅是IPFS。)
一旦知道了内容的位置(即哪个或哪些对等方正在存储构成您所要访问的内容的每个块)就可鉯再次使用DHT 查找这些对等方的当前位置(路由)。因此为了获得内容,您可以使用libp2p两次查询DHT
您已经找到了内容,并且已经找到了该内嫆的当前位置-现在您需要连接到该内容并进行获取(交换)为了向其他对等方请求块并向其他对等方发送块,IPFS当前使用名为的模块Bitswap允許您连接到具有所需内容的一个或多个对等节点,将其发送给您的需求列表(您感兴趣的所有块的列表)然后让他们向您发送您请求的塊。这些块到达后您可以通过对它们的内容进行哈希处理以获取CID来对其进行验证。(如果需要这些CID还允许您删除重复数据块。)
还其中最发达的是。正在讨论中的一项提案旨在以在请求和响应周围添加功能。
使libp2p对于对等连接特别有用的是连接多路复用传统上,系統中的每个服务都会打开一个不同的连接以与相同类型的其他服务进行远程通信。使用IPFS您只打开一个连接,然后多路复用所有连接對于您的同龄人需要互相讨论的所有事情,您要发送一些东西另一端知道如何对这些块所属的位置进行排序。
这很有用因为建立连接通常很难建立并且维护成本很高。使用多路复用一旦建立了连接,就可以在它上进行任何所需的操作
正如您从本次讨论中可能已经注意到的那样,IPFS生态系统由许多模块化库组成这些库支持任何分布式系统的特定部分。您当然可以独立使用堆栈的任何部分或以新颖的方式将它们组合在一起。
IPFS生态系统为内容提供CID并通过生成IPLD-Merkle-DAG将内容链接在一起。您可以使用libp2p提供的DHT发现内容并打开与该内容的任何提供程序的连接,然后使用多路复用连接下载它所有这些都由堆栈的“中间”(链接的唯一标识符)保持在一起。这是建立IPFS的必要部分