月亮链 月亮链
Ctrl+D收藏月亮链
首页 > MATIC > 正文

BLO:IPFS技术系列 | 揭秘IPFS数据交换模块Bitswap_blockchain钱包app

作者:

时间:1900/1/1 0:00:00

导?读

本文为IPFS系列文第4篇,详解IPFS的核心模块——Bitswap。

星际文件系统是一个旨在创建持久且分布式存储和共享文件的网络传输协议。

与传统的文件系统不同,它是一种基于内容寻址的点对点超媒体分发协议。

IPFS网络中的节点构成一个分布式文件系统网络,其中Bitswap是IPFS的核心模块,负责与网络中其他节点之间请求和发送数据块。

图1

IPFS将文件分解为称为block的数据块,这些块由内容标识符标识。?

IPFS文件内容存储在不同的节点上,每个节点存储rootblock,少量节点存储完整文件数据,大部分节点存储部分文件block。因为block分散存储在不同节点,Bitswap协议解决了从多个节点高效获取全部数据块的问题。

OpenSea推出“冻结”NFT元数据功能,可使用IPFS和Filecoin存储NFT:据官方消息,OpenSea近期推出了“冻结”NFT元数据的功能,使NFT创建者能够通过IPFS和Filecoin正确地将NFT去中心化。有了IPFS和Filecoin,使用OpenSea的NFT创建者现在可以通过IPFS的内容寻址和Filecoin的可证明和去中心化存储创建不可篡改的NFT元数据。[2021/6/18 23:47:42]

图2?多节点文件存储示意图

总体架构

本文基于Bitswapv0.3.3版本进行分析。

IPFS向Bitswap获取block,Bitswap是IPFSexchange接口的具体实现,负责完成IPFS网络数据交换功能。

图3?Bitswap组件架构图

Bitswap协议内容比较繁琐,为了降低实现复杂度协议划分为block请求模块、block发送模块、会话管理模块、block提供者发现模块、网络模块等。

Bitswap模块负责接收新的消息并且提供对外数据交换接口。

“IPFS云管算力”第二期USDT认购专场于7月6日16:00开启:据官方消息,管交所BGOEX“IPFS云管算力”第二期USDT认购专场于7月6日16:00开启,至7月10日12:00结束,价格171USDT/TB,总量2000T。

“IPFS云管算力”由管交所BGOEX推出的一项支持用户按T和周期租赁IPFS云算力并享有挖矿权益的业务。

管交所BGOEX“IPFS云管算力”三大承诺:1.100%自有实体矿机,性价比同行业最高级别;2.挖不出filecoin,100%退还本金;3.如遇突发风险事件不回本,将延长挖矿周期,直至回本并且盈利。[2020/7/6]

session管理模块用来管理多个session,每个session管理一组文件的下载,来提高下载效率。

block发送模块负责管理向其它节点发送数据块。block请求模块负责管理数据块的请求。block提供者发现模块负责通过DHT网络发现网络中的数据块,通常session找不到已拥有所需block的节点时会调用此模块进行数据块发现。

协议概述

为了完成节点间block交换,Bitswap定义了通信消息及通信协议。

掌柜调查署|节点资本创始合伙人杜均:单纯从技术角度来看,并没有看到IPFS技术的突破:在今日举行的掌柜调查署中,针对“IPFS和Filecoin有哪些重大创新,为什么大家如此关注“的问题,节点资本创始合伙人杜均表示,个人认为,无论是比特币为代表的区块链1.0,还是以太坊为代表的区块链2.0,以及现在我们大热的IPFS(激励层Filecoin),都是一群“技术中立”信仰者构建的理想国,希望通过“CODE IS LAW”促进社会变得更公平更美好。单纯从技术角度来看,我并没有看到技术的突破,我更多看到的是利用区块链思维对传统互联网访问协议以及分布式存储的升级。大家关注的点不一样,只有极少数人关注到IPFS的技术创新,更多的人关注的是如何赚钱。更多详情见原文链接。[2020/7/4]

图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模块

IPFS发布0.6版本,包含对协议层的重要更新:据官方消息,去中心化文件和网络托管协议星际文件系统(IPFS)发布go-ipfs0.6版本。

官方表示,该版本从代码角度来说是个相对小型的更新,但是包含了对IPFS协议的重要更新,包括QUIC传输默认情况下处于开启状态,而且支持了NOISE安全传输,但不会默认启用。(Github)[2020/6/22]

Bitswap模块负责接收新消息并且实现对外的数据交换接口。

当接收到新消息后,Bitswap处理流程:

1、记录有关消息的一些统计信息

2、通知发送模块wants消息,这样数据发送模块可以根据实际情况向需求节点发送响应消息。

3、通知发送模块任何收到的blocks,发送模块根据节点的需求列表可以将接收到的块发送给任何需要它们的节点

4、向SessionManager通知接收到的blocks,HAVEs和DONT_HAVEs消息,这样SessionManager可以通知消息相关的session。

Bitswap通过FacadePattern提高了模块使用的便利性,使得Bitswap子系统的用法变得简单,避免了IPFS和Bitswap的高度耦合。

▲?Session管理模块

session管理模块用来管理多个数据块下载session,每个session管理一组文件的下载。

现场 | 辛秉谦:IPFS是在应用层级区块链的实现:金色财经现场报道,4月10日,中国通信工业协会无线网格网络暨MESH+IPFS专业委员会辛秉谦秘书长在\"2019第二届深圳国际区块链技术与应用大会”现场演讲时指出,IPFS不是区块链,它是在应用层级区块链的实现,是共享数据存储器的思维。在这里分享空间、上传文件是有收益的,是商业价值的体现,是为了方便全球统一结算的凭证而已。作为下一代互联网基础系统,IPFS可以和5G、人工智能很好地结合,未来万千应用也可以基于此构建。通过其激励层,确实可完成区块链数据的存储,但不能以偏概全。[2019/4/10]

当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、通知sessionWantManager组件需要的block。

3、通知PeerManager组件向连接节点发送“want-have”消息,以发现哪些节点有需要的block。

4、查询ProviderQueryManager组件以发现哪些节点具有该block。

当session收到带有“HAVE”或“block”的消息时,它将通知SessionPeerManager组件。

当session收到带有“block”的消息时,它将通知SessionInterestManager组件。

一旦session具有节点,就不再处于“discovery”模式。当IPFS请求后续block时,session将通知sessionWantSender组件。sessionWantSender组件通知PeerManager组件向会话中的节点发送“want-have”和“want-block”消息。

对于session所需的每个block,sessionWantSender组件通过与BlockPresenceManager组件核对哪些节点已为该block发送了“HAVE”,来确定哪个节点最有可能拥有该block。如果多个节点发送过“HAVE”,则会根据先前请求回复速度来选择节点。

由于DHT内容发现速度慢并且网络带宽消耗大,session通过向一组含有目标数据块可能性大的节点获取数据,从而大大提高了数据块获取的效率。

▲?Block发送模块

block发送模块负责管理向其它节点发送数据块,包含节点需求管理组件和消息发送任务队列。

Engine是block发送模块的处理类,当Engine被告知有新的wants时

1、将want添加到Ledger,Ledger会存储每个节点的需求列表。

2、检查blockstore中的相应block,并将任务添加到PeerTaskQueue组件。如果block库没有想要的block,则添加“DONT_HAVE”任务;如果blockstore有block,对于“want-have”添加了“HAVE”任务,对于“want-block”添加了“block”任务。

3、当Engine收到新block的消息时,它会检查Ledger以查看是否有节点需要此block。对于发送“want-have”的每个节点向PeerTaskQueue组件添加一个?“HAVE”任务,对于为发送了“want-block”的每个节点,向PeerTaskQueue组件添加一个“block”任务。

4、Engine会定期从PeerTaskQueue组件中取出任务,并创建带有“blocks”,“HAVEs”和“DONT_HAVEs”的消息。

PeerTaskQueue组件通过对任务进行优先级排序,发送队列中数据量最少的节点方具有最高优先级,通过这种流控措施,提高数据块发送处理效率。

▲?数据块请求模块

Block请求模块负责管理数据块的请求。PeerManager组件为连接到Bitswap的每个节点创建一个MessageQueue组件,记录了“want-have”?、“want-block”已发送到哪个节点,并将任何新的wants定向到正确的节点。并且MessageQueue组件通过合并多个want为一条消息,然后将该消息发送给节点,从而提高了消息发送效率。

▲?内容发现模块

当Bitswap找不到已拥有所需block的节点时,它会使用DHT进行内容发现。Bitswap通过ProviderQueryManager组件管理这些请求,ProviderQueryManager组件对请求进行速率限制,并对进行中的请求进行重复删除处理。

总结

Bitswap作为IPFS网络数据交换接口的具体实现,设计并实现了一套高效的节点间交换数据的协议。

协议主要关注点是如何快速、高效获取需要的block,其中包括节点选择策略,如何最大化利用每个节点的能力。

Bitswap通过FacadePattern提高了模块使用的便利性,在具体实现上解耦复杂依赖到各功能模块,从而降低系统实现的复杂度。

作者简介

马耀耀来自数据网格实验室BitXMesh团队研究方向:P2P网络、数据安全传输

参考资料

https://github.com/ipfs/go-bitswap/blob/master/docs/how-bitswap-works.md

https://github.com/ipfs/specs/blob/master/BITSWAP.md

标签:BLOLOCKBLOCKBLOCblockchain怎么用BlockPortalblockchain钱包appMediBlocX

MATIC热门资讯
区块链:重庆市南岸区人民检察院胡勇:应用区块链破解网络金融犯罪治理难题_银行区块链币有什么用

重庆市南岸区人民检察院胡勇发文《应用区块链破解网络金融犯罪治理难题》表示,将网络金融机构主要业务上链,通过区块链可信存储的特点实现对链上金融服务的监管,帮助金融机构优化基础结构.

1900/1/1 0:00:00
SUB:Substrate Hackathon在杭州未来区块链创新中心成功举办_BUBS币

12月19日-20日,SubstrateHackathon在杭州未来区块链创新中心成功举办。活动由DoraHacks发起,邀请50位区块链工程师、50位前端工程师、全栈工程师和设计师,一起Hac.

1900/1/1 0:00:00
比特币:摩根大通:机构投资比特币是出于投机原因_大学生玩比特币赚了上亿的人

据LiveBitcoinNew1月19日消息,摩根大通和区块链分析公司Chainalysis的数据表明,虽然一些机构确实参与了比特币交易,但它们只占交易实体的一小部分.

1900/1/1 0:00:00
比特币:分析师:我们永远见不到低于2万美元的比特币了_玩btc违法吗

来源:彩云区块链,作者:irishash链上分析师WillyWoo认为,比特币再跌至20,000美元以下的可能性很低,因此比特币的最新涨势将持续下去.

1900/1/1 0:00:00
INE:我的投资经历:寻找自己的投资风格_MIN

我体验了一段时间的技术分析之后,并没有达到自己预期的效果,并且在这个体验的过程中越来越对这个方式比较抗拒,于是我开始寻找其它的途径.

1900/1/1 0:00:00
XRP:XRP大幅反弹,日内收涨29.9%,别被市场戏弄了_PLEX价格

?作者|哈希派分析团队 Wirex美国版本的应用程序将不包含XRP:在一月份推出时,伦敦加密支付平台Wirex不会在其应用程序的美国版本中包含XRP。此外.

1900/1/1 0:00:00