IPFS原理


一文说清楚IPFS分布式存储系统

引言

IPFS(InterPlanetary File System),一种分布式网络传输协议,通过去中心化、内容寻址、点对点通信等技术提高文件存储的安全性和效率。

IPFS原理

  1. 分布式哈希表DHT:使用DHT实现内容寻址,每个文件由其内容哈希值唯一标识,节点根据内容哈希值可以快速定位文件。
  2. 内容寻址:文件定位基于内容寻址而非其存储的物理位置,确保文件的唯一性和可验证性。
  3. 点对点通信:IPFS节点通过点对点通信协议连接,可以请求、分布、转发文件。点对点的通信模型有助于提供网络可扩展性和抗攻击性。
  4. 内容缓存:节点可以缓存访问过的文件内容,以便将来请求时更快提供文件,有助于减少重复传输和提高网络性能。
  5. 数据块:文件分割为数据块,使用Merkle DAG组织起来,提高文件的可靠性和可验证性,也利于文件的部分下载和共享。
  6. 内容生产者和消费者:节点既是内容发布者也是内容消费者。

IPFS与传统文件系统的优劣

传统文件系统的优势:成熟稳定、易用性、中心化管理、性能
传统文件系统的劣势:单点故障、可用性限制、数据冗余和复制、扩展性限制

IPFS的优势:去中心化、内容寻址、网络效率、共享和分发
IPFS的劣势:网络稳定性、学习曲线、数据隐私

IPFS应用场景

  1. 分布式存储和共享
  2. 内容发布和分发
  3. 版本控制和文件管理
  4. 区块链和智能合约
  5. 去中心化应用
  6. 云存储替代方案
  7. 内容加速和CDN

常见IPFS系统

Go-IPFS、js-IPFS、IPFS Cluster、Textile、IPFS Desktop、Fleek、Infura、NFT.Storage


区块链 | IPFS:CID

CID

CID(Content-ID),IPFS用来标识内容,可以标识一个文件或文件块。CID是一个字符串,由内容经过哈希再编码而来,分CIDv0和CIDv1两个版本。

  1. CIDv0
    CIDv0使用了多重哈希和base58btc编码

多重哈希mutlihash是一种自描述的哈希,本身包含描述哈希长度、加密算法元数据。多重哈希遵从TLV模式,type-length-value。

  • type:生成哈希的加密算法的标识符,如SHA2-256的标识符为18
  • length:哈希实际长度,如SHA2-256时为256
  • value:实际哈希值

CIDv0内容多重哈希表示为<multihash-algorithm><multihash-length><multihash-hash>

基数编码将二进制编码为字符串,IPFS CIDv0对内容的多重哈希使用base58btc编码,如QmY7Yh4UquoXHLPFo2XbhXkhBvFoPwmQUSa92pxnxjQuPU。CIDv0以Qm开头。

  1. CIDv1
    CIDv0只支持base58btc编码,而为了支持多种编码方式,推出了CIDv1。

多码前缀(multicodec prefix)指示了数据使用了哪种编码方式,格式为
<multicodec><multihash-algorithm><multihash-length><multihash-hash>
如01110000表示dag-pb编码

为了区分CID版本,引入版本前缀
<cid-version><multicodec><multihash-algorithm><multihash-length><multihash-hash>
<cid-version>为1代表CIDv1,而CIDv0只有multihash的部分。

多基数前缀(multibase prefix),表示CID进行格式转换时使用的基数编码

Binary:
<cid-version><multicodec><multihash>
String:
<base>base(<cid-version><multicodec><multihash>)

base()对括号中内容进行基数编码,<base>是基数编码前缀标识符,如b代表base32,IPFS大多实现默认选base32。