Sublarge

// 安全研究 · 2025-09-30

IPFS(星际文件系统)技术介绍:探索去中心化存储的未来

IPFS(星际文件系统)是一种去中心化的分布式存储协议,通过内容寻址(基于哈希值)取代传统HTTP的位置寻址,实现高效、安全的数据存储与共享。其核心技术包括分布式哈希表(DHT)、IPNS动态命名系统及P2P网络分发,支持版本控制与数据冗余。IPFS与区块链(如NFT存储)深度结合,应用于去中心化博客(xLog)、视频平台、网盘等领域,但面临节点激励、内容持久性等挑战。作为Web3.0基础设施,IPFS推动互联网向去中心化、用户主导的范式转变,未来或与Filecoin等激励层协同,重塑数据存储生态。

IPFS(InterPlanetary File System,星际文件系统) 是一套开源的点对点超媒体协议与分布式文件系统,核心理念是用内容寻址替代传统的位置寻址。它让数据以“它是什么”而非“它在哪”被唯一标识、发现与传输,从而构建一个更抗审查、可验证、可长期保存的互联网数据层。

Juan Benet 于 2014 年提出并创立 Protocol Labs 推动。名称致敬 Licklider 的“星际计算机网络”构想——即使在高延迟(如地球与火星之间)环境下,也能按内容可靠获取数据。IPFS 可被理解为“全球共享的单一 BitTorrent 群 + Git 风格的 Merkle DAG”。

1. 为什么需要 IPFS?传统 Web 的痛点

传统 HTTP/HTTPS 以服务器位置为中心:

  • 内容依赖单一或少数源站,易受宕机、审查、链接失效影响。
  • 相同内容被重复传输与存储。
  • 完整性依赖服务器与证书体系,中间人可篡改。
  • 网页平均寿命仅约 100 天,历史极易丢失。

IPFS 的目标不是立刻替换 HTTP,而是提供一个可互操作的分布式层:内容可被任意节点缓存与服务,哈希自证完整性,永久链接通过 CID 实现。

graph LR
    subgraph HTTP["传统 HTTP 模式"]
        C1[客户端] -->|请求 URL| S1[单一服务器]
        S1 -->|返回内容| C1
    end
    subgraph IPFS["IPFS 模式"]
        C2[客户端] -->|请求 CID| N1[节点 A]
        C2 -->|请求 CID| N2[节点 B]
        C2 -->|请求 CID| N3[节点 C]
        N1 & N2 & N3 -->|任意持有者返回| C2
    end

2. 核心技术原理

2.1 内容寻址与 CID

数据被切成块(默认约 256 KB),每个块通过哈希(通常 SHA-256)+ 元数据生成 CID(Content Identifier)。相同内容永远产生相同 CID,内容一改 CID 即变。

CID 使用 Multiformats 设计,支持版本(CIDv0/CIDv1)、编解码器、多哈希等,具备向前兼容性。

flowchart TD
    A[原始文件] --> B[切块 256KB]
    B --> C[每块计算哈希]
    C --> D[生成块级 CID]
    D --> E[用 IPLD/UnixFS 链接成 Merkle DAG]
    E --> F[根 CID = 文件/目录唯一标识]
    F --> G[可验证、可去重、可永久引用]

2.2 Merkle DAG 与 IPLD

IPFS 的数据模型是 Merkle DAG(默克尔有向无环图):节点之间的链接是目标内容的哈希。这带来:

  • 自认证(任何节点可独立验证)。
  • 去重(相同块只存一份)。
  • 可组合(文件、目录、任意数据结构)。
  • 不可变(改一处即新 CID)。

IPLD(InterPlanetary Linked Data)是通用的内容寻址链接数据框架;UnixFS 是其面向文件/目录的具体实现;CAR 文件则是可传输的内容寻址归档。

graph TD
    Root[根节点 CID<br/>QmXxx...] --> Dir1[目录节点]
    Root --> FileA[文件 A 元数据]
    Dir1 --> FileB[文件 B]
    FileA --> Block1[数据块 1]
    FileA --> Block2[数据块 2]
    FileB --> Block3[数据块 3]
    Block1 -.->|相同内容可复用| Shared[共享块]

2.3 发现与传输:DHT + Bitswap

  • Kademlia DHT:分布式哈希表,存储“哪个 Peer 提供哪个 CID”的提供者记录。节点通过 DHT 查找持有数据的对等节点。
  • Bitswap:核心块交换协议。节点维护 want-list,优先向已连接对等节点询问/交换块(类似 BitTorrent,但跨文件、全局群),找不到时再查 DHT。同时承担路由与传输职责。
  • 底层由 libp2p 提供连接管理、加密、身份与多种传输(TCP、QUIC、WebRTC 等)。本地发现可用 mDNS。
sequenceDiagram
    participant Client as 请求节点
    participant Peers as 已连接 Peers
    participant DHT as Kademlia DHT
    participant Provider as 数据持有者

    Client->>Peers: Bitswap want-have / want-list(根 CID)
    alt 本地 Peers 有
        Peers-->>Client: 返回块 + 后续子块
    else 无
        Client->>DHT: 查询 Provider Records
        DHT-->>Client: 返回 PeerID + 多地址
        Client->>Provider: 建立连接并请求块
        Provider-->>Client: Bitswap 传输块
    end
    Note over Client: 递归获取子块直到完整 Merkle DAG

内容本身不可变,但可用 IPNS(基于公钥的可变指针)或 DNSLink 把人类可读名称指向最新 CID,实现“可更新的永久链接”。

3. 子系统全景

职责 主要组件 说明
数据表示与组织 CID、IPLD、UnixFS、MFS、CAR 内容寻址与结构化
内容路由 Kademlia DHT、Bitswap、委托路由、mDNS 找到谁有数据
数据传输 Bitswap、HTTP Gateways、Graphsync 实际搬数据
连接层 libp2p P2P 基础
可变命名 IPNS、DNSLink 解决不可变与更新矛盾
HTTP 桥接 Gateways、Pinning API 兼容现有 Web

4. 持久性:Pinning 与 Filecoin

关键认知:ipfs add 不等于永久保存。节点会垃圾回收未 pin 内容。

  • Pinning:明确告诉节点“不要删除这个 CID”。可本地 pin,或使用远程 Pinning 服务。
  • Pinning 服务(Pinata、Filebase、Storacha 等):付费专业节点帮你 pin,并通常提供专用网关。适合 NFT、静态站。
  • Filecoin:激励存储市场。存储提供者用密码学证明持续持有数据,用户付费购买。IPFS 负责快速发现与传输,Filecoin 负责可验证长期持久化。2026 年已有成熟的 IPFS → Filecoin 迁移工具,CID 保持不变。
flowchart LR
    A[上传文件] --> B[生成 CID]
    B --> C{需要持久?}
    C -->|短期/热数据| D[本地 Pin 或 Pinning 服务]
    C -->|长期/可验证| E[Filecoin 存储交易]
    D & E --> F[多节点/多服务冗余]
    F --> G[通过网关或原生节点访问]

5. 现有实现与生态

  • Kubo(原 go-ipfs):最成熟的 Go 完整实现,含 daemon、CLI、网关、RPC。适合服务器与桌面。
  • Helia:轻量模块化 JS/TS 实现,适合嵌入浏览器或应用,启动快、资源占用低。
  • 其他:Boxo(Go 组件库)、Nabu 等。

注意:2026 年 9 月底,原核心维护方 Shipyard(Protocol Labs 资助)结束对 Kubo、Helia 及部分公共网关的专职维护。社区与新 steward 正在接管,网络仍持续运行,ProbeLab 监测显示 DHT 相关在线节点规模在数千量级。

6. 典型应用场景

  • NFT 与 Web3 资产:元数据、图片、视频存 IPFS,合约只存 CID。
  • 去中心化前端与静态站:dApp、文档、镜像。
  • 抗审查存档:维基百科镜像、新闻、科研数据。
  • 离线优先与协作:科学数据共享、游戏资源分发、个人知识库。
  • 与 AI/企业结合:Filecoin 2026 年推出企业与代理友好产品,支持 IPFS 内容迁移与可验证存储。

7. 实践建议与常见坑

  1. 永远多 pin:至少两个独立服务或自有节点 + 备份。
  2. 冷内容延迟:首次获取可能慢于直接 HTTP,缓存后接近或更好。
  3. 网关依赖:生产环境应评估专用网关或原生节点,而非只依赖公共网关。
  4. 可变数据:用 IPNS/DNSLink,或接受“新版本新 CID”。
  5. 隐私:IPFS 默认公开;敏感数据需加密后再上传。
  6. 监控:使用 ProbeLab 等工具观察网络健康,或自建节点监控。

简单上手流程:

# 安装 Kubo 后
ipfs init
ipfs daemon
ipfs add myfile.txt          # 得到 CID
ipfs pin add <CID>           # 本地钉住
# 通过网关访问:https://ipfs.io/ipfs/<CID>
bash6 行

8. 优势、挑战与未来

优势:完整性自证、抗单点、内容去重、可移植 CID、与区块链天然契合。
挑战:无默认永久、性能波动、网关中心化倾向、维护可持续性、可变数据不友好。

IPFS 已证明内容寻址 + P2P 在真实互联网中可行,并成为 Web3 与去中心化应用的重要基础设施。它的真正价值在于提供“可验证、可移植、抗失效”的数据层,而非取代一切中心化服务。结合 Filecoin 的激励存储与社区持续演进,它正从“实验协议”走向更稳健的生产级数据基础设施。


延伸阅读:官方文档 docs.ipfs.tech、原始白皮书、ProbeLab 网络监测、Filecoin 文档。

原文 https://blog.csdn.net/2301_79518550/article/details/149944879