IPFS(星际文件系统):修订间差异
创建页面,内容为“== 简述 == 一种去中心化的文件存储协议,支持高效存储和分发大规模数据,常与Web3应用结合使用。 == 什么是 IPFS(星际文件系统)? == '''IPFS(InterPlanetary File System,星际文件系统)''' 是一种去中心化的分布式文件存储与共享协议,旨在为互联网提供更高效、更加开放和更安全的内容分发方式。IPFS 通过内容寻址(Content Addressing)取代传统的基于位…” |
无编辑摘要 |
||
(未显示同一用户的1个中间版本) | |||
第1行: | 第1行: | ||
'''星际文件系统'''('''InterPlanetary File System''',缩写为'''IPFS''')是一个旨在实现文件的分布式存储、共享和持久化的网络传输协议<ref>[https://www.wired.com/2016/06/inventors-internet-trying-build-truly-permanent-web/ The Inventors of the Internet Are Trying to Build a Truly Permanent Web] | WIRED</ref>。它是一种内容可寻址的对等超媒体分发协议,用于在分布式哈希表中存储和共享数据。通过使用内容寻址,IPFS 在连接 IPFS 主机的全局命名空间中唯一标识每个文件,从而创建了一个弹性的文件存储和共享系统。 | |||
在 IPFS 网络中的节点构成一个分布式文件系统。它是一个开放源代码项目,自 2014 年开始由协议实验室在开源社区的帮助下发展。其最初由 Juan Benet 设计<ref>[https://docs.ipfs.tech/ IPFS Documentation] | IPFS Docs</ref>。IPFS 允许用户以类似于 BitTorrent 的方式托管和接收内容。与以中央服务器为中心的传统协议(如 HTTP 和 HTTPS)相反,IPFS 围绕用户运营商的去中心化系统构建,这些运营商持有部分总体数据。网络中的任何用户都可以通过其内容地址提供文件,网络中的其他对等节点可以使用分布式哈希表 (DHT) 从拥有该文件的任何节点查找和请求该内容。 | |||
与传统的基于位置的协议(如 HTTP 和 HTTPS)相比,IPFS 使用基于内容的寻址来提供一种去中心化的替代方案来分发万维网。IPFS 用于去中心化应用程序和内容存档。 | |||
{| class="wikitable" style="float:right; width: 45%; margin-left: 10px;" | |||
|+星际文件系统 | |||
!开发者 | |||
|Protocol Labs | |||
|- | |||
!当前版本 | |||
|0.32.1(2024年11月15日;稳定版本) | |||
|- | |||
!源代码库 | |||
|[https://github.com/ipfs/kubo github.com/ipfs/kubo] | |||
|- | |||
!编程语言 | |||
|'''协议实现''':Go(参考实现)、JavaScript、C语言、Python | |||
'''客户端库''':Go、Java、JavaScript、Python、Scala、Haskell、Swift、Common Lisp、Rust、Ruby、PHP、C♯、Erlang | |||
|- | |||
!操作系统 | |||
|FreeBSD、Linux、macOS、Windows | |||
|- | |||
!语言 | |||
|Go、JavaScript、Python | |||
|- | |||
!类型 | |||
|协议、分布式文件系统、内容分发网络 | |||
|- | |||
!许可协议 | |||
|MIT许可证 | |||
|- | |||
!网站 | |||
|[https://ipfs.tech/ ipfs.tech] | |||
|} | |||
== IPFS 的 | == 发展历程 == | ||
IPFS 由 Juan Benet 创建,他于2014年5月后来创立了 Protocol Labs。Alpha 版本于2015年2月推出,同年10月被 TechCrunch 描述为“通过口口相传迅速传播”。网络服务提供商 Cloudflare 于2018年开始使用 IPFS,并于2022年在系统中推出了自己的网关。 | |||
IPFS 协议是类似于比特币区块链协议的网络基础设施,有着存储不可更改的数据的优势,可以移除网络上的冗余文件,获取存储节点的地址信息——以搜索网络中的文件。 | |||
目前的实现采用 Go 和 JavaScript,并有 Python 实现(上次提交时间2020年1月29日)。Go实现被认为是开发正式规范时的“参考实现”<ref>GitHub - ipfs/specs: [https://github.com/ipfs/specs Technical specifications for the IPFS protocol stack]</ref>。 | |||
2020年3月,Opera 浏览器通过在 IPFS 中托管内容,提供了对 Unstoppable Domains 提供商的集中资源的访问。 | |||
2021年1月19日,Brave 浏览器宣布从 1.19 版本开始,将默认支持 IPFS。这意味着 Brave 成为首个将 IPFS 集成到浏览器中的浏览器。 | |||
== 概述 == | |||
星际文件系统 (InterPlanetary File System,简称 IPFS) 是一种去中心化的协议、超媒体和点对点 (P2P) 网络,用于分布式文件存储和共享。通过使用内容寻址,IPFS 在连接 IPFS 主机的全局命名空间中唯一标识文件,创建了一个超媒体系统,可实现高效可靠的数据分发。 | |||
IPFS 允许用户以类似于 BitTorrent 的方式托管和接收内容。与以中央服务器为中心的传统协议(如 HTTP 和 HTTPS)相反,IPFS 围绕用户运营商的去中心化系统构建,这些运营商持有部分总体数据,从而创建了一个弹性的文件存储和共享系统。网络中的任何用户都可以通过其内容地址提供文件,网络中的其他对等节点可以使用分布式哈希表 (DHT) 从拥有该文件的任何节点查找和请求该内容。与 BitTorrent 不同,IPFS 旨在创建一个单一的全球网络。这意味着,如果两个用户发布具有相同哈希值的数据块,则从一个用户下载内容的对等节点也将与从第二个用户下载内容的对等节点交换数据。 | |||
IPFS 的关键特性包括: | |||
* 基于内容寻址的文件存储: 每个文件都根据其内容哈希进行唯一标识,确保数据完整性并促进高效检索。 | |||
* 点对点架构: 分布式节点网络促进了直接文件共享,无需中央服务器。 | |||
* 版本控制文件系统: 支持文件版本控制,允许用户跟踪随时间推移的变化。 | |||
* 与分布式应用程序的互操作性: IPFS 与去中心化应用程序 (dApp) 无缝集成,为区块链和 Web3 生态系统提供了一个强大的存储层。 | |||
IPFS 旨在通过使用可通过 HTTP 访问的网关来取代用于静态网页交付的协议。用户可以选择不在其设备上安装 IPFS 客户端,而是使用公共网关。这些网关的列表在 IPFS GitHub 页面上维护。 | |||
除了提供替代的网页托管方式之外,IPFS 还广泛用于去中心化应用程序、科学数据共享和内容存档,作为新兴去中心化互联网的基础层。 | |||
IPFS是一个对等的分布式文件系统,它尝试为所有计算设备连接到同一个文件系统。在某些方面,IPFS类似于万维网,也可以被视作一个BitTorrent节点群、在同一个Git仓库中交换对象。 换种说法,IPFS提供了一个高吞吐量、按内容寻址的块存储模型,及与内容相关超链接。这形成了一个广义的Merkle有向无环图(DAG)。IPFS结合了分布式散列表、鼓励块交换和一个自我认证的命名空间。IPFS没有单点故障,并且节点不需要相互信任。分布式内容传递可以节约服务器带宽,并防止HTTP方案可能遇到的DDoS攻击。 | |||
== IPFS 的 | 该文件系统可以通过多种方式访问,包括FUSE与HTTP。将本地文件添加到IPFS文件系统后,其他用户通过IPFS网关进行访问。文件表示基于其哈希,因此有利于缓存。文件的分发采用一个类似BitTorrent的协议。其他查看内容的用户也有助于将内容提供给网络上的其他人。 | ||
IPFS | |||
IPFS有一个称为IPNS的名称服务,可以绑定域名或者用户公钥,固定访问的链接,但是访问的内容可以更新。 | |||
=== Merkle数据格式 === | |||
每个Merkle都是一个有向无环图 ,因为每个节点都通过其名称访问。每个Merkle分支都是其本地内容的哈希,它们的子节点使用它们的哈希而非完整内容来命名。因此,在创建后将不能编辑节点。这可以防止循环(假设没有哈希碰撞),因为无法将第一个创建的节点链接到最后一个节点从而创建最后一个引用。 | |||
对任何Merkle来说,要创建一个新的分支或验证现有分支,通常需要在本地内容的某些组合体(例如列表的子哈希和其他字节)上使用一种哈希算法。IPFS中有多种散列算法可用<ref>GitHub - ipfs/kubo: [https://github.com/ipfs/kubo/tree/master An IPFS implementation in Go]</ref>。 | |||
=== 使用 === | |||
用户通过ipfs网关上传文件后,获得文件cid,再通过cid在ipfs网关访问文件,访问者可以无需安装客户端。 | |||
ipfs官方提供了一个网关,同时也有用户自行搭建的网关,ipfs官方的网关在中国大陆地区已经被屏蔽。 | |||
部分浏览器内置ipfs的支持,可以使用网关或者本地节点访问ipfs资源内容。 | |||
=== 不足 === | |||
一个文件如果没有节点进行存储,也会丢失,无法访问。 | |||
NAT网络内的一个节点内的文件,其它网关很难访问。 | |||
非热门资源,存储的节点过少,网关的访问速度很慢。 | |||
== 应用案例 == | |||
* 2017年9月至10月间,举办的2017年加泰罗尼亚独立公投,因被西班牙宪法法院认定违法而使网站被屏蔽。此后,加泰罗尼亚海盗党将网站整个镜像到IPFS上以回避加泰罗尼亚高等法院的屏蔽命令。 | |||
* IPFS被用于建立维基百科的镜像,让那些住在维基百科被国家法律屏蔽的地方的人民能继续访问到维基百科的内容。不过那份被镜像的维基百科是一份被限制改动的复制本且无法被更新。 | |||
* 文件币也与IPFS有关,其是由Juan Benet和协议实验室合作开发的一套基于IPFS的协作存储云。 | |||
* Cloudflare营运有一个分布式Web网关,使用户可在无本地节点的情况下,简化、加速且安全的访问IPFS。 | |||
* IPLF是Dean Reynaud在2001年发表于“Data Science”的一篇开创性文章中创造的一个术语。<sup>[来源可靠?]</sup> | |||
* 博客平台 Matters 发布的文章会自动被分布存储到ipfs上,并生成唯一的文章指纹。此后文章无法被他人删改,并可以在IPFS的公共节点上通过文章指纹被找到。 | |||
* Filecoin 是一种基于 IPFS 的协作存储云,也是由 Protocol Labs 创立的。 | |||
* Cloudflare 运行着一个分布式 Web 网关,以简化、加速和保护对 IPFS 的访问,而无需本地节点。 | |||
* 影子图书馆 Anna's Archive 和 Library Genesis 也通过 IPFS 提供书籍,使最大的在线图书库更加强大。 | |||
* 2018年,互联网档案馆和 Protocol Labs 举办了一次去中心化网络峰会,探索 IPFS 和其他技术在完全去中心化互联网中的应用。2022年,互联网档案馆探索将 Wayback Machine 数据放入 IPFS。 | |||
* Brave 使用 Origin Protocol 和 IPFS 托管其去中心化商品商店,并在 2021 年将其支持添加到其浏览器中。(对本地节点 IPFS 的支持已于 2024 年删除) | |||
* 适用于 Android 的 Opera 默认支持 IPFS,允许移动用户浏览 ipfs:// 链接以访问 IPFS 网络上的数据。 | |||
=== 恶意软件 === | |||
2018年7月以来,网络钓鱼攻击也通过 Cloudflare 的 IPFS 网关进行分发。网络钓鱼诈骗 HTML 存储在 IPFS 上,并通过 Cloudflare 的网关显示。连接通过 Cloudflare TLS 证书显示为安全。 | |||
2019年6月,IPStorm 僵尸网络首次被检测到,它使用 IPFS 可以在 IPFS 网络的合法数据流中隐藏其命令和控制。安全研究人员之前已经研究出了使用 IPFS 作为僵尸网络命令和控制系统的理论可能性。 | |||
== 参考链接 == | |||
<references /> |
2024年12月5日 (四) 02:57的最新版本
星际文件系统(InterPlanetary File System,缩写为IPFS)是一个旨在实现文件的分布式存储、共享和持久化的网络传输协议[1]。它是一种内容可寻址的对等超媒体分发协议,用于在分布式哈希表中存储和共享数据。通过使用内容寻址,IPFS 在连接 IPFS 主机的全局命名空间中唯一标识每个文件,从而创建了一个弹性的文件存储和共享系统。
在 IPFS 网络中的节点构成一个分布式文件系统。它是一个开放源代码项目,自 2014 年开始由协议实验室在开源社区的帮助下发展。其最初由 Juan Benet 设计[2]。IPFS 允许用户以类似于 BitTorrent 的方式托管和接收内容。与以中央服务器为中心的传统协议(如 HTTP 和 HTTPS)相反,IPFS 围绕用户运营商的去中心化系统构建,这些运营商持有部分总体数据。网络中的任何用户都可以通过其内容地址提供文件,网络中的其他对等节点可以使用分布式哈希表 (DHT) 从拥有该文件的任何节点查找和请求该内容。
与传统的基于位置的协议(如 HTTP 和 HTTPS)相比,IPFS 使用基于内容的寻址来提供一种去中心化的替代方案来分发万维网。IPFS 用于去中心化应用程序和内容存档。
开发者 | Protocol Labs |
---|---|
当前版本 | 0.32.1(2024年11月15日;稳定版本) |
源代码库 | github.com/ipfs/kubo |
编程语言 | 协议实现:Go(参考实现)、JavaScript、C语言、Python
客户端库:Go、Java、JavaScript、Python、Scala、Haskell、Swift、Common Lisp、Rust、Ruby、PHP、C♯、Erlang |
操作系统 | FreeBSD、Linux、macOS、Windows |
语言 | Go、JavaScript、Python |
类型 | 协议、分布式文件系统、内容分发网络 |
许可协议 | MIT许可证 |
网站 | ipfs.tech |
发展历程[编辑 | 编辑源代码]
IPFS 由 Juan Benet 创建,他于2014年5月后来创立了 Protocol Labs。Alpha 版本于2015年2月推出,同年10月被 TechCrunch 描述为“通过口口相传迅速传播”。网络服务提供商 Cloudflare 于2018年开始使用 IPFS,并于2022年在系统中推出了自己的网关。
IPFS 协议是类似于比特币区块链协议的网络基础设施,有着存储不可更改的数据的优势,可以移除网络上的冗余文件,获取存储节点的地址信息——以搜索网络中的文件。
目前的实现采用 Go 和 JavaScript,并有 Python 实现(上次提交时间2020年1月29日)。Go实现被认为是开发正式规范时的“参考实现”[3]。
2020年3月,Opera 浏览器通过在 IPFS 中托管内容,提供了对 Unstoppable Domains 提供商的集中资源的访问。
2021年1月19日,Brave 浏览器宣布从 1.19 版本开始,将默认支持 IPFS。这意味着 Brave 成为首个将 IPFS 集成到浏览器中的浏览器。
概述[编辑 | 编辑源代码]
星际文件系统 (InterPlanetary File System,简称 IPFS) 是一种去中心化的协议、超媒体和点对点 (P2P) 网络,用于分布式文件存储和共享。通过使用内容寻址,IPFS 在连接 IPFS 主机的全局命名空间中唯一标识文件,创建了一个超媒体系统,可实现高效可靠的数据分发。
IPFS 允许用户以类似于 BitTorrent 的方式托管和接收内容。与以中央服务器为中心的传统协议(如 HTTP 和 HTTPS)相反,IPFS 围绕用户运营商的去中心化系统构建,这些运营商持有部分总体数据,从而创建了一个弹性的文件存储和共享系统。网络中的任何用户都可以通过其内容地址提供文件,网络中的其他对等节点可以使用分布式哈希表 (DHT) 从拥有该文件的任何节点查找和请求该内容。与 BitTorrent 不同,IPFS 旨在创建一个单一的全球网络。这意味着,如果两个用户发布具有相同哈希值的数据块,则从一个用户下载内容的对等节点也将与从第二个用户下载内容的对等节点交换数据。
IPFS 的关键特性包括:
- 基于内容寻址的文件存储: 每个文件都根据其内容哈希进行唯一标识,确保数据完整性并促进高效检索。
- 点对点架构: 分布式节点网络促进了直接文件共享,无需中央服务器。
- 版本控制文件系统: 支持文件版本控制,允许用户跟踪随时间推移的变化。
- 与分布式应用程序的互操作性: IPFS 与去中心化应用程序 (dApp) 无缝集成,为区块链和 Web3 生态系统提供了一个强大的存储层。
IPFS 旨在通过使用可通过 HTTP 访问的网关来取代用于静态网页交付的协议。用户可以选择不在其设备上安装 IPFS 客户端,而是使用公共网关。这些网关的列表在 IPFS GitHub 页面上维护。
除了提供替代的网页托管方式之外,IPFS 还广泛用于去中心化应用程序、科学数据共享和内容存档,作为新兴去中心化互联网的基础层。
IPFS是一个对等的分布式文件系统,它尝试为所有计算设备连接到同一个文件系统。在某些方面,IPFS类似于万维网,也可以被视作一个BitTorrent节点群、在同一个Git仓库中交换对象。 换种说法,IPFS提供了一个高吞吐量、按内容寻址的块存储模型,及与内容相关超链接。这形成了一个广义的Merkle有向无环图(DAG)。IPFS结合了分布式散列表、鼓励块交换和一个自我认证的命名空间。IPFS没有单点故障,并且节点不需要相互信任。分布式内容传递可以节约服务器带宽,并防止HTTP方案可能遇到的DDoS攻击。
该文件系统可以通过多种方式访问,包括FUSE与HTTP。将本地文件添加到IPFS文件系统后,其他用户通过IPFS网关进行访问。文件表示基于其哈希,因此有利于缓存。文件的分发采用一个类似BitTorrent的协议。其他查看内容的用户也有助于将内容提供给网络上的其他人。
IPFS有一个称为IPNS的名称服务,可以绑定域名或者用户公钥,固定访问的链接,但是访问的内容可以更新。
Merkle数据格式[编辑 | 编辑源代码]
每个Merkle都是一个有向无环图 ,因为每个节点都通过其名称访问。每个Merkle分支都是其本地内容的哈希,它们的子节点使用它们的哈希而非完整内容来命名。因此,在创建后将不能编辑节点。这可以防止循环(假设没有哈希碰撞),因为无法将第一个创建的节点链接到最后一个节点从而创建最后一个引用。
对任何Merkle来说,要创建一个新的分支或验证现有分支,通常需要在本地内容的某些组合体(例如列表的子哈希和其他字节)上使用一种哈希算法。IPFS中有多种散列算法可用[4]。
使用[编辑 | 编辑源代码]
用户通过ipfs网关上传文件后,获得文件cid,再通过cid在ipfs网关访问文件,访问者可以无需安装客户端。
ipfs官方提供了一个网关,同时也有用户自行搭建的网关,ipfs官方的网关在中国大陆地区已经被屏蔽。
部分浏览器内置ipfs的支持,可以使用网关或者本地节点访问ipfs资源内容。
不足[编辑 | 编辑源代码]
一个文件如果没有节点进行存储,也会丢失,无法访问。
NAT网络内的一个节点内的文件,其它网关很难访问。
非热门资源,存储的节点过少,网关的访问速度很慢。
应用案例[编辑 | 编辑源代码]
- 2017年9月至10月间,举办的2017年加泰罗尼亚独立公投,因被西班牙宪法法院认定违法而使网站被屏蔽。此后,加泰罗尼亚海盗党将网站整个镜像到IPFS上以回避加泰罗尼亚高等法院的屏蔽命令。
- IPFS被用于建立维基百科的镜像,让那些住在维基百科被国家法律屏蔽的地方的人民能继续访问到维基百科的内容。不过那份被镜像的维基百科是一份被限制改动的复制本且无法被更新。
- 文件币也与IPFS有关,其是由Juan Benet和协议实验室合作开发的一套基于IPFS的协作存储云。
- Cloudflare营运有一个分布式Web网关,使用户可在无本地节点的情况下,简化、加速且安全的访问IPFS。
- IPLF是Dean Reynaud在2001年发表于“Data Science”的一篇开创性文章中创造的一个术语。[来源可靠?]
- 博客平台 Matters 发布的文章会自动被分布存储到ipfs上,并生成唯一的文章指纹。此后文章无法被他人删改,并可以在IPFS的公共节点上通过文章指纹被找到。
- Filecoin 是一种基于 IPFS 的协作存储云,也是由 Protocol Labs 创立的。
- Cloudflare 运行着一个分布式 Web 网关,以简化、加速和保护对 IPFS 的访问,而无需本地节点。
- 影子图书馆 Anna's Archive 和 Library Genesis 也通过 IPFS 提供书籍,使最大的在线图书库更加强大。
- 2018年,互联网档案馆和 Protocol Labs 举办了一次去中心化网络峰会,探索 IPFS 和其他技术在完全去中心化互联网中的应用。2022年,互联网档案馆探索将 Wayback Machine 数据放入 IPFS。
- Brave 使用 Origin Protocol 和 IPFS 托管其去中心化商品商店,并在 2021 年将其支持添加到其浏览器中。(对本地节点 IPFS 的支持已于 2024 年删除)
- 适用于 Android 的 Opera 默认支持 IPFS,允许移动用户浏览 ipfs:// 链接以访问 IPFS 网络上的数据。
恶意软件[编辑 | 编辑源代码]
2018年7月以来,网络钓鱼攻击也通过 Cloudflare 的 IPFS 网关进行分发。网络钓鱼诈骗 HTML 存储在 IPFS 上,并通过 Cloudflare 的网关显示。连接通过 Cloudflare TLS 证书显示为安全。
2019年6月,IPStorm 僵尸网络首次被检测到,它使用 IPFS 可以在 IPFS 网络的合法数据流中隐藏其命令和控制。安全研究人员之前已经研究出了使用 IPFS 作为僵尸网络命令和控制系统的理论可能性。
参考链接[编辑 | 编辑源代码]
- ↑ The Inventors of the Internet Are Trying to Build a Truly Permanent Web | WIRED
- ↑ IPFS Documentation | IPFS Docs
- ↑ GitHub - ipfs/specs: Technical specifications for the IPFS protocol stack
- ↑ GitHub - ipfs/kubo: An IPFS implementation in Go