专栏首页圆方圆学院精选【董天一】IPFS: BitSwap协议(数据块交换)

【董天一】IPFS: BitSwap协议(数据块交换)

作者简介:董天一 ,IPFS/Filecoin中国区技术布道人 ,《IPFS指南》作者 毕业于北京大学软件与微电子学院 曾担任甲骨文亚洲研发中心(中国)数据库开发工程师 资深区块链技术开发者,现致力于IPFS/Filecoin在中国的技术推广

BitSwap协议

IPFS节点之间是如何进行数据交换的?本文来讲一下这个问题。

IPFS在BitTorrent的基础上实现了p2p数据交换协议:BitSwap协议

IPFS每一个节点都维护了两个列表:

  • 已有的数据块(have_list)
  • 想要的数据块(want_list)

当两个节点建立连接后,他们会根据hava_list和want_list互通有无。跟BitTorrent不一样的是:BitSwap获取数据块的时候不限于从同一个torrent里面。也就是说BitSwap可以从不属于本文件的其他文件获取数据块(只要数据块的哈希值一样,数据内容必然是一样的),从全局考虑,这使得BitSwap的效率相比于BitTorrent更高。

我们知道,对于p2p网络,有一个很重要的问题是:如何激励大家分享自己的数据?用过迅雷、BitTorrent、emule等p2p软件的读者应该都知道,如果只下载不上传的话,很快你的节点就无法下载数据了或者下载数据变得很慢。每一个p2p软件都实现了自己的数据分享策略。IPFS也不例外。

IPFS的策略体系由信用、策略、账单组成

BitSwap信用体系

BitSwap协议必须能够激励节点去乐于分享数据,即使这个节点暂时没有数据需求。IPFS根据节点的之间的数据收发建立了一个信用体系:有借有还,再借不难。

  • 发送给其他节点数据可以增加信用值
  • 从其他节点接受数据降低信用值

如果一个节点只接收数据而不分享数据,信用值就会降得很低而被其他节点忽略掉。简单来讲就是:你乐于分享数据,其它节点也乐于发送数据给你,如果你不愿意分享,那么其它节点也不愿意给你数据。

BitSwap策略

根据上面的信用体系,BitSwap可以采取不同的策略来实现,每一种策略都会对系统的整体性能产生不同的影响。策略的目标是:

  1. 节点数据交换的整体性能和效率最高
  2. 阻止“吃白食”(freeloaders)的现象。就是不能够只下载数据不上传数据
  3. 可以有效的防止一些***行为(比如:女巫***)
  4. 对信任节点建立宽松机制(lenient)

IPFS提供一个可参考的策略机制(实际的实现可以有所变化):

每个节点根据和其他节点的收发数据,计算负债率(debt ratio,r)r = bytes_sent / (bytes_recv + 1) 节点根据负债率计算出来和这个节点的数据发送率(P) P (send|r) = 1− 1/(1+exp(6−3r))

根据这两个函数可以发现,当负债率达到某一个值的时候负债率会急剧下降。

这个模型表达的意义:如果一个节点只接受数据不分享数据,别人发送给它数据的概率会越来越低(到达某一个值后就会急剧降低接近0),如果节点持续保持分享数据,别的节点向你发送数据的概率就会越来越大。

IPFS的官方论文里面没有给出来曲线图(只放了一个空白的图),小编根据函数帮大家把曲线图画出来了。(小编一般是不愿意往文章里面放公式的,霍金说过:一本科普书中,每多一个公式,读者减少就会一半,但是这两个公式比较简单,小编就冒个险

P (send|r) = 1− 1/(1+exp(6−3r))

BitSwap账单

BitSwap节点会记录下来和其他节点通信的账单(数据收发),可以保持节点间数据交换的历史和防止篡改。当两个节点之间建立连接的时候,BitSwap会相互交换账单信息,如果账单不匹配,则清除重新记账。恶意节点可能会故意“丢失”账单,以希望清除掉自己的债务。其它交互节点会把这些都记下来,如果总是发生,节点就会被拒绝。 

BitSwap协议

IPFS节点之间的数据交换和激励体系大致就是这些内容。有想深入了解的读者,建议参考一下 BitTorrent协议,IPFS的p2p协议大部分都来自于BitTorrent:

https://en.wikipedia.org/wiki/BitTorrent

下次我们主要讲一下IPFS节点是如何找到彼此的?


相关文章和视频推荐

圆方圆学院汇集大批区块链名师,打造精品的区块链技术课程。 在各大平台都长期有优质免费公开课,欢迎报名收看。

公开课地址:https://ke.qq.com/course/345101?flowToken=1007371

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【张其中】拥有21个超级节点的EOS,背叛了区块链的去中心化理想?

    伴随着EOS主网的上线,围绕谁来启动主网、启动哪一条链作为主网展开了明争暗斗,甚至出现了诸如EOS还未上线就将面临分叉危机的舆论恐慌。这些消息确实牵动着每一个E...

    圆方圆学院
  • 【董天一】什么是IPFS?(三)

    上面的应用场景是 IPFS的创始人 Juan Benet 在IPFS论文里面直接提到的. 有兴趣的同学可以去IPFS白皮书里面看一下。

    圆方圆学院
  • 【戴嘉乐 IPFS】IPFS Desktop:IPFS节点桌面管理App

    IPFS Desktop是一个由IPFS官方应用社区(IPFS-Shipyard)孵化出来的应用项目。 Ta是一个通过Node.js编写的桌面管理软件,比之前提...

    圆方圆学院
  • 必须理解的分布式系统中雷同的集群技术及原理

    在当今信息爆炸的时代,单台计算机已经无法负载日益增长的业务发展,虽然也有性能强大的超级计算机,但是这种高端机不仅费用高昂,也不灵活,一般的企业是负担不起的,而且...

    justmine
  • (1)解锁MongoDB replica set核心姿势

    本文倒腾目前大热的MongoDB Replica Set集群,在倒腾的同时串讲一些 MongoDB特性。

    小码甲
  • TBase数据节点在线扩容原理解析

    对于Share-Nothing架构的分布式数据库来说,如何将数据均匀的分布到各个节点、在线扩容,以获取更大的存储容量和更高的并发访问量。成为各大分布式数据库系统...

    腾讯云数据库 TencentDB
  • 漫话:如何给女朋友解释什么是CDN?

    周六晚上七点多,我正在看书呢,突然女朋友跑过来问我她的IPAD去哪了,火急火燎的。

    吴延宝
  • 学习什么是CDN

    周六晚上七点多,我正在看书呢,突然女朋友跑过来问我她的IPAD去哪了,火急火燎的。

    Java3y
  • 漫话:如何给女朋友解释什么是CDN?

    周六晚上七点多,我正在看书呢,突然女朋友跑过来问我她的IPAD去哪了,火急火燎的。

    用户1564362
  • 7-2 其余的一些树-排序二叉树-霍夫曼树

    二叉排序树可以通过递归的方法来定义,它或者是空二叉树,或者是具有如下定义的二叉树:

    TeeyoHuang

扫码关注云+社区

领取腾讯云代金券