你真的懂IPFS吗?它可远远没有你想象中的那么简单!

最近风很大的,除了世界杯,就属于IPFS了!

被称为2018年最值得期待的明星项目IPFS,相信大家都已经有所耳闻。今天,我们将为大家带来关于IPFS的超强干货,技术贴!带你更深入地了解这个明星项目。

架构设计

作为一个分布式的文件系统,IPFS 提供了一个支持部署和写入的平台,同时能够支持大文件的分发和版本管理;为了达到上述的目的,IPFS 协议被分成如下的几个子协议:

上述的七个子协议分别负责 IPFS 中的不同功能,我们将在接下来的章节中分别介绍各个协议分别做了哪些工作以及 IPFS 是如何实现的。

身份

在 IPFS 网络中,所有的节点都通过唯一的 NodeId 进行标识,与 Bitcoin 的地址有一些相似, 它其实是一个公钥的哈希,然而为了增加攻击者的成本,IPFS 使用 S/Kademlia 中提到的算法增加创建新身份的成本:

每一个节点在 IPFS 代码中都由Node 结构体来表示,其中只包含 NodeId 以及一个公私钥对:

总之,身份系统的主要作用就是表示 IPFS 网络中的每一个节点,代表每一个使用 IPFS 的『用户』。

网络

作为一个分布式的存储系统,节点之间的通信和信息传递都需要通过网络进行,同时能够使用多种传输层协议并保证可靠性、连通性、信息的完整性以及真实性。

IPFS 可以使用任意的网络进行通信,它并没有假设自己一定运行在 IP 协议上,而是通过 multiaddr 的格式来表示目标地址和使用的协议,以此来兼容和扩展未来可能出现的其他网络协议:

路由

在一个分布式系统中,检索或者访问其他节点中存储的资源就需要通过一个路由系统,IPFS 使用了基于 S/Kademlia 和 Coral 中的 DSHT 实现了路由系统,我们能够在 libp2p/go-libp2p-routing/routing.go 中找到 IPFS 路由系统的接口:

从这里我们可以看到 IPFS 中的路由需要实现三种基本的功能,内容路由、节点路由以及数据存储。实现了这几些接口的『路由器』就可以在底层进行替换,不会影响系统其他部分的工作。目前 IPFS 使用全局 DHT 和 DNS 来解析路由记录,而 Kademlia DHT 有以下的优点:

1. 在批量节点中快速找到目标地址,时间复杂度是 $log_2(n)$,也就是说,在 10,000,000 节点中只需要 20 次查询;

2. 优化了节点之间的控制消息长度,降低了信息协调的开销;

3. 通过优先选择长期节点抵御多种网络攻击;

4. 在点对点的应用中被广泛应用,例如 BitTorrent 和 Gnutella,技术也比较成熟;

激励

在今天,当我们讨论 IPFS 这种底层的区块链技术时,就不得不提构建在 IPFS 上的 FileCoin,它提供了一个给宿主和上传者交易的市场,通过市场可以调节存储的成本,上传者能够根据价格选择速度、冗余和成本。

节点

大多数的区块链网络中都只具有单一类型的标准节点,但是 FileCoin 中却有两种不同的节点:存储节点和检索节点。

共识算法

我们可以说所有的区块链应用都需要 共识算法 保证多个节点对某一结果达成共识,并在发生冲突时进行解决,Bitcoin 和 Ethereum 目前都使用了 Proof-of-Work 作为共识算法,而 FileCoin 使用 Proof-of-Replication(PoRep) 解决其网络内部存在的问题。