IPFS入门介绍
发布日期:2021-06-29 22:24:25 浏览次数:3 分类:技术文章

本文共 5780 字,大约阅读时间需要 19 分钟。

文章目录

一、什么是IPFS

IPFS官网:https://www.ipfs.io

IPFS中国社区: http://ipfs.cn/

IPFS的英文全称是 InterPlanetary File System,中文名叫星际文件系统。

github描述:A peer-to-peer hypermedia protocol to make the web faster, safer, and more open.

IPFS是一个点对点的分布式文件系统(比特币是一种点对点的电子现金系统),目标是为了补充(甚至是取代)目前统治互联网的超文本传输协议(HTTP),将所有具有相同文件系统的计算设备连接在一起。原理用基于内容的地址替代基于域名的地址,也就是用户寻找的不是某个地址而是储存在某个地方的内容,不需要验证发送者的身份,而只需要验证内容的哈希,通过这样可以让网页的速度更快、更安全、更健壮、更持久。

IPFS 技术就是把文件打碎,分散地存储在不同的硬盘里,下载的时候,再从这些散落在全球各地的硬盘里读取。其实用过 BT 下载的人会发现,IPFS 其实就是一种 BitTorrent 协议,开发团队对 BitTorrent 协议稍微升级了一下。

IPFS是一个协议,也是一个P2P网络,类似于BT网络,但是拥有更加强大的功能,使得IPFS拥有可以取代HTTP的潜力。

IPFS技术积累了很多年,它整合了过去几年最好的分布式系统思路,为所有人提供全球统一的可寻址空间,包括Git、自证明文件系统SFS、BitTorrent和DHT。

IPFS有一个激励层——Filecoin,是一个基于区块链的分布式存储网络,他把云存储变为一个算法市场,通过代币来做资源(存储和检索)使用者(IPFS用户)和资源的提供者(矿工)之间的桥梁,在这里,交易双方可以提出自己的需要达成交易。

ipfs命令中描述: Global p2p merkle-dag filesystem.

IPFS 分为 3 个代码库:

github.com/ipfs/ipfs - IPFS 规范
github.com/ipfs/go-ipfs - Go 实现
github.com/protocol/ipfs-webui - Web 工作台

1. 什么是BT下载?

IPFS

参考URL: https://www.zhihu.com/topic/20029262/hot

BitTorrent协议(简称BT,俗称比特洪流、BT下载、变态下载)是一个网络文件传输协议,它能够实现点对点文件分享的技术。比起其他点对点的协议,它更有多点对多点的特性,这个特点简单的说就是:下载的人越多,速度越快。下载完不马上关闭BitTorrent软件,就可以成为种子(拥有完整的档案者)分流让其他人下载。BitTorrent协议下,资源发布者不需要拥有高性能服务器,就能迅速有效地把发布的资源,传给其他的BT使用者,而且大多数的BT软件都是免费的。你可以把文件做成种子给别人下载,也可以下载别人提供的种子。

2. BT走向失败

尽管BitTorrent在技术上非常出色,但在十几年的时间里却一直未能找到合适的商业模式。最后创始人的股权被稀释到对公司毫无影响力,而投资者也纷纷离场。BitTorrent兴起于互联网早期,而当初的互联网要解决的是高效互联、信息传输的问题,HTTP协议在这一方面已经足够好用,它和浏览器的组合是互联网数据传输和展示的最佳搭档。除此之外,大多数用户文件下载完成后,并没有做种子的习惯。这就导致了BT网络的资源越来越少,传输速度也将越来越慢,需要下载的用户仍旧需要去体验苦苦等待下载完成的过程,用户体验感不可避免地越来越差。

3. IPFS能否走向成功?

万众瞩目的Filecoin全测评(附星际比特IPFS挖矿神器)

参考URL: https://www.chinaz.com/news/mt/2019/0308/999118.shtml

一:IPFS/Filecoin的出现填补了区块链的一个空白,就是储存。互联网三大基础就是储存,算力和带宽,没有存储的区块链是没办法进化的。

二:YC投资,红衫资本投资,还有很多硅谷大佬,师出有名,2017年1CO了2.5美金,是当时1CO的Top1。

三:IPFS开源协议始于2014年,但是当时没有Filecoin区块链概念这个激励层的概念。本身已经安全稳定运行4年多,在github的活跃度非常好,极客都非常喜欢。

四:IPFS的一个子模块libp2p已经被众多区块链项目采用,包括以太坊2.0和Polkadot这种明星项目,从侧面也能说明协议实验室对整个区块链的贡献和被认可度是很高的。

五:基于IPFS协议开发的Dapp和软件生态也基本已经形成。

时间会给出答案!

4. 和传统文件系统区别

IPFS和传统文件系统的一个重要区别就是——内容寻址。顾名思义,就是文件的内容定了,其地址(访问路径)也就确定了。这和我们平时存放文件不一样。通常,我可以给一张图片随意更换文件名,把它拷贝到不同的路径。这样,一模一样的文件,其访问方式却随时变化,不可能根据文件的内容确定其访问路径。

相比较而言,内容寻址的IPFS就具有一个天然的优势——防篡改。数据只要修改了一个bit,其地址就彻底变化。

二、IPFS工作原理

在这里插入图片描述

  • 每个文件及其中的所有块都被赋予一个称为加密散列的唯一指纹。
  • IPFS通过网络删除重复具有相同哈希值的文件,通过计算是可以判断哪些文件是冗余重复的。并跟踪每个文件的版本历史记录。
  • 每个网络节点只存储它感兴趣的内容,以及一些索引信息,有助于弄清楚谁在存储什么。
  • 查找文件时,你通过文件的哈希值就可以在网络查找到储存改文件的节点,找到想要的文件。
  • 使用称为IPNS(去中心化命名系统),每个文件都可以被协作命名为易读的名字。通过搜索,就能很容易地找到想要查看的文件。
  • 从IPFS的介绍可以看出, IPFS设想的是让所有的网络终端节点不仅仅只充当 Browser或Client的角色,其实人人都可以作为这个网络的运营者,人人都可以是服务器。

上传一个文件:

当我们往 IPFS 节点添加一个文件时,如果文件大小超过 256K(这个值可以设置),IPFS 会自动将文件分片,每个分片 256K,然后将切片分散存储到网络的各个节点中。每个分片都会生成唯一的哈希,然后把所有的分片的哈希值拼接之后在计算得到该文件哈希。 每个 IPFS 节点都会保存一张分布式的哈希表(DHT),包含数据块与目标节点的映射关系。无论哪个节点新增了数据,都会同步更新 DHT。

每个 IPFS 节点都会保存一张分布式的哈希表(DHT),包含数据块与目标节点的映射关系。无论哪个节点新增了数据,都会同步更新 DHT。

下载一个文件:

当我们需要访问这个文件的时候,IPFS 通过使用一个分布式哈希表,可以快速(在一个拥有 10,000,000 个节点的网络中只需要 20 跳) 地找到拥有数据的节点,获取文件的所有分片哈希,然后重新组合成完整的文件,并使用哈希验证这是否是正确的数据。

如果你启动了 IPFS 的守护进程, 可以通过 http://127.0.0.1:5001/api/v0/object/get?arg={hash} 这个 API 很方便的获取整个文件的所有分片。

而且 IPFS 不需要每个节点存储所有发布到 IPFS 上的内容。相反,每个节点只存储自己想要的数据。只有当访问某个文件的时候,节点才会去下载(同步)它。

1. IPFS的架构

参考URL: https://github.com/ChainBook/IPFS-For-Chinese/blob/master/IPFS%E6%BA%90%E7%A0%81%E6%9E%B6%E6%9E%84%E5%88%86%E6%9E%90/IPFS%E6%9E%B6%E6%9E%84%E8%A7%A3%E6%9E%90.md

IPFS至少有八层子协议栈,从上至下为身份、网络、路由、交换、对象、文件、命名、应用,每个协议栈各司其职,又互相搭配。

在这里插入图片描述身份层和路由层可以一起解释。对等节点身份信息的生成以及路由规则是通过Kademlia协议生成制定,KAD协议实质是构建了一个分布式松散Hash表,简称DHT,每个加入这个DHT网络的人都要生成自己的身份信息,然后才能通过这个身份信息去负责存储这个网络里的资源信息和其他成员的联系信息。 如同微信名片分享,在无法通过直接搜索微信号的情况下,如果你要找一个人,可以通过有这个人联系方式的朋友分享名片来建立联系。

网络层比较核心,使用的LibP2P可以支持任意传输层协议。NAT技术能让内网中的设备共用同一个外网IP,我们都体验过的家庭路由器就是这个原理。

交换层,是类似迅雷这样的BT工具。迅雷其实是模拟了P2P网络,并创建中心服务器,当服务器登记用户请求资源时,让请求同样资源的用户形成一个小集群swarm,在这里分享数据。这种方式有弊端,一位服务器是由迅雷统一维护,如果出现了故障、宕机时,下载操作无法进行。

中心化服务还可以限制一些下载请求,人们发明了一种更聪明的方式就是Bittorrent,让每一个种子节点所要存储的数据,通过哈希表存储在里面,BT工具相对不太受监管,服务更加稳定。

IPFS团队把BitTorrent进行了创新,叫作Bitswap,它增加了信用和帐单体系来激励节点去分享,我推断FileCoin有很大概率是基于Bitswap,用户在Bitswap里增加数据会增加信用分,分享得越多信用分越高。如果用户只去检索数据而不存数据,信用分会越来越低,其它节点会在嵌入连接时优先选择信用分高的。

这一设计可以解决女巫攻击,信用分不可能靠机器刷去提高,一直刷检索请求,信用分越刷越低。请求次数和存储量的变量之间有一个比较精妙的算法,类似一个抛物线,前期可以容忍很多东西,达到一定次数后不再信任。

对象层和文件层适合结合来谈,它们管理的是IPFS上80%的数据结构,大部分数据对象都是以MerkleDag的结构存在,这为内容寻址和去重提供了便利。文件层是一个新的数据结构,和DAG并列,采用Git一样的数据结构来支持版本快照。

命名层具有自我验证的特性(当其他用户获取该对象时,使用指纹公钥进行验签,即验证所用的公钥是否与NodeId匹配,这验证了用户发布对象的真实性,同时也获取到了可变状态),并且加入了IPNS这个巧妙的设计来使得加密后的DAG对象名可定义,增强可阅读性。

最后是应用层,IPFS核心价值就在于上面运行的应用程序,我们可以利用它类似CDN的功能,在成本很低的带宽下,去获得想要的数据,从而提升整个应用程序的效率。

在这里插入图片描述IPFS的团队在开发时,采用高度模块集成化的方式,像搭积木一样去开发整个项目。协议实验室团队2015年创立,到17年的时间里都在做IPLD、LibP2P、Multiformats这三个模块的开发,它们服务于IPFS底层。

Mutiformats是一系列hash加密算法和自描述方式(从值上就可以知道值是如何生成)的集合,它具有SHA1\SHA256 \SHA512\Blake3B等6种主流的加密方式,用以加密和描述nodeID以及指纹数据的生成。

LibP2P是IPFS核心中的核心,面对各式各样的传输层协议以及复杂的网络设备,它可以帮助开发者迅速建立一个可用P2P网络层,快速且节约成本,这也是为什么IPFS技术被众多区块链项目青睐的缘由。

IPLD其实是一个转换中间件,将现有的异构数据结构统一成一种格式,方便不同系统之间的数据交换和互操作。现在IPLD支持的数据结构,是比特币、以太坊的区块数据,也支持IPFS和IPLD。这也是IPFS为什么受到区块链系统欢迎的原因之二,它的IPLD中间件可以把不同的区块结构统一成一个标准进行传递,为开发者提供了成功性比较高的标准,不用担心性能、稳定和bug。

IPFS应用了这几个模块的功能,集成为一种容器化的应用程序,运行在独立节点上,以Web服务的形式,供大家使用访问。

三、IPFS的应用案例

GitHub有两款开源项目,且有对应网址,分别是音乐播放器和视频播放器。

IPFS音乐播放器网址:https://diffuse.sh/

GitHub地址:https://github.com/icidasset/diffuse

号称是国内第一个IPFS应用

IPFS视频在线播放器网址:http://www.ipfs.guide/
GitHub地址:https://github.com/download13/ipfstube

可用于测试的电影视频Hash(这里只列举两部):

神秘巨星:QmWBbKvLhVnkryKG6F5YdkcnoVahwD7Qi3CeJeZgM6Tq68
盗梦空间:QmQATmpxXvSiQgt9c9idz9k3S3gQnh7wYj4DbdMQ9VGyLh

四、参考

精通IPFS:IPFS入门简介

参考URL: http://www.lianchaguan.com/archives/6253
https://github.com/xipfs/IPFS-Internals
Awesome IPFS
https://wiki.learnblockchain.cn/ipfs/readme.html
IPFS系列02-IPFS 与 web3.0
http://www.r9it.com/20190409/ipfs-and-web3.0.html
[推荐]IPFS-For-Chinese
https://github.com/ChainBook/IPFS-For-Chinese/
[推荐]IPFS指南
参考URL: https://zhuanlan.zhihu.com/ipfsguide
IPFS解析
参考URL: https://blog.csdn.net/qq_38371144/article/details/85410985

转载地址:https://docker.blog.csdn.net/article/details/106206591 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:IPFS-安装与运行环境配置
下一篇:git-合并不相干的分支

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月29日 04时33分45秒