在本系列的第1部分中 ,我们了解了IPFS,IPFS和HTTP之间的区别,后来又创建了一个文件以添加到IPFS中,并将其通过节点网络访问。


在本部分中,我们将把它提升到一个新的水平,我们将创建一个目录结构并做实验,以更多地了解IPFS的工作原理和功能,但在此之前,我们必须着眼于Christian Lundkvist博士的例子。

来自Christian Lundkvist博士的实例IPFS

IPFS (InterPlanetary文件系统)是经过充分测试的互联网技术(如DHT , Git版本控制系统和Bittorrent)的综合 。 它创建一个允许交换IPFS对象的P2P群。 IPFS对象的整体形成一个密码认证的数据结构,称为Merkle DAG ,这个数据结构可以用来模拟许多其他数据结构。 我们将在本文中介绍IPFS对象和Merkle DAG,并给出可以使用IPFS建模的结构示例。

IPFS对象

IPFS本质上是一个用于检索和共享IPFS对象的P2P系统。 IPFS对象是一个包含两个字段的数据结构:

  • 数据 - 大小<256 kB的非结构化二进制数据块。
  • 链接 - 链接结构的数组。 这些是到其他IPFS对象的链接。

链接结构有三个数据字段:

  • 名称 - 链接的名称。
  • 散列 - 链接的IPFS对象的散列。
  • 大小 - 链接的IPFS对象的累积大小,包括其链接。

Size字段主要用于优化P2P网络,在这里我们将主要忽略它,因为在概念上它不需要逻辑结构。

IPFS对象通常由Base58编码的散列引用。 例如,让我们使用IPFS命令行工具(请在家中尝试此操作)来查看使用散列QmarHSr9aSNaPSR6G9KFPbuLV9aEqJfTk1y9B8pdwqK4Rq的IPFS对象:

  $ ipfs对象获取QmarHSr9aSNaPSR6G9KFPbuLV9aEqJfTk1y9B8pdwqK4Rq 
  {  “链接”:[  {  “名称”:“AnotherName”,  “哈希”:“QmVtYjNij3KeyGmcgg7yVXWskLaBtov3UYL9pgcGK3MCWu”,  “尺寸”:18  },  {  “名称”:“SomeName”,  “哈希”:“QmbUSy8HCn8J4TMDRRdxCbK2uCCtkQyZtY6XYv3y7kLgDC”,  “尺寸”:58  }  ]  “数据”:“Hello World!”  } 

读者可能会注意到所有散列都以“Qm”开头。 这是因为哈希实际上是一个多哈哈,这意味着哈希本身在多哈哈的前两个字节中指定哈希函数和哈希长度。 在上面的例子中,前面两个字节的十六进制数是 1220 ,其中 12 表示这是SHA256哈希函数,而 20 是哈希的长度(以字节为单位) - 32个字节。

数据和已命名的链接为IPFS对象的集合提供了一个Merkle DAG - DAG(指向无环图)的结构, Merkle表示这是一个使用加密哈希来加密内容的加密认证的数据结构。 作为练习留给读者思考为什么在这个图表中不可能有循环。

为了可视化图形结构,我们将通过节点中的Data以图形形象化IPFS对象,并且Links将图形边缘定向到其他IPFS对象,其中链接的Name是图形边缘上的标签。 上面的例子可视化如下:


现在让我们做一些实际的东西来验证它。 为此,我们将继续第1部分 。 因此,在ipfsdir目录下创建一个子目录并将其命名为ipfssubdir。ipfssubdir下创建一个.txt文件并将其命名为 ipfsrocks.txt的内容为IPFS Rocks !!

当我们从ipfsdir外部输入以下内容时,我们可以看到目录结构。

  $ ls -R ipfsdir / 
  hello.txt ipfssubdir 
  ipfsdir // ipfssubdir: 
  ipfsrocks.txt 

现在让我们将这些文件和目录添加到IPFS

  $ ipfs add ipfsdir -r 
 添加了QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u ipfsdir / hello.txt 
 添加了QmdWAgBc1yjQz6G3wNSmeQk7ZFBAh7LvaL7GSiFDEvCMGT ipfsdir / ipfssubdir / ipfsrocks.txt 
 添加QmSC7kzH6k6W8Pf8i98NivocmT2jcYPgDhZtMWahmZUczg ipfsdir / ipfssubdir 
 添加了QmRuftkYACe3pCjyoZGXYyr1HdqctecmPcq8C9oFyMxgaS ipfsdir 

我们可以看到,对于hello.txt文件,它已经生成了与第1部分中相同的散列。

现在,我将在ipfssubdir中添加一个与hello.txt相同内容的helloworld.txt文件, 即Hello World ,并将其添加到IPFS。

让我们看看IPFS如何添加这些文件。

  $ ipfs add ipfsdir -r 
 添加了QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u ipfsdir / hello.txt 
 添加了QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u ipfsdir / ipfssubdir / helloworld.txt 
 添加了QmdWAgBc1yjQz6G3wNSmeQk7ZFBAh7LvaL7GSiFDEvCMGT ipfsdir / ipfssubdir / ipfsrocks.txt 
 添加了Qmd2zXenEQVBGt1wbYYDXZFBQiXCvfU7JkZb7u1Sw7ujRd ipfsdir / ipfssubdir 
 添加了QmNoX6nF2ccQkH3AHKy4HvphK8WwHa19eez7YqjrxEUE2z ipfsdir 

如果我们观察,我们可以看到IPFS为ipfsdir / hello.txt和ipfsdir / ipfssubdir / helloworld.txt生成了相同的哈希码,因为它们都具有相同的内容。 我将在短时间内对此进行更多解释。

让我们像之前那样让这些文件被节点网络访问

  $ ipfs pin add QmNoX6nF2ccQkH3AHKy4HvphK8WwHa19eez7YqjrxEUE2z 

现在启动守护程序将IPFS机器连接到网络并访问文件

  $ ipfs守护进程 正在初始化守护进程... 将当前ulimit调整为2048 ...  ................................... 

在新终端运行同行

  $ ipfs swarm peers 

运行下面的链接检查目录,完全加载到IPFS上: https ://ipfs.io/ipfs/QmNoX6nF2ccQkH3AHKy4HvphK8WwHa19eez7YqjrxEUE2z

ipfsdir

ipfssubdir

上面的例子以图形方式显示如下:

文件系统的版本控制

为了理解版本控制,我们现在将文件helloworld.txt的内容更改为Hello World IPFS。 我们可以看到已更改文件和相应目录的哈希值的变化。

  $ ipfs add ipfsdir -r 
 添加了QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u ipfsdir / hello.txt 
 添加了QmamMpGqGkkf3v1iApshHoTHjx2PXJPJWvqQ8y55eeeoYn ipfsdir / ipfssubdir / helloworld.txt 
 添加了QmdWAgBc1yjQz6G3wNSmeQk7ZFBAh7LvaL7GSiFDEvCMGT ipfsdir / ipfssubdir / ipfsrocks.txt 
 添加了QmWtucfHnZhbURkUAnzJtsoj7pVi8TmLp9K1WSD1C2jJqc ipfsdir / ipfssubdir 
 添加了QmbzoYKQ8FvWDTQ5KX8LpeRWt4w48QXRgaFaKuLq14pJ4M ipfsdir 

正如我前面提到的那样,IPFS确实像Git一样进行版本控制。 我们举例说明我们以前的文件系统目录结构以及两个提交:第一个提交是原始结构,在第二个提交中,我们已将文件helloworld.txt更新为Hello World IPFS,而不是原始Hello World。

上面的变化可以通过图形显示如下:

正如我们所看到的,IPFS有潜力取代或补充HTTP。 人们可以很容易地看到现在使用IPFS的一些主要优点,我会提到 - 数据 不可变性, 数据分布和速度数不多。

数据不可变性

正如我们所看到的,IPFS上的文件被赋予了一个生成的散列值。 正如上面的例子 -

QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u

这是非常漫长和独特的。 两个文件几乎不可能具有相同的散列。 相同文件的哈希值相同,如果文件更改,哈希值也会更改。 我们可以将这些散列值视为地址。 使用这个地址可以访问文件。 这就是系统如何实现不变性。 没有地址改变,没有人可以改变文件。 这也为我们提供了数据重复数据删除。 如果偶然两个人在IPFS上传完全相同的文件,他们将得到相同的哈希地址。 所以,这是不变的。

数据分布和速度

正如我前面提到的那样,IPFS是一种类似于BitTorrent的点对点协议。 当我下载一个文件时,其中一些数据可以与其他人共享。 因此,让我们说一下San Fransisco的一台电脑(客户端)从波士顿市的一台计算机(服务器)请求一个文件。 在传统的HTTP客户端 - 服务器模式中,由于SFO和波士顿市之间的距离,通信需要更长的时间。 此外,如果该文件很受欢迎,来自其他位置的许多客户端会询问该文件,从而在波士顿的服务器上创建负载。 如果万一服务器机器出现故障,则会出现404错误。 而在IPFS中,San Fransisco的其他人可能已经从波士顿的服务器上下载了这个文件,然后我可以从他们那里下载它。 如果该文件很受欢迎,那么附近的更多节点将拥有共享副本,从而将负载从波士顿服务器上分离下来并分发。 在这种情况下,即使在波士顿的服务器出现故障,我仍然可以从其他节点访问该文件,并且可以确信没有人会因为我们不久前讨论过的不变特性而篡改文件。


那么,我们正在走向一个分散和更永久的互联网世界 链接永远不会返回404错误并减少对集中式服务器的依赖的世界。


https://medium.com/@itsromiljain/ipfs-the-permanent-distributed-web-continues-ffbe1919bb94

【译】IPFS — The Permanent, Distributed Web Continues…..相关推荐

  1. 【译】IPFS — The Permanent, Distributed Web

    分布式网络已经吸引了我很长时间的注意力. 在对区块链进行一些研究时,我遇到了IPFS. 这引起了我的注意一段时间,我对永久的分布式Web概念感到惊讶. 虽然它不是新的,但我们都看到了它的部分内容(部分 ...

  2. Cloudflare通过集成ENS和IPFS推出通往分布式Web的网关

    互联网托管巨头Cloudflare推出了一个新的直接网关以支持分布式Web.根据周三的博客文章,Cloudflare将能够通过新的索引服务连接到在以太坊名称服务(ENS)和星际文件系统(IPFS)上托 ...

  3. 网页无障碍php,【译】开发无障碍的Web组件

    原文: http://www.zcfy.cc/article/320 这篇文章的审校工作是由Mallory van Achterberg完成的.谢谢所有SitePointer的审校者,因为你们,Sit ...

  4. Computer:IPFS(星际文件系统)的简介、安装、使用方法之详细攻略

    Computer:IPFS(星际文件系统)的简介.安装.使用方法之详细攻略 目录 IPFS的简介 1.IPFS的应用 IPFS的安装 IPFS的使用方法 1.下载文件 第一步,启动IPFS节点 第二步 ...

  5. 蜗牛星际最大加到多少内存_从零到星际英雄

    蜗牛星际最大加到多少内存 by Carson Farmer 通过卡森·法默 从零到星际英雄 (From Zero to Interplanetary Hero) 有趣的入门指南,介绍了基于浏览器的IP ...

  6. 区块链技术入门,涉及哪些编程语言?

    作者:Fickr Sung孫啟誠 链接:https://www.zhihu.com/question/46729645/answer/259780518 区块链学习更多的是去理解这种去中心化的思想和去 ...

  7. 区块链技术工坊 - 线下区块链技术分享

    尽管网络上,已经有不少文章讨论IPFS,不过真正讲明白IPFS想做什么的很少,文本尝试站在未来Web3.0的高度来看看IPFS究竟用来解决什么问题. DApp 的缺陷 对区块链有所了解的同学,知道区块 ...

  8. 【学习】Deep Learning for Deepfakes Creation and Detection

    论文题目:Deep Learning for Deepfakes Creation and Detection 翻译:基于深度学习的Deepfake创建与检测 作者: Thanh Thi Nguyen ...

  9. 区块链是什么,如何学习区块链技术?快速上手

    一.区块链是什么? 二.从技术角度学习区块链技术? 一.区块链是什么?区块链有很多的定义,大家的说法都不一样,业界都还没有统一.每个人心中都有自己的哈姆雷特.所以此处就不做定义了.也可以参考其他回答. ...

最新文章

  1. BCH升级新版本,实不相瞒该抄底了
  2. GRE写作-政府官员必须执行人民意愿还是独立决策?
  3. vue使用element日期选择器,选择日期少一天的问题
  4. poj 1797 Dijkstra算法
  5. 梁迪:源于热爱乐于分享,MVP代表圆桌会议
  6. arcgis将小于0的数值设置成0.01
  7. Python3与OpenCV3.3 图像处理(一)--环境搭建与简单DEMO
  8. mysql字段为空 不作为查询条件_Mysql基本语法知识点小结
  9. 闪电邮修改服务器设置,网易闪电邮添加outlook邮箱的方法(图文教程)
  10. 兼容浏览器的insertAdjacentHTML
  11. 时点数列序时平均数_时点数列序时平均数计算方法研究
  12. window wlan 相关服务
  13. 【算法模板】链表篇—(附牛客习题)
  14. 记录从微信商户获取微信支付账单过程
  15. 光电二极管的工作原理
  16. VS2022安装.Net Framework4.0方法
  17. 关于Dubbo的面试题,建议收藏
  18. 数学建模对计算机考研有用吗,数学建模有必要参加吗
  19. #html#画哆啦a梦
  20. 将open目录及子目录和文件删除

热门文章

  1. android eclipse关联源码,以及源码(代码)以及jar查看软件
  2. 海量数据库及分区4——《12年资深DBA教你Oracle开发与优化——性能优化部分》...
  3. Spring+Quartz 集群
  4. 面向对象基础回顾(二)
  5. [导入]查询锁定表中非锁定记录。
  6. ubuntu14.04环境下spyder的安装
  7. 基于fiddler的网络爬虫校园网自动登陆系统
  8. 【C语言】字节对齐问题(以32位系统为例)
  9. LIBSVM的使用方法以及参数注释总结
  10. h5支付不能打开支付宝 ios_IOS H5支付调起微信支付宝客户端问题总结