星际文件系统 (IPFS)是一个分布式的点对点文件共享网络,可以很好地成为新的去中心化网络的基础。以下是它的工作原理,以及如何开始使用它。
去中心化的互联网
尽管它是全球性的,但万维网仍然是一个 集中式 网络。互联网背后的数据存储主要是大型服务器场或云平台中的物理或虚拟服务器。这些设施归一家公司所有。服务器由其他公司拥有或租用,并被配置和公开以供外部世界访问。
任何想要访问这些服务器上的信息的人都必须从他们的浏览器建立一个 HTTPS 连接到相应的服务器。服务器位于中心,为访问它所拥有的数据的所有请求提供服务。
这当然是一种简化,但它确实描述了一般模型。为了允许扩展并提供稳健性,组织可以使用镜像服务器和内容交付网络。但即便如此,人们可以访问这些文件的位置仍然相对较少且数量有限。
IPFS 是去中心 化 网络的实现。最流行的去中心化系统之一是版本控制软件Git。Git 是一个分布式系统,因为每个克隆存储库的开发人员在他们的计算机上都有整个存储库的副本,包括历史记录。如果中央存储库被清除,则可以使用存储库的任何副本来恢复它。IPFS 采用该分布式概念并将其应用于文件存储和数据检索。
IPFS 由 Juan Benet 创建,由他创立的公司Protocol Labs 维护。他们采用了 Git 的去中心化特性和种子的分布式、节省带宽的技术,并创建了一个文件系统,该系统可以在 IPFS 网络中的所有节点上运行。它现在就在这里,并且正在工作。
IPFS 的工作原理
IPFS 去中心化网络由连接到它的所有计算机组成,称为节点。节点可以存储数据并使任何请求它的人都可以访问它。
如果有人请求文件或网页,则该文件的副本会缓存在他们的节点上。随着越来越多的人请求该数据,将存在越来越多的缓存副本。对该文件的后续请求可以由具有该文件的任何节点或节点组合来完成。传递数据和满足请求的负担逐渐在许多节点之间分担。
这就需要一种新型的网址。分散式网络使用基于内容的路由,而不是基于 地址的 路由,您必须知道数据的位置并为该数据提供特定的 URL 。
你没有说数据在哪里;您请求您想要的东西,它会为您找到并检索。由于数据存储在许多不同的计算机上,所有这些计算机都可以一次将部分数据提供给您的计算机,例如torrent 下载。这旨在降低延迟、减少带宽并避免由单个中央服务器引起的瓶颈。
远离集中式模型意味着黑客没有攻击的焦点。但大多数人最关心的是他们的文件、图像和其他媒体将存储在其他人的计算机上。
不完全是这样。IPFS 不是您连接和上传的东西。它不是分布式的、公共的 DropBox。您可以通过托管节点或付费使用由云服务托管的专业配置节点来参与其中。除非您选择共享或发布某些内容,否则其他任何人都无法访问它。事实上,“上传”一词具有误导性。您真正要做的是将文件导入您自己的节点。
如果您希望文件可供其他人访问,但需要将内容限制为少数人,则应在导入之前对其进行加密。数据的传输是双向加密的,但导入的文件在默认情况下故意不加密。这让您可以选择加密技术。IPFS 不会将文件存储加密形式作为“官方”加密。
数据如何存储
数据存储在 256 KB 的块中,称为 IPFS 对象。大于该大小的文件将拆分为容纳该文件所需的尽可能多的 IPFS 对象。每个文件一个 IPFS 对象包含指向构成该文件的所有其他 IPFS 对象的链接。
当一个文件被添加到 IPFS 网络时,它会被赋予一个唯一的 24 个字符的哈希 ID,称为 内容 ID或 CID。这就是它在 IPFS 网络中被识别和引用的方式。检索文件时重新计算散列值可验证文件的完整性。如果检查失败,则文件已被修改。当文件被合法更新时,IPFS 会处理文件的 版本控制 。这意味着文件的新版本与以前的版本一起存储。IPFS 像分布式文件系统一样运行,这种版本控制概念为该文件系统提供了一定程度的不变性。
假设您在节点上的 IPFS 中存储了一个文件,一个叫 Dave 的人请求它并将其下载到他们的节点。下一个请求该文件的人可能会从您那里或从 Dave 那里获取它,或者以类似于 torrent 的方式获取该文件,其中部分文件来自您的节点和 Dave 的节点。下载文件的人越多,参与并帮助处理后续文件请求的节点就越多。
垃圾收集会定期删除缓存的 IPFS 对象。如果您想永久存储文件,可以 将其固定 到您的节点。这意味着它不会在垃圾收集期间被清除。您可以在云存储提供商处支付存储费用,这些提供商将您的数据暴露给 IPFS 网络并将其永久固定,并且有专门为可访问 IPFS 的托管网站量身定制的服务。
如果您网站上的某些内容像病毒一样传播并为您的网站带来大量流量,则这些页面将缓存在检索这些页面的所有节点中。这些缓存页面将用于帮助服务进一步的页面请求,帮助您顺应潮流并满足需求。
当然,所有这些都取决于有足够数量的可用节点,以及足够多的固定和缓存数据。这需要参与者。
如何安装 IPFS
Windows 用户可以下载并运行IPFS 发布页面上的 EXE 文件。如果您使用的是 Mac,请像往常一样下载 DMG 文件并将其拖到应用程序中。如果遇到问题,请查看官方文档。
出于演示目的,我们将在Ubuntu上进行安装。在任何 Linux 发行版上都有可用于 IPFS 和 IPFS 桌面客户端的 Snap 包。如果您只是安装 IPFS,您将拥有一个可以使用浏览器控制和管理的完全正常工作的 IPFS 节点。如果您安装桌面客户端,则不需要使用浏览器,客户端提供所有相同的功能。
要安装 Snap,请使用:
sudo snap install ipfs
sudo snap install ipfs-desktop
现在您需要运行命令来初始化您的节点。
ipfs init
如果您遇到困难并且守护程序没有运行,或者您无法连接到它,IPFS 建议使用以下命令。在我们尝试过的所有测试计算机上,这些都是必需的,所以您不妨现在就发布它们:
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["webui://-", "http://localhost:3000", "http://127.0.0.1:5001", "https ://webui.ipfs.io"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "POST"]'
sudo sysctl -w net.core.rmem_max=2500000
有了这些,您可以启动 IPFS 守护程序。
ipfs daemon
当守护程序启动时,它会报告您可以用来连接到它的两个地址。一个用于 IPFS 桌面,另一个用于 IPFS “webui”或 Web 用户界面。
网页界面
将 webui 地址粘贴http://127.0.0.1:5001/webui到浏览器中以连接到 IPFS Web 前端。
默认页面是“状态”屏幕。这是一个显示节点状态和活动的仪表板。它显示了您托管的文件的大小,以及您的节点托管的缓存 IPFS 对象的总大小。这是来自 IPFS 网络中其他地方的数据。仪表板还显示了两个显示入站和出站 IPFS 流量的实时仪表,以及一个显示该流量历史的实时图表。
要更改为不同的屏幕,请单击左侧边栏中的图标之一。“文件”屏幕可让您查看已导入 IPFS 的文件。您可以使用蓝色的“导入”按钮在计算机上搜索要导入 IPFS 的文件或文件夹。
IPFS 使用 Merkle 树。这些是二叉哈希树的一个非常有效的超集, 由 Ralph Merkle 于 1979 年发明。如果你有很多树,你就有了一片森林。“探索”图标会打开一个屏幕,让您浏览存储在 IPFS 及其 Merkle 森林中的不同类型的信息。
有来自著名的XKCD 网站的卡通档案。单击该选项并选择卡通会通过 IPFS 将您选择的卡通传递给您。
“Peers”图标打开了一张世界地图,绘制了您的 IPFS 连接在全球范围内的位置。
几分钟之内,我们就接到了来自澳大利亚、白俄罗斯、比利时、加拿大、中国、芬兰、法国、德国、日本、马来西亚、荷兰、挪威、波兰、葡萄牙、罗马尼亚、俄罗斯、新加坡、韩国、瑞典、台湾、土耳其、英国,当然还有美国。
如果需要的话,证明 IPFS 已经引起了全球轰动。当然,您不会连接到每个可用节点。那将是低效的。
IPFS 桌面客户端
在系统的应用程序启动器中找到 IPFS Desktop。在 GNOME 上,停止IPFS 守护程序 ,按“Super”键并输入“ipfs”。您将看到蓝色的 IPFS 立方体图标。
单击此图标,桌面客户端将启动。它将启动守护程序本身。
桌面客户端的外观和功能与 Web 界面完全相同,但这次它作为独立应用程序运行。
该应用程序提供的一项附加功能是通知区域中的应用程序指示器。
这使您可以快速访问选项菜单和节点状态的红绿灯指示器。指示灯为绿色正常运行,红色为错误,黄色为启动。
接下来是什么?
没有什么会突然取代现有的集中式网络,但随着时间的推移,事情会发展。也许 IPFS 是它可能演变成的一瞥。