乐趣区

站在Web3.0 理解IPFS是什么

尽管网络上,已经有不少文章讨论 IPFS,不过真正讲明白 IPFS 想做什么的很少,文本尝试站在未来 Web3.0 的高度来看看 IPFS 究竟用来解决什么问题。
DApp 的缺陷
对区块链有所了解的同学,知道区块链维护的是一个中立的(去中心)、共同信任、难以篡改的数据库、智能合约创造的是一个完全透明(不被干扰)的运行规则,因此可以解决信任问题。
一切看起来很美好,我们可以开发去中心化应用 DApp 解决信任问题,由此也确实产生了很多的博彩类 DApp 游戏。
不熟悉 DApp 的同学可以看我另一篇文章程序员如何切入区块链去中心化应用开发.
细心的同学,也许会发现一个问题,虽然 DApp 的后台逻辑(智能合约)是在无中心的节点上运行的透明的规则,但是我们看到内容却来自于一台无信任的中心化服务器。
这是由当前互联网规则 - 超文本媒体传输协议(HTTP)决定的,简单来讲,在这个协议下,当我们在浏览器输入一个网址时,总是会先找到这个网址(域名)对应的服务器 IP 地址,然后请求服务器,并把服务器的响应显示在浏览器。
这种方式下文件能否访问,完全取决于服务器,服务器也许会关闭、内容获取被篡改或删除,对用户都无法保证。我自己看到好内容把网页收藏的习惯,经常会出现过一段时间再去访问的时候,页面已经不存在了。
IPFS 想要做什么
IPFS – InterPlanetary File System 星际文件系统,多数人谈到 IPFS 都只讲到它的去中心化存储,其实 IPFS 想要做的远不只存储,其目标是取代 HTTP,成为 Web3.0 时代的基础协议。我们从其官网对 IPFS 的定义就可以看到其雄心。
尽管 Web3.0 目前没有明确定义,从 2014 年以太坊联合创始人 Gavin Wood 提出分布式网络的 Web3.0 概念开始,业界普遍认为 Web3.0 特征应该是 分布式、可信任。
在官网的有这样两个描述:
IPFS is the Distributed Web
A peer-to-peer hypermedia protocol to make the web faster, safer, and more open.
IPFS aims to replace HTTP and build a better web for all of us.
翻译过来就是:1. IPFS 是分布式 Web,是点对点的超媒体协议,以构建更快、更安全、更开放的网络。2. IPFS 旨在取代 HTTP,为我们构建一个更好的 web。
当然,要完全取代 HTTP 还有一段路要走,最大的坎是怎样让‍‍主流的浏览器支持 IPFS 协议,‍‍现在是通过 HTTP 网关的方式访问 IPFS 网上面存在的文件。未来 IPFS 能取代 Http 的话?就是通过网络浏览器里直接输入 ipfs:// 文件 hash 访问内容,‍‍目前这种方式访问 IPFS 必须依靠浏览器插件 ipfs 伴侣,并且这个插件的使用不广泛。
注意,这里提到的浏览器,只是沿用这个名词,Web3.0 的浏览器也许不叫浏览器,它更可能是数字钱包和浏览器的组合体,现在浏览器上发起交易也同样需要依靠钱包插件进行签名。所以这样一个形态的产品也是大家的机会,这是一个全新的超大入口级产品。
即未来期望的访问方式是这样的:ipfs://Qme2qNy61yLj9hzDm4VN6HDEkCmksycgSEM33k4eHCgaVu
而现在通过网关访问是这样的:http://127.0.0.1:8080/ipfs/Qme2qNy61yLj9hzDm4VN6HDEkCmksycgSEM33k4eHCgaVuhttps://ipfs.io/ipfs/Qme2qNy6…
IPFS 是怎么做的
IPFS 是一种内容可寻址、版本化、点对点超媒体的分布式存储、传输协议。
我们知道在现在的网络服务里,内容是基于位置(IP)寻址的,就是在查找内容的时候,需要先找到内容所在的服务器(根据 IP),然后再在服务器上找对应的内容。而在 IPFS 的网络里,是根据内容寻址,每一个‍‍上传到 IPFS 上面去的文件、文件夹,都是以 Qm 为开头字母的哈希值,无需知道文件存储在哪里,通过哈希值就能够找到这个文件,这种方式叫内容寻址。
工作原理
在 IPFS 系统中,内容会分块存放(如果内容很小就会直接存在 DHT 中),并分散存储在 IPFS 网络中的节点上(不过目前的 IPFS 实现,一个节点会完整保存内容的所有区块)。系统会给内容的每一个块计算哈希值,然后把所有块的哈希值拼凑起来,再计算一次哈希值,从而得到最终的哈希值。同时每个节点会维护一张 DHT(分布式哈希表),包含数据块与目标节点的映射关系。
在 IPFS 中是通过哈希去请求文件的,它就会使用这个分布式哈希表找到文件所在的节点,取回文件根据哈希重新组合文件(同样也会验证文件)。
IPFS 的特点
根据前面的原理,我们可以推倒出 IPFS 的几个特点:

当我们知道一个文件的哈希值之后,可以确保文件不被修改,即可以确保访问的文件是没有被篡改的。因为根据哈希的特点,哪怕源文件有一丁点的更改,对应的哈希值也会完全不同。
(理论上) 如果 IPFS 得以普及,节点数达到一定规模,内容将永久保存,就算部分节点离线,也不会影响文件的读取,不像现在的收藏会失效。
由于 IPFS 是一个统一的网络,只要文件在网络中被存储过,除了必要的冗余备份,文件不会被重复存储,对比现有互联网,信息孤岛,各中心间不共享数据,数据不的不重复存储,IPFS 一定意义上节约了空间,使得整个网络带宽消耗更低,网络更加高效。
相对于中心化存储的容易遭受 DDOS 攻击,IPFS 采用分布式存储网络,文件被存储在不同的网络节点,天然避免了 DDOS 攻击,同时一个文件可以同时从多个节点同时下载,通信的效率也会更高。

IPNS
在 IPFS 中,一个文件的哈希值完全取决于其内容,修改它的内容,其相应的 Hash 值也会发生改变。这样有一个优点是保证文件的不可篡改,提高数据的安全性。但同时我们在开发应用(如网站)时,经常需要更新内容发布新版本,如果每次都让用户每次在浏览器中输入不同的 IPFS 地址来访问更新后内容的网页,这个体验肯定是无法接受的。
IPFS 提供了一个解决方案 IPNS(Inter-Planetary Naming System),他提供了一个被私钥限定的 IPNS 哈希 ID(通常是 PeerID),其用来指向具体 IPFS 文件哈希,当有新的内容更新时,就可以更新 IPNS 哈希 ID 的指向。
为了方便大家理解,做一个类比,和 DNS 类似,DNS 记录了域名指向的 IP 地址,如果服务器更改,我们可以更改 DNS 域名指向,保证域名指向最新的服务器。IPNS 则是用一个哈希 ID 指向一个真实内容文件的 Hash,文件更新这更改哈希 ID 的指向,当然更新指向需要有哈希 ID 对应的私钥。
通过 IPNS 访问文件的方式如下:
利用插件访问:ipns://QmYM36s4ut2TiufVvVUABSVWmx8VvmDU7xKUiVeswBuTva 利用网关访问:http://127.0.0.1:8080/ipns/QmYM36s4ut2TiufVvVUABSVWmx8VvmDU7xKUiVeswBuTva
IPNS 同样兼容 DNS,使用 DNS TXT 记录域名对应的 IPNS 哈希 ID,就可以域名来替换 IPNS 哈希 ID 来进行访问。从而实现更容易读写和记忆。
例如使用以下方式简化访问:ipns://ipfs.iohttps://ipfs.io/ipns/ipfs.io/
IPFS/IPNS 如果使用,将在后面的文章进一步介绍。
小结
IPFS 是一项非常激动人心的技术,尽管它仍在发展的早期(区块链也是),还有很多问题需要我们一起解决,如 NAT 穿透问题,浏览器支持问题,内容存储激励问题,存储数据安全与隐私保护问题。但是通过 IPFS + 区块链将真正创建 Web3.0 时代的应用,这是一个完全可信的、自运转(不停机)的应用,它可以做什么我不知道,我对未来充满期待。
欢迎来知识星球提问,星球内已经聚集了 300 多位区块链技术爱好者。深入浅出区块链 – 系统学习区块链,打造最好的区块链技术博客。

退出移动版