之前我们对存储谈得比较多,谈检索相对较少。今天我们就和大家分享一下IPFS检索内容的过程。
我们会通过对几个关键术语的介绍带大家一步步了解IPFS检索内容的过程和方法。
分布式哈希表(DHT):分布式哈希表(DHT)全称是Distributed Hash Table。
当一个节点加入到IPFS网络中后,该节点中存储的IPFS内容就会通过IPFS的分布式哈希表(DHT)频繁地广播到IPFS全网,告诉其它节点它自己存储了什么内容。
这样当有用户希望检索的内容正好在这个节点上时,其它节点就会告诉用户从这个节点索取他想要的内容。
多地址(MultiAddresses):
在讲述多地址前,我们先定义两个概念:检索节点和存储节点。检索节点就是接到用户请求需要检索某个内容的节点。存储节点就是存储了用户所需内容的节点。
当检索节点要检索某个内容时,实际上是要查找谁是存储节点并且存储节点到底在哪里。
当存储节点被找到后,IPFS网络就会返回存储节点的“多地址”。典型的“多地址”看起来是类似下面这样的一串字符:
/ip4/123.456.78.90/tcp/4001/ipfs/QmAbCdEfGhIjKlMnOpQrStUvWxYzAbCdEfGhIjKlMnOpQr
“多地址”的“多”意味着它的格式有多种。它为检索节点提供了以下信息:
- 其它节点如果想与存储节点进行通信需要遵循什么协议 - 存储节点的IP是多少 - 其它节点访问存储节点时该访问哪个端口 - 存储节点的PeerID是多少
内容获取:
当有检索节点找到了存储节点后,会得到存储节点的“多地址”。
接下来检索节点就会通过“多地址”直接连接存储节点。这个连接过程就会用到IPFS的“swarm”功能,然后从存储节点获取所需的检索内容。
通常当检索节点通过DHT找存储节点时,这个寻找的过程比较耗时,这主要有两种原因:一是存储节点可能刚刚才接入进IPFS网络不久,二是知道存储节点的其它节点并不多。这两点本质上又统统可以归咎于节点之间的位置太分散。
那我们有没办法加速寻找存储节点的过程呢?当然是有的。
如果在某些情况下,检索节点已经知道了存储节点的位置,实际上它就没必要再通过DHT来搜索存储节点了,可以直接连接存储节点,就像在高速公路上走“快车道”一样能带来巨大的便利。
在IPFS中,我们可以手动设置直接连接一个节点。比如我们已经知道一个节点的“多地址”,我们就可以用IPFS的“swarm connect”功能直接连接。
这样当检索节点刚好知道存储节点的“多地址”时,可以用“swarm connect”直接连接存储节点。
以上就是IPFS中文件检索的过程以及我们如何加速文件检索的方法。
作者:Filecoin社区