IPFS原理
引言
IPFS(InterPlanetary File System),一种分布式网络传输协议,通过去中心化、内容寻址、点对点通信等技术提高文件存储的安全性和效率。
IPFS原理
- 分布式哈希表DHT:使用DHT实现内容寻址,每个文件由其内容哈希值唯一标识,节点根据内容哈希值可以快速定位文件。
- 内容寻址:文件定位基于内容寻址而非其存储的物理位置,确保文件的唯一性和可验证性。
- 点对点通信:IPFS节点通过点对点通信协议连接,可以请求、分布、转发文件。点对点的通信模型有助于提供网络可扩展性和抗攻击性。
- 内容缓存:节点可以缓存访问过的文件内容,以便将来请求时更快提供文件,有助于减少重复传输和提高网络性能。
- 数据块:文件分割为数据块,使用Merkle DAG组织起来,提高文件的可靠性和可验证性,也利于文件的部分下载和共享。
- 内容生产者和消费者:节点既是内容发布者也是内容消费者。
IPFS与传统文件系统的优劣
传统文件系统的优势:成熟稳定、易用性、中心化管理、性能
传统文件系统的劣势:单点故障、可用性限制、数据冗余和复制、扩展性限制
IPFS的优势:去中心化、内容寻址、网络效率、共享和分发
IPFS的劣势:网络稳定性、学习曲线、数据隐私
IPFS应用场景
- 分布式存储和共享
- 内容发布和分发
- 版本控制和文件管理
- 区块链和智能合约
- 去中心化应用
- 云存储替代方案
- 内容加速和CDN
常见IPFS系统
Go-IPFS、js-IPFS、IPFS Cluster、Textile、IPFS Desktop、Fleek、Infura、NFT.Storage
CID
CID(Content-ID),IPFS用来标识内容,可以标识一个文件或文件块。CID是一个字符串,由内容经过哈希再编码而来,分CIDv0和CIDv1两个版本。
- 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开头。
- 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。