dht回复数据为乱码_浅谈 | IPFS数据存储原理

存储

  链|存|科|技

本文主要会从数据存储的角度来对IPFS的文件存储原理进行详解,方便大众理解数据存储如何在整个IPFS运行。

01.IPFS对于数据存储的解决方案

IPFS在数据存储方面采用的是分散式的文件存储,区别于HTTP协议的位置寻址,IPFS是基于内容寻址,当文件上传到IPFS节点存储时,节点会对文件进行Merkle DAG(默克尔有向无环图)的格式组织分块存储,在存储完毕后,文件将以Merkle DAG的根哈希数来表示该文件,用户可以从IPFS构建的网络中以DHT(分布式哈希表) 的方式获取文件。

此外,在数据存储架构上,IPFS还采用了CID字库技术来验证数据的重复性,此功能将会有助于对IPFS网络进行重复数据的删除,确保存储在网络上的数据唯一性,因此,具有相同内容的文件是无法提交两次。

这样的数据存储架构在一定程度上不仅能优化存储要求,还可以提高整个网络性能。

0a4a088e7c1a45eb8c6234ec9be9fc0b.png

注*什么是默克尔树

默克尔树(或简单的“哈希树”)是一种数据结构,其中每一个节点被散列。在默克尔树中,节点通过其内容地址(哈希)指向其他节点。(请记住,当我们通过加密哈希来运行数据时,我们会获得一个我们可以认为是链接的“哈希”或“内容地址”,因此默克尔树是链接节点的集合。)如前所述,所有内容地址对于它们表示的数据都是唯一的。在上图中,node E 包含对node F和的哈希的引用 node G。这意味着的内容地址(哈希)对于 node E包含这些地址的节点是唯一的。迷路?让我们将其想象为一组目录或文件夹。如果在包含子目录 F 和 G 的情况下通过哈希算法运行目录 E,则返回的内容派生哈希将包含对这两个目录的引用。如果我们删除目录 G,就像 Grace 从她的小猫照片中删除该胡须一样。目录E不再具有相同的内容,因此将获得一个新的哈希。构建上面的树后,根节点的最终内容地址(哈希)对于一棵树是唯一的,该树包含该树下所有节点。如果任何节点中的数据甚至要改变一个字节,那么更改后的节点的哈希值就会改变,其所有父节点的哈希值也会改变。

02.IPFS文件存储分发具体实现过程

IPFS数据存储共有8个组合:节点身份、Pinning(固定CID的管理器)、Blockstore、BaseBlocks、GCLocker、Blocks、Merkle DAG、DHT。

每个节点采用nodeID作为身份识别,节点存储着公钥和加密过的私钥,技术上使用基于S/Kademlia和Coral的分布式松散哈希表DSHT来寻找匹配的节点和特定节点的地址信息,小值(等于或小于1KB)直接存储在DHT上生成一个NodeID,对于更大的值,IPFS会拆成小块,DHT存储拥有这些块的节点NodeIds。

数据交换使用基于BitTorrent的BitSwap协议来发送和接收分布式数据区块。BitSwap 维持着两个列表,想要获得的块和已保存的块。但与 BitTorrent 不同的是,BitSwap 不限于一个torrent中的块。BitSwap 节点可以从整个IPFS网络获取所需的块,而不管这些块属于哪些文件,这大大提高了下载效率。同时,网络中存在一些激励节点会主动缓存和传播稀有的文件片段。

DHT 和 BitSwap 技术让 IPFS形成一个用于快速而强大的存储和分发块的 P2P 系统。在此之上,IPFS还构建了一种有向无环图 Merkle DAG,使用嵌入数据源中的目标哈希散列构建对象之间的链接。Merkle DAGs 为IPFS提供了许多有用的属性,包括:

1.内容寻址:所有内容都由其多哈希校验和进行独立标识

2.防篡改:所有内容都使用其校验和进行验证。如果数据被篡改或损坏,IPFS则会检测到该数据。

3.去冗余:所有内容完全相同的对象,只存储一次。

IPFS并不会要求每一个节点都存储所有的内容,节点的所有者可以自由选择想要维持的数据,在备份了自己的数据之外,自愿的为其他的关注的内容提供服务。

adb0c77fa5f50dcc51caca85a41694a4.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值