IPFS基础原理
IPFS核心基础
内容寻址
内容通过DAG相互连接
通过分布式Hash表实现内容发现
内容寻址
IPFS内容中每一块内容都有一个内容标识(CID),也就是Hash值。许多分布式系统都采用Hash,并且通过hash把内容串起来,但这些分布式系统并不是可以相互操作的。所以IPFS的IPLD(Interplanetary Linked Data)就是用来处理各个不同的系统内容。IPLD可以识别不同的内容寻址结构。
DAG
IPFS使用Merkle DAG, 每个节点有这个节点内容的Hash
如果是文件,那每个文件都有CID
如果是文件夹,那文件夹的CID是它包含的那些文件的CID的Hash
如果文件分块,那每个块都有CID
###分布式Hash表(DHT)
这个Hash表分布在各个节点中,如果要查找内容,需要向节点查询这个表。libp2p项目提供DHT和节点连接通信功能。
通过DHT找到那些节点存放了内容后,还需要再通过DHT找到这些节点的当前位置(Location)
接下来就需要exchange交换数据(使用Bitswap协议)
最后
libp2p还使用multiplexing技术,使用一个连接,完成所有通讯
CID是使用multihash生成的,multihash的前面一部分表示用的是什么hash算法以及多少位, 可以打开[这个地址][1]体验
IPLD: Meta-format for understanding, encoding, and decoding merkle linked data.
IPLD Data Model: 一种灵活的、基于JSON的数据模型,用于表示merkle-dags.
[1]: https://cid.ipfs.io/