# InterPlanetary File System (IPFS)

> 星际文件系统 (IPFS) 是一种去中心化协议，用于弹性、分布式的文件存储和共享，由 Juan Benet 于 2014 年开发。

- Canonical URL: https://iq.wiki/zh/wiki/ipfs
- Categories: Cryptoassets
- Tags: Layer 1
- Created: 2022-10-07T20:06:54.743Z
- Last updated: 2024-05-13T12:44:55.701Z
- Source: IQ.wiki — the world's largest blockchain and crypto encyclopedia (https://iq.wiki)

---

**星际文件系统 (IPFS)** 是一种去中心化的点对点网络协议，旨在创建一种更具弹性和分布式的的文件存储和共享方法。 [\[1\]](#cite-id-zugmfg4ljkp) [\[2\]](#cite-id-ek4slczowk)


## 历史

IPFS 由 [Juan Benet](https://iq.wiki/wiki/juan-benet) 开发，最初于 2014 年推出，旨在通过提供内容可寻址、版本化和密码安全的协议来解决与传统集中式文件系统相关的问题。 [\[3\]](#cite-id-2oy6jh2g6x6)

IPFS 于 2015 年 2 月发布了 alpha 版本，同年 10 月被 TechCrunch 描述为“通过口口相传迅速传播”。网络服务提供商 Cloudflare 于 2018 年开始使用 IPFS，并于 2022 年在该系统中启动了其网关。2020 年 3 月，Opera 浏览器通过在 IPFS 中托管内容，提供了对 Unstoppable Domains 提供商的集中式资源的访问。 [\[4\]](#cite-id-8b7eq7nibow)

## 概述

IPFS 的运行方式与 [BitTorrent](https://iq.wiki/wiki/bittorrent) 类似，允许用户以去中心化的方式托管和访问内容。与传统的基于服务器的系统不同，IPFS 依赖于用户运营商的分布式网络，每个运营商都持有整体数据的一部分。这种去中心化的方法增强了文件存储和共享的弹性。 [\[5\]](#cite-id-lu95rxtvx4)

在 IPFS 网络中，任何用户都可以根据其内容地址提供文件，允许对等方使用分布式哈希表 (DHT) 从节点查找和请求内容。文件存储在多个节点上，由内容标识符 (CID) 而不是物理位置标识。包含文件哈希的 CID 确保了唯一性并有助于内容检索。 [\[1\]](#cite-id-zugmfg4ljkp)[\[5\]](#cite-id-lu95rxtvx4)

哈希计算保证了基于内容的唯一性，即使文件具有不同的名称。IPFS 依赖于志愿者社区来维护节点，以确保在节点临时或永久中断的情况下数据的可用性。 [\[1\]](#cite-id-zugmfg4ljkp)

一旦添加到 IPFS，文件就是不可变的，但可以通过创建链接到以前版本的新对象来更新，从而有效地在 IPFS 中建立版本控制系统。 [\[1\]](#cite-id-zugmfg4ljkp)[\[3\]](#cite-id-2oy6jh2g6x6)


## 技术

### 内容寻址

IPFS 使用内容寻址，其中文件由从其内容派生的唯一哈希标识。这确保了可以验证内容的完整性，并且相同的文件只存储一次，从而减少了冗余。 [\[5\]](#cite-id-lu95rxtvx4)

### 去中心化

与传统的客户端-服务器模型不同，IPFS 作为节点的去中心化网络运行。每个节点存储整体内容的一部分，并且文件分布在多个节点上。这种去中心化增强了弹性和可用性。 [\[3\]](#cite-id-2oy6jh2g6x6)[\[5\]](#cite-id-lu95rxtvx4)

### 分布式文件系统

IPFS 创建了一个分布式文件系统，用户可以在其中无缝地访问和共享文件。内容不是托管在单个服务器上，而是分布在整个网络中，从而可以更快、更可靠地检索文件。 [\[5\]](#cite-id-lu95rxtvx4)

### MerkleDag

IPFS 将文件组织成 MerkleDag（Merkle 有向无环图），这是一种数据结构，有助于高效且安全地链接内容。对文件的更改会导致新的 MerkleDag，从而确保版本控制和可追溯性。 [\[5\]](#cite-id-lu95rxtvx4)

### IPNS（星际命名系统）

IPNS 在 IPFS 之上提供了一个人类可读的、可变的命名系统。它允许用户创建对可以更新的内容的引用，从而可以创建持久的、可共享的链接。 [\[5\]](#cite-id-lu95rxtvx4)

### 数据的存储方式

数据以 256 KB 的块存储，称为 IPFS 对象。大于该值的文件被拆分为尽可能多的 IPFS 对象以容纳该文件。每个文件的 IPFS 对象都包含指向组成该文件的所有其他 IPFS 对象的链接。 [\[1\]](#cite-id-zugmfg4ljkp)

当文件添加到 IPFS 网络时，会获得一个唯一的 24 字符哈希 ID，称为*内容 ID* 或 CID。这就是它在 IPFS 网络中被识别和引用的方式。检索文件时重新计算哈希值会验证文件的完整性。如果检查失败，则文件已被修改。当文件被合法更新时，IPFS 会处理文件的*版本控制*。 [\[1\]](#cite-id-zugmfg4ljkp)[\[3\]](#cite-id-2oy6jh2g6x6)

## IPFS 和区块链

IPFS 和 [区块链](https://iq.wiki/wiki/blockchain) 相互补充，形成了 IPFS 的创建者 [Juan Benet](https://iq.wiki/wiki/juan-benet) 所说的“伟大的结合”。IPFS 和区块链都是 Protocol Labs 的一部分，由 Benet 创立。IPLD（星际链接数据）是一个与 IPFS 密切相关的 Protocol Labs 项目，用作区块链等分布式结构的数据模型。该模型有助于通过 IPFS 高效存储和访问区块链数据。选择存储 IPFS 数据的用户将获得 [Filecoin](https://iq.wiki/wiki/filecoin) 形式的奖励。IPLD 实现了与各种区块链的无缝交互，并与 [Ethereum](https://iq.wiki/wiki/ethereum) 和 [Bitcoin](https://iq.wiki/wiki/bitcoin) 集成。 [\[5\]](#cite-id-lu95rxtvx4)

> “IPFS 以类似于 Web 将所有这些网站连接在一起的方式连接所有这些不同的区块链。就像您可以在一个页面上放置一个链接到另一个页面的链接一样，您可以在以太坊 [例如] 中放置一个链接到 zcash 的链接，IPFS 可以解决所有这些问题”——[Juan Benet](https://iq.wiki/wiki/juan-benet)

## 用例

### 去中心化网络

IPFS 通过为构建不依赖于中央服务器的应用程序奠定基础，为去中心化网络的愿景做出了贡献。这可以增强 Web 内容的弹性和抗审查性。 [\[6\]](#cite-id-4bw4jckpd57)

### 内容分发

IPFS 用于高效且去中心化的内容分发。在节点网络中分发内容减少了对中央服务器的依赖，使其成为共享大型数据集或多媒体文件的有吸引力的解决方案。 [\[6\]](#cite-id-4bw4jckpd57)

### 区块链和加密货币

IPFS 通常与 [区块链](https://iq.wiki/wiki/blockchain) 技术集成，以高效地存储和检索数据。一些区块链项目使用 IPFS 进行交易数据的去中心化存储，从而确保数据的完整性和可用性。 [\[3\]](#cite-id-2oy6jh2g6x6)

例如，最大的 [区块链](https://iq.wiki/wiki/blockchain) 和 [加密货币](https://iq.wiki/wiki/cryptocurrency) 百科全书 [IQ.wiki](https://iq.wiki/wiki/iqwiki) 会在 [Polygon](https://iq.wiki/wiki/polygon) 上记录每次编辑的哈希值，并且数据存储在 IPFS 上。 [\[3\]](#cite-id-2oy6jh2g6x6)

### NFT

IPFS 可用于 NFT（[非同质化代币](https://iq.wiki/wiki/non-fungible-token-nft)）的上下文中，用于对相关媒体和元数据进行去中心化和分布式存储。IPFS 提供了一种去中心化的替代方案，而不是依赖于中央服务器来托管 NFT 内容，从而增强了可访问性和抗审查性。它提供了指向相关媒体和元数据的永久链接，并为 NFT 生态系统贡献了更具弹性和抗审查性的基础设施。 [\[5\]](#cite-id-lu95rxtvx4)[\[1\]](#cite-id-zugmfg4ljkp)
