首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

区块链】IPFS不是一个单纯的产品,而是一个体系

本篇文章会涉及到一些技术描述,需要读者在阅读之前对IPFS已经有一些了解。如果还不了解或者只听说过名字,建议先看一些介绍性的文章。我有几篇列在此文最后,可以参考。

IPFS是一套协议栈的实现

IPFS虽名为文件系统,但其实其主要工作与文件系统的关系不大,真正的工作在于协议的定义和实现,用计算机的术语讲,就是定义了一套协议栈,这里可以对标OSI七层网络协议。所以不要把IPFS理解为一个产品,其实它是一个框架。它不是一颗树,而是一片森林。

Juan Benet(IPFS的创始人)的两张图对此进行了清晰的表述,图一定义了6层,也有人总结出8层(另包括最下的身份层和IPLD之上的文件层)。这就是一套协议栈。

紧接着Juan拿出了图二,表示各层实现的协议,或可以实现的协议。

这两个图技术点太多,这里不细讲,但总体说来可以总结出以下几点:

各层中最关键的是IPLD(InterPlanetary Linked Data),这是整个协议栈的核心。也只有IPLD是最关键的和必不可少的。它定义了数据交换的格式,也定义了数据组织的方式

整个体系是一个松耦合结构,除了IPLD之外,其他各层并没有严格的约束条件,协议和应用实现可以有多种选择,可以根据需要进行配置,或开发新的协议

IPFS总体而言是开放的,现在的实现只是一个实例,通过日后协议的完善,新协议的推出,可以逐步演进

与区块链项目不同,IPFS的演进没有分叉的概念,也没有业务中断的担心。协议的进化完全可以在部分节点上先进行或实验,再逐步推广到全网。拿网络层协议来举例,不同节点对之间完全可以使用不同的网络层协议,对数据的存取没有影响

那么问题来了,目前的IPFS实现了哪些协议呢?如果你直接从GitHub下载IPFS的实现,采用缺省配置安装、联网、使用IPFS,那么,你采用的这样一个协议栈(从network层到naming层):

TPC(4001port)--- mDNS+DHT --- Bitswap --- IPLD --- IPNS

IPLD到底定义了什么?

既然IPLD是IPFS的核心,那么它的定义和作用就非常关键。协议实验室把IPLD作为独立的项目来进行设计和开发的,可见对此十分重视。

而同时,IPLD本身也作为通用数据结构来进行设计,也就是说它不仅仅限于IPFS使用。作为一种数据组织形式,它可以用于任何数据关系链接的场合,包括区块链,目录结构,大文件的分片存储等等。

总体而言,IPLD定义了数据链接的格式,规范了协议之间的数据交换。也就是说,IPLD是为互操作协议而制定的数据模式,其表达的是数据之间的关系。为实现此目的,IPLD融合了密码学里的散列算法、默克尔树,有向无环图等技术,数据可以通过JSON和YAML等格式在协议交换中呈现。这些技术的采用使得IPLD所表达的数据结构具有以下几个特点:

分布式的数据存储 (适用于大规模的应用和去中心化的应用)

自验证的数据完整性 (任何的修改和破坏都很容易被发现)

基于内容寻址的哈希链接数据结构 (适合于区块链,有向无环图,目录结构等数据关系)

另外,IPLD的定义本身也考虑到了数据结构的演化,为日后的改进做了设计。对此,为IPFS整套完整协议的升级换代提供了基础。

探讨几个问题

根据以上两节的描述,我们可以来试着探讨一下几个大家关心的问题。

1. IPFS到底使用了什么文件系统?

综上所述,把IPFS仍然按照传统文件系统来理解是错误的,至少是不全面的。但对用户而言,IPFS确实又可以作为一个文件系统来使用,一般的使用方法是采用FUSE(基于用户空间的文件系统)来把IPFS映射到本地。但就IPFS本身而言,更多的工作在文件系统之上的各层协议和数据组织。其实每一个IPFS节点都采用自己原有的文件系统,IPFS相关协议跑在原有系统之上。

2. IPFS能够被墙吗?

Yes and No.

如果你直接安装IPFS,采用缺省配置,是很容易被墙的,因为特征太好抓取了,一方面其使用TCP 4001端口进行通信,直接封端口就可以了,另外,其地址编码是有特征的,简单地说,就是所有地址都是以“Qm”打头的一场串字符,非常容易检测出来。

但是记住,本身IPFS的架构可以支持不同的网络协议,而且你可以自定义,你当然也可以采用其他TCP端口,或者干脆使用HTTPS,TOR网络,甚至自己定义协议来绕过防火墙。当然,这些也需要对端也支持。系统中可以有一些网关节点,支持多种协议来做为中继而实现整个网路的互联。这些都不容易,而且离实现还有一段距离。

所幸的是,目前IPFS用户不多,使用量不大,墙上还没有IPFS的补丁。

3. IPFS如何取代HTTP?

从用户的角度而言,用IPFS取代HTTP,就是你在浏览器里输入的是ipfs://content-hash, 或ipns://publisher-hash 来取代 http://content-path. 其呈现的结果一样,但本质区别是http(s)协议采用路径寻址,服务器挂了或墙了,就得到404,而ipfs或ipns是基于内容寻址,只要网上还有相同的内容,就可以访问到。

从实现的角度来看,HTTP本质上是实现了一套协议,用来连接客户端(浏览器)和服务器端,从而实现数据的获取,写入,改动和删除。而IPFS也实现同样的功能,同时也实现了内容之间的嵌套连接,超文本标记语言(HTML)的支持完全没有问题。这样,只要浏览器实现对IPFS客户端的支持,一切就OK。实际上,目前Firefox已经支持IPFS插件,有兴趣的可以试试。

进一步的探讨

本文简单地谈到了IPFS协议栈,以及其中关键的IPLD。你可能已经注意到,丝毫没有提到FileCoin,以及挖矿,存储的效率等其他有意思的问题。是的,IPFS本身的基本功能已经实现,但要建立起一个生态,还有很多其他的工作,比如激励机制和系统,存储的可靠性,安全性和一致性等问题,如何实现存取的高效率和实现CDN系统等等。

所有这些问题都没有那么简单,但这里要强调的是,尽管FileCoin和IPFS都是Protocol Labs的项目,在生态中相互支撑。但从设计而言,是两个独立的项目,不需要Filecoin,IPFS可以独立运行,而且已经在运行,运行得还不错。Filecoin作为一套激励系统也是独立存在的,所谓IPFS挖矿,其实是Filecoin挖矿。Filecoin也可以有竞争系统,但无论怎么做,都需要实现激励机制,通过这套机制建立起市场,并保护存储的可靠性,安全性和一致性的问题。由于Filecoin本身于IPFS是相互独立的,这里不做深入探讨,留待日后专门讨论。

主要参考资料

IPFS whitepaper (draft 3)

Filecoin whitepaper

IPLD官网

Juan Benet: Enter the Merkle Forest

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180708G1C1IC00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券