1. 首页
  2. 技术分享

深入了解IPFS,看这里!|点滴资讯

看了那么多文章,还是对IPFS一知半解,怎么办呢?没关系,我们团队特意做了关于IPFS100个问题,让我们快速揭开IPFS高大上的外衣。顺便介绍了本公司与IPFS的故事,让我们开始吧!

五、IPFS深层技术

问题1:MerkleDAG是什么?

Merkle DAG是IPFS系统的核心概念之一,当然Merkle DAG并不是IPFS团队发明的,它来自于Git数据结构,ipfs团队进行了改造。m

Merkle DAG的全称是 Merkle directed acyclic graph(默克有向无环图)。它是在Merkle tree基础上构建的,Merkle tree是由美国计算机学家merkle于1979年申请的专利。Merkle DAG跟Merkle tree很相似,但不完全一样。

它有三个功能:

· 内容寻址:使用多种哈希来唯一识别一个数据块的内容。

· 防篡改:方便的检查哈希值来确认数据是否被篡改。

· 去重:相同内容的数据块有相同哈希值,可去掉重复的数据,节省存储空间。

问题2:块交换BitSwap协议是什么?

IPFS 中的BitSwap协议受到BitTorrent 的启发,通过对等节点间交换数据块来分发数据的。像BT一样, 每个对等节点在下载的同时不断向其他对等节点上传已下载的数据。和BT协议不同的是, BitSwap 不局限于一个torrent文件中的数据块。BitSwap 协议中存在一个永久的市场。 这个市场包括各个节点想要获取的所有块数据。而不管这些块是哪些如.torrent文件中的一部分。这些快数据可能来自文件系统中完全不相关的文件。 这个市场是由所有的节点组成的。虽然易货系统的概念意味着可以创建虚拟货币,但这将需要一个全局分类账本来跟踪货币的所有权和转移。这可以实施为BitSwap策略。

问题3:BitSwap信用是什么?

这个协议必须带有激励机制, 去激励节点去seed 其他节点所需要的块,而它们本身是不需要这些块的。 因此, BitSwap的节点很积极去给对端节点发送块,期待获得报酬。但必须防止水蛭攻击(空负载节点从不共享块),一个简单的类似信用的系统解决了这些问题:

l 对等节点间会追踪他们的平衡(通过字节认证的方式)。

l 随着债务增加而概率降低,对等者概率的向债务人发送块。

问题4:BitSwap策略是怎样的?

BitSwap 对等节点采用很多不同的策略,这些策略对整个数据块的交换执行力产生了不同的巨大影响。BitSwap 对等体可以类似地实现一系列的策略(良好和恶意)。对于功能的选择,应该瞄准:

l 为整个交易和节点最大化交易能力。

l 为了防止空负载节点利用和损害交易。

l 高效抵制未知策略。

l 对可信任的对等节点更宽容。

问题5:BitSeap账本是怎样运作的?

BitSwap节点保存了一个记录与所有其他节点之间交易的账本。这个可以让节点追踪历史记录以及避免被篡改。当激活了一个链接,BitSwap节点就会互换它们账本信息。如果这些账本信息并不完全相同,分类账本将会重新初始化, 那些应计信贷和债务会丢失。 恶意节点会有意去失去“这些“账本, 从而期望清除自己的债务。节点是不太可能在失去了应计信托的情况下还能累积足够的债务去授权认证。伙伴节点可以自由的将其视为不当行为, 拒绝交易。

问题6:IPFS的文件是什么样的?

IPFS在Merkle DAG上还为模型化版本文件系统定义了一组对象。这个对象模型与Git比较相似:

l Block:一个可变大小的数据块

l List:块或者其他链表的集合

l Tree:块,链表,或者其他树的集合

l Commit:树在版本历史记录中的一个快照

问题7:IPNS是什么?

IPNS(Inter-Planetary Naming System)提供了一种为文件增加动态性的解决方案。它允许节点的PeerID限定的命名空间提供一个指向具体ipfs文件(目录)Hash的指针,通过改变这个指针每次都指向最新的文件内容,可以使得其他人始终访问最新的内容。

IPNS可以为ipfs的动态内容提供映射,用户通过publish操作,使得其他人访问固定的IPNS地址就可以最终访问到不同的ipfs文件内容。

问题8:SFS又是什么?

Self-certifying File System (SFS)自我认证认文件系统。使用SFS中的命名方案,给我们提供了一个种可以构建自我认证名称的方法,在一个加密指定的全局命名空间中,这是可变的。SFS文件系统的名字认证了它的服务,用户可以通过服务提供的公钥来验证,协商一个共享的私钥,保证所有的通信。所有的SFS实例都共享了一个全局的命名空间,这个命名空间的名称分配是加密的,不被任何中心化的body控制。

问题9:人类友好名称是什么?

IPNS的确是一个分配和在分配名称的好方法,但是对用户却不是十分友好的,因为它使用很长的哈希值作为名称,众所周知这样的名称很难被记住。IPNS足够应付URLs,但对于很多线下的传输工作就没有这么好用了。因此,IPFS使用下面的技术来增加IPNS的用户友好度。

问题10:DHT是什么?能不能简单科普下哈希加密?

DHT全称叫分布式哈希表(Distributed Hash Table),是一种分布式存储方法。

在不需要服务器的情况下,每个客户端负责一个小范围的路由,并负责存储一小部分数据,从而实现整个DHT网络的寻址和存储。

问题11:Kademlia DHT是什么?

Mainline DHT是一个去中心化哈希表,他可追踪查找所有的对等节点。

l 通过大量网络进行高效查询:查询平均联系人O(log2N)节点。(例如,20跳10万个节点的网络)

l 低协调开销:优化数量的控制消息发送到其他节点。

l 抵抗各种攻击,喜欢长寿节点。

l 在对等应用中广泛使用。

问题12:Coral DSHT是什么?

虽然一些对等文件系统直接在DHT中存储数据块,这种“数据存储在不需要的节点会乱费存储和贷款”。Coral DSHT扩展了Kademlia三个特别重要的方式:

l Kademlia在ids为“最近”(使用XOR-distance)的关键节点中存储值,不考虑应用程序数据的局部性,忽略“远”可能已经拥有数据的节点,并强制“最近”节点存储它,无论它们是否需要,这浪费了大量的存储和带宽。相反,Coral存储了地址,该地址的对等节点可以提供相应的数据块。

l Coral将DHT API从get_value(key)换成了get_any_values(key)(DSHT中的“sloppy”)中。这仍然是因为Coral用户只需要一个(工作)的对等体,而不是完整的列表。作为回报,Coral可以仅将子集分配到“最近”的节点,避免热点(当密钥变得流行时,重载所有最近的节点)。

l 另外,Coral根据区域和大小组织了一个称为群集的独立DSHT层次结构。这使得节点首先查询其区域中的对等体,“查找附近的数据而不查询远程节点”并大大减少查找的延迟。

问题13:S/Kademlia DHT是什么?

S/Kademlia扩展了Kademlia,用于防止恶意的攻击,有如下两方面的方法:

l S/Kad 提供了方案来保证NodeId的生成已经防止Sybill攻击。它需要节点产生PKI公私钥对。从中导出他们的身份,并彼此间签名。一个方案使用POW工作量证明,使得生成Sybills成本高昂。

l S/Kad 节点在不相交的路径上查找直, 即使网络中存在大量的不诚实节点,也能确保诚实节点可以互相链接。即使网络中存在一半的不诚实节点,S/Kad 也能达到85%的成功率。

问题14:块交换-BitTorrent是什么?

BitTorrent是一个广泛成功应用的点对点共享文件系统,它可以在存在不信任的对等节点(群集)的协作网络中分发各自的文件数据片。从BitTorrent和它的生态系统的关键特征, IPFS得到启示如下:

l BitTorrent的数据交换协议使用了一种bit-for-bat的激励策略,可以奖励对其他方面做贡献的节点,惩罚只榨取对方资源的节点。

l BitTorrent对等体跟踪文件的可用性,优先发送稀有片段。这减轻了seeds节点的负担, 让non-seeds节点有能力互相交易。

l 对于一些剥削带宽共享策略, BitTorrent的标准tit-for-tat策略是非常脆弱的。 然而,PropShare是一种不同的对等带宽分配策略, 可以更好的抵制剥削战略, 提高群集的表现。

问题15:版本控制系统-Git是什么?

版本控制系统提供了对随时间变化的文件进行建模的设施,并有效地分发不同的版本。流行版本控制系统Git提供了强大的Merkle DAG对象模型,以分布式友好的方式捕获对文件系统树的更改。

l 不可更改的对象表示文件(blob),目录(树)和更改(提交)。

l 通过加密hash对象的内容,让对象可寻址。

l 链接到其他对象是嵌入的,形成一个Merkle DAG。这提供了很多有用的完整和work-flow属性。

l 很多版本元数据(分支,标示等等)都只是指针引用,因此创建和更新的代价都小。

l 版本改变只是更新引用或者添加对象。

l 分布式版本改变对其他用户而言只是转移对象和更新远程引用。

问题16:Kademlia二叉状态树是什么?


【二叉树是非线性结构,即每个数据结点至多只有一个前驱,但可以有多个后继。它可采用顺序存储结构和链式存储结构。二叉树的顺序存储,就是用一组连续的存储单元存放二叉树中的结点。】

Kademlia网络的节点ID是由一颗二叉树维护,每个DHT条目包含<key,value>对,Key是文件的哈希值,Value是节点ID。Key和Value有相同的值域,都是160位。数据就存放在Key值和ID值最接近的节点上。如何定义它们的距离远近,XOR运算可以解决这个问题。在160位Hash上,判断两个节点x,y的距离远近是异或的二进制运算,d(x,y) = x XOR y。使用异或距离,只要沿着XOR距离降低的方向查找,从任意一个网络节点开始查询,总能找到存放文件的地址。每次更新总能筛选掉一半的节点,最多只需Log(n)步即可到达。

问题17:节点路由表K-Buket是什么?

节点路由表保存每个节点与自己一定距离范围内其他节点的连接信息。每一条路由信息由如下三部分组成:IP Address、UDP Port、Node ID。KAD路由表将距离分为160个K桶(存放K个数据的桶),比如编号为i的路由表,存放着距离为[2i,2(i+1)-1]的K条路由信息。且K桶内部存放位置是根据上次看到的时间顺序排列,最早看到的放在头部,最后看到的放在尾部。

问题18:BitTorrent的torrent是什么?

Torrent:服务器接收的元数据文件(.torrent后缀)。记录了下载数据的信息,但不包括文件自身。例如,文件名,文件大小,文件的哈希值,以及Tracker的URL地址。

问题19:BitTorrent的tracker是什么?

tracker:互联网上负责协调BitTorrent客户端行动的服务器。客户端打开一个torrent,机器连接tracker,请求一个可以接触的peers列表。传输过程中,客户端将定期向tracker提交自己的状态。Trcker只帮助Peers相互连接,不参与文件本身的传输。

问题20:BitTorrent的peer是什么?

peer:可连接并传输数据的节点。通常peer没有完整的文件,Peers之间相互下载、上传。

问题21:BitTorrent的swarm是什么?

swarm:连接一个Torrent的所有设备群组。

问题22:BitTorrent的Chocking是什么?

Chocking:Chocking阻塞是一种临时的拒绝上传策略,BitTorrent网络下载需要每个Peers相互上传,对于不合作的Peer,会采取临时的阻断策略。

问题23:BitTorrent的Pareto效率是什么?

Pareto效率:帕累托效率,系统中任意一个个体进一步提升效率只会导致其他个体效率下降,此时说明系统已经达到最优化了。

问题24:BitTorrent的Tit-fot-Tat是什么?

针锋相对(Tit-fot-Tat):以合作开局,然后采取以其人之道还治其人之身的策略。强调永远不先背叛对方,除非被背叛。

问题25:BitTorrent的内容发布怎么做的?

一个特定Torrent完整拷贝的节点称为Seed。文件初次发布时,需要一个Seed进行初次分享。

问题26:BitTorrent的片段选择算法是什么?

当然选择片段下载的顺序是一个很大的优化,BitTorrent也提供了一系列片段选择优化的策略:

l 优先完成单一片段:如果请求某一片段的子片段,本片段会最优先请求。尽可能先完成一个完整的片段,避免每一个片段都请求一个子片段,但都没有完成的情况。

l 优先选择稀缺片段:全部Peers中,某个片段拥有者最少,就是优先下载的片段。避免稀缺片段没上传了,所有Peers都不能下载到完整的文件。

l 第一个片段随机选择:刚开始并不知道哪些是稀缺的片段,就随机选择一个开始下载。

l 结束时按照子片段请求:在下载最后阶段,peer向所有的peers发送某片段的子片段的请求,一旦拿到了片段,就再向其他peers发送取消消息,避免宽带的浪费。

问题27:BitTorrent的阻塞策略是什么?

BT提倡peer之间尽可能多的相互共享。对于合作者,提供上传服务,对于不合作的,就阻塞对方。所以说,阻塞是一种临时的拒绝上传策略,虽然上传停止 了,但是下载仍然继续。在阻塞停止的时候,连接并不需要重新建立。阻塞算法并不属于BT对等协议(指peers 之间交互的协议)的技术部分,但是对提高性能是必要的。一个好的阻塞算法应该利用所有可用的资源,为所有下载者提供一致可靠的下载速率,并适当惩罚那些只 下载而不上传的peers。

问题28:Merkle Tree是什么?

Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树。Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值。非叶节点是其对应子节点串联字符串的hash。

问题29:Merkle的特点是什么?

【Merkle 可信树是为了解决多重一次签名中的认证问题而产生的,Merkle 可信树结构具有一次签名大量认证的优点,在认证方面具有显著的优势。基于 Merkle 可信树的数字签名方案在安全性上仅仅依赖于哈希函数的安全性,且不需要太多的理论假设,这使得基于 Merkle 可信树的数字签名更加安全、实用。】

l MT是一种树,大多数是二叉树,也可以多叉树,无论是几叉树,它都具有树结构的所有特点;

l Merkle Tree的叶子节点的value是数据集合的单元数据或者单元数据HASH。

l 非叶子节点的value是根据它下面所有的叶子节点值,然后按照Hash算法计算而得出的。

问题30:Filecoin的DSN是什么?

去中心化存储网络(Decentralized Storage Network)(DSN):我们提供一个由提供存储和检索服务的独立服务网络。

问题31:DSN中总账本是什么?

Distributed ledger分布式总帐:将账本在全网络公开,采取去中心化方式管理,全网所有节点通过共识机制达成一致。优点是去中心化,全球流通,无隐藏成本。

根据分布式总账的技术特点,一个应用场景的参与方,既是业务的参与主体,同时又是其分布式总账本身的运营和见证主体。

原创文章,作者:jiang,如若转载,请注明出处:https://ipfsdrop.com/tech/shenrulejieipfskanzhelidiandizixun/

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

(+86)18301922335

在线咨询:点击这里给我发消息

邮件:haskell@freechains.cn

工作时间:7×24小时

QR code