时间:2023-08-10|浏览:224
星际文件系统(InterPlanetaryFileSystem,缩写IPFS)是一个旨在创建持久且分布式存储和共享文件的网络传输协议。与传统的文件系统不同,它是一种基于内容寻址的点对点超媒体分发协议。IPFS网络中的节点构成一个分布式文件系统网络,其中Bitswap是IPFS的核心模块,负责与网络中其他节点之间请求和发送数据块。
图1
IPFS将文件分解为称为block的数据块,这些块由内容标识符(CID)标识。IPFS文件内容存储在不同的节点上,每个节点存储rootblock,少量节点存储完整文件数据,大部分节点存储部分文件block。因为block分散存储在不同节点,Bitswap协议解决了从多个节点高效获取全部数据块的问题。
图2 多节点文件存储示意图
总体架构
本文基于Bitswapv0.3.3版本进行分析。IPFS向Bitswap获取block,Bitswap是IPFSexchange接口的具体实现,负责完成IPFS网络数据交换功能。
图3 Bitswap组件架构图
Bitswap协议内容比较繁琐,为了降低实现复杂度协议划分为block请求模块、block发送模块、会话管理模块、block提供者发现模块、网络模块等。Bitswap模块负责接收新的消息并且提供对外数据交换接口。session管理模块用来管理多个session,每个session管理一组文件的下载,来提高下载效率。block发送模块负责管理向其它节点发送数据块。block请求模块负责管理数据块的请求。block提供者发现模块负责通过DHT网络发现网络中的数据块,通常session找不到已拥有所需block的节点时会调用此模块进行数据块发现。
**协议概述**
为了完成节点间block交换,Bitswap定义了通信消息及通信协议。
图4
Bitswap消息处理流程: 1、IPFS请求文件区块,Bitswap发送want-have消息携带CID1信息到连接的所有节点。节点根据自己是否有CID1文件块返回have或dont-have消息。 2、client向拥有CID1的节点发送want-block消息,节点返回相应的block消息。 3、当没有节点有请求的block,Bitswap广播want-have到所有的连接节点,或者通过DHT查找拥有文件区块的节点。
**模块详解**
**Bitswap模块**
Bitswap模块负责接收新消息并且实现对外的数据交换接口。当接收到新消息后,Bitswap处理流程: 1、记录有关消息的一些统计信息 2、通知发送模块wants消息,这样数据发送模块可以根据实际情况向需求节点发送响应消息。 3、通知发送模块任何收到的blocks,发送模块根据节点的需求列表可以将接收到的块发送给任何需要它们的节点 4、向SessionManager通知接收到的blocks,HAVEs和DONT_HAVEs消息,这样SessionManager可以通知消息相关的session。
Bitswap通过FacadePattern提高了模块使用的便利性,使得Bitswap子系统的用法变得简单,避免了IPFS和Bitswap的高度耦合。
**Session管理模块**
session管理模块用来管理多个数据块下载session,每个session管理一组文件的下载。当SessionManager收到新消息时,它将 1、通知BlockPresenceManager组件跟踪每个block。 2、通知对接收到的block感兴趣并想要的Sessions。 3、通知PeerManager组件收到的block,PeerManager检查是否有任何wants被发送到节点以接收已经收到的块。如果是这样,它将向那些节点发送“CANCEL”消息,防止其它节点重复发送消息。
Session管理模块通过协调多个session的数据需求来提高数据交互的效率,避免数据块的重复请求、发送。
**Session模块**
Session管理一组文件的下载,用来提高一组文件块,比如单个文件下载效率。当IPFS调用Bitswap时,Bitswap会创建一个新的Session并调用Session的相应方法,比如GetBlocks获取blocks。Session会管理一个节点列表,数据获取过程只会向session中的节点获取数据,而不是所有的连接节点。当Session中的节点都没有某个block时,Bitswap才会通过DHT获取具有block的节点并加入session。
由于session刚开始没有任何节点,处于“discovery”模式。当IPFS最初从session请求block时,该session处理流程如下: 1、通知SessionInterestManager组件它感兴趣的block。 2
用戶喜愛的交易所
已有账号登陆后会弹出下载