IPFS 原理与实践 (22):IPFS 底层基础 2.2.2

阅读数:1 2019 年 12 月 21 日 18:51

IPFS原理与实践(22):IPFS底层基础 2.2.2

(P2P 块交换协议)

内容简介
这是一部从实现原理和工程实践两个维度深入讲解 IPFS 和 Filecoin 的著作。作者是中文社区内非常有影响力的三位 IPFS/Filecoin 布道者,本书得到了 IPFS&FileCoin 创始人以及 IPFS 官方(协议实验室)的高度认可和强烈推荐。
为 * 大化满足读者需求,书中不仅介绍 IPFS 技术细节、区块链相关知识、Filecoin 项目技术细节,还加入了大量作者们在开发中的经验和技巧。为了适配当下及未来较长时间内读者的实际使用环境,书中所有案例都是基于生态链中较新的软件开发工具和前沿的软件开发技术编写的。
本书分为三大部分:
第一部分 基础篇(第 1 章)
全面介绍了 IPFS 的源起,概念、优势和应用领域,旨在帮助读者了解 IPFS 相关基础背景知识,从宏观层面认识 IPFS 技术所具有的创新性。
第二部分 原理篇(第 2~5 章)
旨在帮助读者深入理解 IPFS 和 Filecoin 的运行原理与工作机制。首先深入分析了分布式哈希表、块交换协议、版本控制、自验证文件系统 Merkle DAG 和 Merkle Tree 等底层基础知识,然后对 IPFS 协议栈中包含的 7 层子协议了进行了剖析,接着解析了 Multi-Format、libp2p、IPLD 三大 IPFS 核心模块,最后用了一整章的篇幅详细剖析了 Filecoin 项目。
第三部分 实战篇(第 6~8 章)
以工程化的方式,从基础至进阶,介绍了 IPFS 技术的实际使用,包括安装、配置、交互、入网、API、内容发布、数据保存、私网搭建等内容,之后通过两个不同风格的实际项目案例向读者展示了基于不同语言所实现的 IPFS 协议栈的使用方法。

  1. 内容的发布

现在我们从流程上解释,一个新文件是如何在 BitTorrent 网络上传播的。新的文件发行,需要从 seed 开始进行初次分享。首先,seed 会生成一个扩展名为.torrent 的文件,它包含如下信息:文件名、大小、tracker 的 URL。一次内容发布至少需要一个 tracker 和一个 seed,tracker 保存文件信息和 seed 的连接信息,而 seed 保存文件本身。一旦 seed 向 tracker 注册,它就开始等待为需要这个 torrent 的 peer 上传相关信息。通过.torrent 文件,peer 会访问 tracker,获取其他 peer/seed 的连接信息,例如 IP 和端口。tracker 和 peer 之间只需要通过简单的远程通信,peer 就能使用连接信息,与其他 peer/seed 沟通,并建立连接下载文件。

  1. 分块交换

前面我们提到,peer 大多是没有完整的拷贝节点的。为了跟踪每个节点已经下载的信息有哪些,BitTorrent 把文件切割成大小为 256KB 的小片。每一个下载者需要向他的 peer 提供其拥有的片。为了确保文件完整传输,这些已经下载的片段必须通过 SHA-1 算法验证。只有当片段被验证是完整的时,才会通知其他 peer 自己拥有这个片段,可以提供上传。

  1. 片段选择算法

上面我们发现,BitTorrent 内容分享的方式非常简单实用。但是,直觉上我们会发现如何合理地选择下载片段的顺序,对提高整体的速度和性能非常重要。如果某片段仅在极少数 peer 上有备份,则这些 peer 下线了,网络上就不能找到备份了,所有 peer 都不能完成下载。针对这样的问题,BitTorrent 提供了一系列片段选择的策略。

  • 优先完成单一片段:如果请求了某一片段的子片段,那么本片段会优先被请求。这样做是为了尽可能先完成一个完整的片段,避免出现每一个片段都请求了同一个子片段,但是都没有完成的情况。
  • 优先选择稀缺片段:选择新的片段时,优先选择下载全部 peer 中拥有者最少的片段。拥有者最少的片段意味着是大多数 peer 最希望得到的片段。这样也就降低了两种风险,其一,某个 peer 正在提供上传,但是没有人下载(因为大家都有了这一片段);其二,拥有稀缺片段的 peer 停止上传,所有 peer 都不能得到完整的文件。
  • 第一个片段随机选择:下载刚开始进行的时候,并不需要优先最稀缺的。此时,下载者没有任何片断可供上传,所以,需要尽快获取一个完整的片断。而最少的片断通常只有某一个 peer 拥有,所以,它可能比多个 peer 都拥有的那些片断下载得慢。因此,第一个片断是随机选择的,直到第一个片断下载完成,才切换到“优先选择稀缺片段”的策略。
  • 结束时取消子片段请求:有时候,遇到从一个速率很慢的 peer 请求一个片断的情况,在最后阶段,peer 向它的所有的 peer 都发送对某片断的子片断的请求,一旦某些子片断到了,那么就会向其他 peer 发送取消消息,取消对这些子片断的请求,以避免浪费带宽。

IPFS原理与实践(22):IPFS底层基础 2.2.2

购书地址 https://item.jd.com/12665074.html?dist=jd

评论

发布