以下为个人理解,仅看过论文和一些相关资料,并未看过源码实现过程,仅供参考。如有错误,请指正,谢谢!
看本文前请自行了解DHT。
数据上传
- peer A 加入IPFS网络。假设peer A的node id 是000011,peer A要上传图片X,图片X的内容标识符(CID,或者也叫哈希值)011100。
- peer A 发现 自己的相邻节点peer B的node id 是011000,也就是说peer B与数据X的逻辑距离比peer A更近。所以peer A 告诉peer B自己有图片X。
- peer B发现自己的相邻节点peer C的node id 是011110,比自己的逻辑距离更近。因此告诉peer C,peer A 有图片X。
- peer C 发现自己的相邻节点中没有比自己更近的其他节点,于是就记录到DHT: X(011100) 存储在peer A(000011)。如果图片X足够小,会直接记录X。
数据查找
- peer E相应下载图片X,通过DHT递归查询到peer C,得知图片X存储在peer A(000011)。
- peer E不知道peer A的ip 地址和端口,peer C也没有和peer A直连。所以peer E 又进行了一次DHT查询,直到找到peer A的ip和端口。
那么问题来了,为什么peer C不直接存储peer A的ip和端口呢?
答:DHT采用node id来寻址,是一种在物理网络层之上的网络层,又叫overlay network。可以实现和物理网络解耦,可以不用考虑节点的ip变化问题。