1. 首页 > 知趣科技

深入理解IPFS(一):初级到高级全指南

这篇文章是“深入理解IPFS”系列文章的第一篇,该系列文章将帮助各位理解IPFS的基本概念,我们会尽量让这个系列尽可能的不枯燥。

系列分为六个部分:

?

●?深入理解IPFS(1/6):初级到高级指南:在这一部分中,我们将尝试去友们什么是IPFS,为什么需要它以及我们可以用它来做什么。我们将简要介绍IPFS的所有的底层组件(后面的部分将对此进行深入分析),了解它们是讲解协同工作的。如果你想要的是一个简短的总结,而不想了解“引擎盖下面的”有什么,那么这一部分就是为你准备的。

●?深入了解IPFS(2/6):什么是InterPlanetary Linked Data(IPLD)?:在本部分中,我们将更加深入研究基于内容可寻址网络的数据模型。我们将探索IPLD的细节和规格,逐渐熟悉IPLD并使用它。

●?深入了解IPFS(3/6):?什么是星际命名系统(IPNS)?:在这一部分中,我们将深入研究分布式网络的命名系统。我们将研究它的使用规格以及工作原理,还将把它与今天的命名系统(即DNS)进行比较,列出IPNS与DNS的优缺点列表。

●?深入理解IPFS(4/6):什么是MultiFormats? 在这一部分中,我们将讨论为什么我们需要MultiFormats,它是讲解工作的,以及您作为用户/开发人员可以用它做什么?

●?深入理解IPFS(5/6):什么是Libp2p? 在这一部分中,我们将研究IPFS的网络层,以及它对IPFS的巨大贡献。我们将通过它的工作,规格和使用方法来友们,以方便到底更清楚的了解它。

●?深入理解IPFS(6/6):什么是Filecoin? 在这一部分中,我们将讨论IPFS的激励层,Filecoin。我们研究了Filecoin的白皮书和实施规范,包括DSN Distributed Storage Network(分布式存储网络)、复制证明、存储证明、数据存储市场和检索市场以及基于Filecoin协议的智能合约的实现。我们还讨论了在白皮书中没有提到的Filecoin协议中的一些缺陷,并提出了对Filecoin协议的一些改进。

希望您可以从本系列中学到很多关于IPFS的知识。让我们开始吧!

?

当你问某人关于最新的“复仇者联盟”电影时,他们可能不会说“在这个服务器上的这个子域里,然后在这个文件路径下,斜杠“漫威” 斜杠 “复仇者联盟”点 mp4”之类的话。相反,他们会描述视频的内容:“宇宙的一半被灭霸摧毁……”对于人类来说,这显然是一种最直观的思考方式,但这并不是我们今天在网络上访问内容的方式。尽管如此,诸如IPFS之类的分布式协议还是使用了基于内容寻址(使用文件的内容标记和查找内容)来查找分布式网络上存储的内容。在本文中,我们将探讨一下整个IPFS是讲解工作的,涉及到哪些不同的组件,以及它们是讲解协同工作的。为此,我们将向IPFS添加一个文件,然后研究向IPFS添加文件时会发生些什么。

?

让我们首先向IPFS添加一张照片。我们添加这个……

https://unsplash/photos/rW-I87aPY5Y

?

顺便提一下,您必须在您的电脑系统上安装IPFS才能与我一起使用。可以从这里安装。安装IPFS之后,必须启动IPFS守护进程(该软件与IPFS网络通信,以便从网络中添加和检索数据)。您可以通过方式启动守护进程 ipfs daemon ?

?

当您将照片添加到IPFS时,会发生情况:

?

?

在终端我得到了这个:

?

?

你可以在这里看到最后的哈希值:

?

但是我们没有看到与中间2个步骤(Raw和Digest)相关的任何内容。这一切都是发生在“引擎盖下”的。

?

当我们添加图像时,我们将图像转换为计算机可以理解的Raw(原始)数据。现在,它具有内容寻址性(我们在上面讨论过),我们要想出一个方法,通过这个方法,我们可以将这个图像数据转换成一个标签,这个标签则需要具有标识它的内容的唯一性。

?

这就是哈希函数发挥作用的地方了。

?

哈希函数将数据(来自文本、照片、整本圣经等的任何数据)作为输入,并给出一个输出(Digest),其输出必须是惟一的。如果我们改变这个图像中的一个像素,那么输出将会不同。这是它的防篡改特性,使IPFS成为一个自我认证的文件系统。因此,您把这张照片转印给他人,他/她则可以轻松的检查收到的照片是否被篡改过。

?

此外,您不能知道输入是什么(在本例中是猫的照片),而只能看到它的输出(Digest)。因此,这也确保了内容的安全性。

?

现在,我们将Raw Data(原始图像数据)传递到SHA256散列函数中,并得到唯一的摘要(Digest)。现在,我们需要将这个摘要转换为CID(内容标识符)。当我们试图取回图像时,IPFS将搜索这个CID(内容标识符)。为此,IPFS使用了一种称为Multihash的技术。

?

要了解Multihash的重要性,请考虑这种情况。

?

您将一个图像存储在互联网上,并且您拥有其CID,您可以将其提供给任何想要获取此图像的人。但是如果未来您发现SHA256损坏了(这意味着此过程不再具有防篡改和安全性)并且您希望使用SHA3(以确保防篡改和安全性),那该怎么办呢?这意味着要改变将照片转换为CID的整个过程,而之前的CID将毫无用处……

?

在这种情况下,上面的问题似乎可能只是一个小问题,但您应该知道的是这些哈希函数可以获得数十亿美元的资金。所有银行,国家安全机构等都使用这些哈希函数来确保其安全地运行。如果没有它,即使是浏览器上每个站点地址旁边看到的绿色锁也无法运行。

?

为了解决这个问题,IPFS使用了多哈希

(Multihash)。Multihash允许我们自定义哈希散列。因此,根据使用的哈希函数不同,我们可以有多个版本的CID。我们将在本系列的第4部分中详细讨论Multihash,并深入研究Multiformat。

?

现在我们已经将照片添加到IPFS中,但这还不是全部。现在的实际情况是这样的:

?

大文件被分块,散列组织成IPLD(Merkle DAG)

?

如果文件大于256kb,我们则将它们分解为更小的部分,以便所有部分都等于或小于256kb。我们可以看到照片块使用的这个命令:

ipfs object get Qmd286K6pohQcTKYqnS1YhWrCiS4gz7Xi34sdwMe9USZ7u

?

然后这给了我们15个块,每个块小于256kb。首先将这些块中的每一个都转换为摘要(Digest),然后再转换为CID。

?

{

“Links”: [

{

“Name”: “”,

“Hash”: “QmZ5RgT3jJhRNMEgLSEsez9uz1oDnNeAysLLxRco8jz5Be”,

“Size”: 262158

},

{

“Name”: “”,

“Hash”: “QmUZvm5TertyZagJfoaw5E5DRvH6Ssu4Wsdfw69NHaNRTc”,

“Size”: 262158

},

{

“Name”: “”,

“Hash”: “QmTA3tDxTZn5DGaDshGTu9XHon3kcRt17dgyoomwbJkxvJ”,

“Size”: 262158

},

{

“Name”: “”,

“Hash”: “QmXRkS2AtimY2gujGJDXjSSkpt2Xmgog6FjtmEzt2PwcsA”,

“Size”: 262158

},

{

“Name”: “”,

“Hash”: “QmVuqvYLEo76hJVE9c5h9KP2MbQuTxSFyntV22qdz6F1Dr”,

“Size”: 262158

},

{

“Name”: “”,

“Hash”: “QmbsEhRqFwKAUoc6ivZyPa1vGUxFKBT4ciH79gVszPcFEG”,

“Size”: 262158

},

{

“Name”: “”,

“Hash”: “QmegS44oDgNU2hnD3j8r1WH8xZ2RWfe3Z5eb6aJRHXwJsw”,

“Size”: 262158

},

{

“Name”: “”,

“Hash”: “QmbC1ZyGUoxZrmTTjgmiB3KSRRXJFkhpnyKYkiVC6PUMzf”,

“Size”: 262158

},

{

“Name”: “”,

“Hash”: “QmZvpEyzP7C8BABesRvpYWPec2HGuzgnTg4VSPiTpQWGpy”,

“Size”: 262158

},

{

“Name”: “”,

“Hash”: “QmZhzU2QJF4rUpRSWZxjutWz22CpFELmcNXkGAB1GVb26H”,

“Size”: 262158

},

{

“Name”: “”,

“Hash”: “QmZeXvgS1NTxtVv9AeHMpA9oGCRrnVTa9bSCSDgAt52iyT”,

“Size”: 262158

},

{

“Name”: “”,

“Hash”: “QmPy1wpe1mACVrXRBtyxriT2T5AffZ1SUkE7xxnAHo4Dvs”,

“Size”: 262158

},

{

“Name”: “”,

“Hash”: “QmcHbhgwAVddCyFVigt2DLSg8FGaQ1GLqkyy5M3U5DvTc6”,

“Size”: 262158

},

{

“Name”: “”,

“Hash”: “QmNsx32qEiEcHRL1TFcy2bPvwqjHZGp62mbcVa9FUpY9Z5”,

“Size”: 262158

},

{

“Name”: “”,

“Hash”: “QmVx2NfXEvHaS8uaRTYaF4ExeLaCSGpTSDhhYBEAembdbk”,

“Size”: 69716

}

],

“Data”: “\b               ?”

}

?

IPFS使用IPLD (IPLD使用Merkle DAG或称作有向无环图)去管理所有的块并将其链接到基本的CID。

?

IPLD (objects)由2个组件组成:

●?Data数据 – 大小小于256 kB的非结构化二进制数据的blob (binary large object二进制大对象)。

●?Links链接 – 结构的数组。指向其他IPFS对象的链接。

每一个IPLD链接(在我们的例子中是上面提到的15个链接)都有3个部分:

●?Name?名称 – 链接的名称

●?Hash?哈希 – 链接的IPFS对象的哈希值

●?Size大小 – 链接的IPFS对象的累积大小,包括跟随其链接的大小

?

IPLD是建立在关联数据的基础上的,这是分布式网络社区中的人们已经讨论了很长一段时间的事情了。这也是蒂姆·伯纳斯-李(Tim Berners-Lee)多年来一直在做的事情,他的新公司Solid正在围绕着它开展业务。

?

使用IPLD还有其他好处。为了友们这一点,让我们创建一个名为photos的文件夹,并在其中添加2张照片(猫的照片与相同照片的副本)。

?

?

正如您所看到的,这两张照片都具有相同的哈希值(这证明我没有更改图像副本中的任何内容)。这为IPFS 添加了删除重复数据属性。因此,即使您的朋友将相同的猫照片添加到IPFS,他也不会复制图像。这节省了大量的存储空间。

?

想象一下,如果我把这篇文章存储在IPFS上,它的每个字母都是分块的,并且有一个惟一的CID,那么这篇文章就可以由字母(大写和小写)、数字和一些特殊字符组合而成。我们将只存储每个字母、数字和字符一次,并根据数据结构中的链接重新排列就可以了。

?

IPFS也有一个命名系统,称为星际命名系统(IPNS)。为了理解它的重要性,让我们假设您创建了一个网站,并将其托管在某个域名中。对于这个例子,我们将以我的网站为例:https://vaibhavsaini/

?

如果我想在IPFS上托管它,简单地在IPFS上添加网站文件夹就可以。为此,我已经使用wget下载了网站。如果你使用的是基于Linux的操作系统,比如Ubuntu或MAC,那么你可以和我一起试试。

?

下载本网站(或任何网站):

本文采摘于网络,不代表本站立场,转载联系作者并注明出处:http://www.fjxmta.com/zqkj/33264.html

联系我们

在线咨询:点击这里给我发消息

微信号:wx123456