原创 2018-01-11 飞向未来 IPFS指南

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节点是如何找到彼此的?

作者飞向未来,致力于IPFS/Filecoin在中国的技术推广,他的微信公众号和社群,目前是中国最活跃最顶级的IPFS社群。作者飞向未来是圆方圆区块链的特邀嘉宾,所有转载都已经得到飞向未来本人授权。

更多飞向未来导师的公众号,可以在IPFS指南公众号中找到。

圆方圆链圈

IPFS: BitSwap协议(数据块交换)的更多相关文章

  1. Oracle数据块损坏篇之10231内部事件

    实验:某个分区数据块损坏,不完全恢复此分区表数据 背景:数据库没有有效备份,某个分区中有数据块损坏. 要求:最大限度恢复此分区数据. 环境:RHEL 6.4 + Oracle 11.2.0.4 1. ...

  2. [转]Oracle数据块体系的详细介绍

    数据块概述Oracle对数据库数据文件(datafile)中的存储空间进行管理的单位是数据块(data block).数据块是数据库中最小的(逻辑)数据单位.与数据块对应的,所有数据在操作系统级的最小 ...

  3. HDFS读写数据块--${dfs.data.dir}选择策略

    最近工作需要,看了HDFS读写数据块这部分.不过可能跟网上大部分帖子不一样,本文主要写了${dfs.data.dir}的选择策略,也就是block在DataNode上的放置策略.我主要是从我们工作需要 ...

  4. Node以数据块的形式读取文件

    在Node中,http响应头信息中Transfer-Encoding默认是chunked. Transfer-Encoding:chunked Node天生的异步机制,让响应可以逐步产生. 这种发送数 ...

  5. ORACLE 数据块dump

    1. rdba(Tablespace relative database block address) 是相对数据块地址,是数据所在的地址,rdba可就是rowid 中rfile#+block#. 根 ...

  6. 数据块损坏(block corruption)

    分为物理损坏和逻辑损坏-物理损坏一般指数据块头部不可以访问.数据块校验值不合法,数据块格式不再是oracle承认的格式-逻辑损坏一般是在物理性结构完整的情况下,数据的内容在含义上不正确,比如保存了不允 ...

  7. Oracle 摘去数据块的面纱

    Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F 00018000h 6 A2 0 0 0c 0 80 3 8b 61 15 0 0 0 3 4 type frmt spa ...

  8. hdfs 数据块重分布 sbin/start-balancer.sh -threshold

    数据块重分布sbin/start-balancer.sh -threshold <percentage of disk capacity>percentage of disk capa ...

  9. HDOJ2016数据的交换输出

    数据的交换输出 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

随机推荐

  1. PAT乙级 1034

    思路:是个水题,但是有坑.不能被题目忽悠了,题目保证正确的输出中没有超过整型范围的整数. 它只是保证结果不超出int,但是我们在运算过程中的乘法可能会超出int,直接把所有int改成long long ...

  2. CompletableFuture CompletableFuture.supplyAsync 异常处理

    CompletableFuture 异常处理completeExceptionally可以把异常抛到主线程 /** * User: laizhenwei * Date: 2018-01-30 Time ...

  3. OSQA的配置

    1.安装Python,我安装的是python 2.7.3 2.安装setuptools 下载setuptools,并安装 安装好以后,在pyton2.7/scripts的路径下将会有easy_inst ...

  4. 3D打印技术在医疗上的实际应用与实验室研究

    2018-01-17 Chris 免费3D打印模型资源站 预计阅读时间:5-10分钟 关键字:3D打印髋关节.脊柱置换产品,3D打印技术辅助精准截骨,义齿,生物墨水(BioInk),干细胞   随着& ...

  5. Spark第一个应用程序

    首先要对源码进行编译,生成对应hadoop版本的spark开发程序jar包,上篇已经写了具体的过程,这里不再赘述. 在安装spark的机器上,下载eclipse-java-x86_64版本,将spar ...

  6. Navicat远程连接阿里云服务器的mysql

    问题描述: 本机为win10,mysql安装在阿里云(Ubuntu系统)上,本机使用Navicat远程连接mysql,遇到一些坑,求助于阿里云,最终解决,特此记录一下! 安装mysql sudo ap ...

  7. numpy 实践记录

    reshape是从低维度到高维度.max,sum等函数都是注意axis,不选择就是全体计算. swapaxes 转换轴,将两个选择的轴对调,在CNN中X乘W有的时候需要拉伸,如果轴不同结果不对. 看p ...

  8. 2.3 PCI桥与PCI设备的配置空间

    PCI设备都有独立的配置空间,HOST主桥通过配置读写总线事务访问这段空间.PCI总线规定了三种类型的PCI配置空间,分别是PCI Agent设备使用的配置空间,PCI桥使用的配置空间和Cardbus ...

  9. Excel 2010高级应用-折线图(二)

    在Excel中画折线图,具体操作过程如下: 1.新建一个excel文件,双击打开 2.单击"插入",找到折线图,单击下拉框 3.在折线框下方,新建数据源 4.鼠标右键,选择&quo ...

  10. C#中各种计时器 Stopwatch、TimeSpan

    1.使用 Stopwatch 类 (System.Diagnostics.Stopwatch)Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.在典型的 St ...