11.png资料来源:smg-corporate.com

作者丨Jonas Bostoen

翻译丨Jason

·

·

这篇文章将分为IPFS的理论介绍和IPFS的使用指南两部分。

第一部分旨在向大家展示IPFS是如何工作的。

第二部分将指导大家使用IPFS并与现有网络进行交互,这部分假设了一些技术知识和一个基于*nix的系统。

·

·

理论介绍

HTTP或者超文本传输协议(HyperText Transfer Protocol)是现有管理互联网点对点的通信协议。这是现在大家访问网站、观看视频、下载文件的一种方式。

然而,它存在好些问题。其中很多问题,实际上都是由于HTTP集中化导致的。

·

·

那到底今天的互联网怎么了?

当你今天想访问某个网站时,你用的浏览器(客户端)会向服务器(主机)发送请求,即使这些服务器位于全球其他地方。这个就是基于位置的寻址,且它使用IP地址来显示你所处位置。

这个过程很占用带宽,而且会因此花费大量时间和金钱。

最重要的一点是,在多台电脑里获取一个文件的不同部分,速度和效率比用HTTP在一个时间段里从单个服务器下载此文件全部内容快很多好很多。

HTTP还会被强大权力所干涉,比如阻止访问某个网络位置(例子如土耳其在2017对维基百科服务器的所作所为。)

Juan Benet,打算用IPFS技术来解决这些问题。

首先,单点故障什么的在IPFS里是不存在的。它是一个点对点的、分布式文件存储系统。毫不夸张的说,它真的可能取代HTTP,并让因特网再一次实现分布式。

在这里,互联网的审查变得不现实,发布的信息不会突然因为服务器提供商和主机网络的秀逗或者短路而突然消失不见了。

安全性也会随之增加,如DDos***将不再有用,因为它是对中央分发系统进行***的,而IPFS并没有中央分发系统。速度也会增快,在分布式网络中,每个节点都会向最靠近他的节点去发送请求,而不是单个中心位置。

·

·

它是如何工作的?

18d0d2c63f8249868cb25aa0e797c6f5.png

通过Simply Explained对IPFS和视频动画的另一个很好的解释

IPFS通过将网络上的所有设备连接到相同的文件结构来运行。

此文件结构叫做Merkle DAG,这个结构结合了 Merkle trees

(https://en.wikipedia.org/wiki/Merkle_tree)(为了确保不变性)和Directed Acyclic Graphs

(https://ericsink.com/vcbe/html/directed_acyclic_graphs.html)(用于Git版本的控制,同时能允许用户查看IPFS上内容的版本)。

其实可以把它想象成一个大型BitTorrent群。

想象下,你想阅读IPFS的白皮书,大家一般会先输入一个URL,该URL可以被解析为IP地址,而该IP地址能够提供有关文件位置的信息(如果有IPFS服务器,则位置信息为IPFS服务器),之后会允许你的客户端与主机连接并获取文件。

这里提到的每个细节都可能会出错。

现在,想象下,用IPFS网络来访问它。

该文件及其所有区块,都由内容本身的唯一加密哈希值所标识。整个系统都是基于键值数据存储。

这就是允许内容寻址的原因:任何人都可以保管密钥,无论信息的来源是哪里。所以你会连接到组群(swarm)里并向网络请求该文件。首先会找到离你最近的一个点(peer),因为他们有机会获得该文件的副本。如果他们没有副本,你就会连接到最初上传文件的那个节点上,因为它是肯定持有该文件的。

Simply Explained制作的一个视频动画对IPFS很好地解释了一番。(视频地址:https://v.qq.com/x/page/d0654dansf1.html)

你下载这个文件之后,自己就会成为一个主机(Host)。这意味着你是客户端的同时,也是主机。你也只需要托管对自己有用的文件就行了。

现在让我们倒回来看IPFS的白皮书。可能你并没有安装IPFS,那我们就先用网关(gateway)。

URL如下所示:

https://gateway.ipfs.io/ipfs/QmV9tSDx9UiPeWExXEeH6aoDvmihvx6jD5eLb4jbTaKGps。

从IPFS网关URL开始,然后把内容的唯一哈希标识符包含进去。网关将连接到具有该文件的(可能就是它本身)最近的点(peer),然后将该文件提供给你。

你可能会问,从不信任的节点下载文件会很危险吧?问得好,但是由于加密哈希是放篡改的,且哈希就是内容本身,你可以放心你得到的文件,因为它就是你要的那份。

我们让网络和网络应用不再需要中央源服务器,它们可以像比特币一样分发。

—Juan Benet

IPFS提供内容,但是内容的大小可以比PDF文件大很多很多。应用程序本质上也是内容。与其他分布式项目如以太坊相结合,也会让IPFS功能非常强大。像以太坊这样的区块链可以作为你应用程序的后端,而前端则由IPFS提供服务。

这就是完全去中心化、分散的应用程序了。

为了真正推动这一点,等等,让先我来看另一个例子吧。

想象一下,一个满屋子的学生都在Google doc上合作写作业。用HTTP的话,每次进行修改更正时,信息都会发送回服务器,然后再从服务器发回给其他的学生。可以想象到这带宽得有多浪费,而且还有很多不必要的延迟。由其是对处在同一本地网络的人们。

但是用IPFS的话,这些信息根本就不用被这样传来传去的。只需要在同一网络上的所有人员之间实时共享就好了。即使Google服务器坏掉了、停机了,也没关系,因为每个节点(node)现在都是自己的主机。这就让不必要的带宽和延迟大大减小。

让我来解释下为啥叫星际文件系统。

试想,如果刚刚那群学生在火星上,并且能在那里用一部分网络:一个人从其中一个节点里向地球的IPFS网络请求Google docs,或者其他文件。大概花个一小时之后,文件一旦到达了火星(文件可以是任何东西,维基百科分解之后也是文件),第一个请求它的人将成为整个网络的“播种者”,其他节点也可以从他那里获得文件。如果这个过程持续的时间够长的话,最终大部分互联网都可以在火星上使用,且不必在发送请求后仍需等待数小时。

IPFS仍在初始阶段(文章写于2018五月份,所以他这么说),一堆开发还在紧锣密鼓地进行中。还有一个很帅的东西叫Filecoin。Filecoin是一种加密货币,用于激励(具有经济回报)网络上的节点们(node)去存储内容,因此内容的可访问性不会取决于那些不受信任的节点(node)。

·

·

入门实用指南

在这部分里,我们会实际地、真正地连接到IPFS网络里。首先你需要先把它安装到你的系统里。你可以使用snapcraft来安装IPFS,用snap install ipfs,但我建议从预先构建好的软件包里进行安装。从这里下载安装包(https://dist.ipfs.io/)。接下来,使用:

tar xvfz go-ipfs.tar.gz

cd go-ipfs

./install.sh

它会先解压缩归档,然后install.sh 脚本会将二进制文件移动到可执行文件$PATH

可以用$ ipfs help来检查是否正确安装

$ ipfs help

一个很好的IPFS命令行的概述。

现在我们开始吧,首先先初始化IPFS存储库,用$ ipfs init

这个操作会让你得到一个属于你节点的密钥对,和一些IPFS对象(IPFS objects)的存储库。看一下,出来的命令行是不是和下面的一样:

$ ipfs cat /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv/readme

然后会出现这个:

Hello and Welcome to IPFS!

██╗██████╗ ███████╗███████╗

██║██╔══██╗██╔════╝██╔════╝

██║██████╔╝█████╗ ███████╗

██║██╔═══╝ ██╔══╝ ╚════██║

██║██║ ██║ ███████║

╚═╝╚═╝ ╚═╝ ╚══════╝

If you're seeing this, you have successfully installed

IPFS and are now interfacing with the ipfs merkledag!

-------------------------------------------------------

| Warning: |

| This is alpha software. Use at your own discretion! |

| Much is missing or lacking polish. There are bugs. |

| Not yet secure. Read the security notes for more. |

-------------------------------------------------------

Check out some of the other files in this directory:

./about

./help

./quick-start <-- usage examples

./readme <-- this file

./security-notes

$ ipfs cat命令可以让你查看IPFS对象的中的内容。

快试试看目录中的其他文件吧~

·

·

在IPFS里添加文件

把文件添加到IPFS里其实非常简单。先让我们转到IPFS的测试库(test-repository)并创建一个简单的文件先:

$ echo "Some text!" > IPFSfile

接下去把文件添加进IPFS:

$ ipfs add IPFSfile

这个操作会让你得到一个以Qm开头的哈希值,而此哈希值为此文件内容的唯一标识。这时你已经递归地把文件固定在你的本地存储中了,这就意味着一旦你连接到群组中(swarm),其他具有该哈希标识的人也能向你请求文件。

为了看看那些IPFS文件时在你系统里的,会用到以下代码:

$ ipfs pin ls

此操作会列出所有固定文件,这时候你应该能(递归地)查看到你刚刚创建的文件(它的哈希标识),还能看到初始化IPFS时创建的文件,如readme(自述文件)和quick-start(快速启动文件)。

要想查看这些文件,只要ipfs cat它们就可以了,除非它们只是个目录文件(其实也是有可能的),这时候就要用$ ipfs ls 来查看目录。如果要添加一整个目录, 只需在ipfs add 命令行里加-r就搞定啦。

·

·

开始与群组(Swarm)进行交互

到目前为止,所有刚刚做的东西都是在本地完成的。我们还没有连接到群组(swarm)里。先让我们初始化IPFS守护进程(daemon):

$ ipfs daemon

使用 $ ipfs id来查看连接的详细信息。先来看看我们的节点(peers):

$ ipfs swarm peers

可以注意到的是,这些节点都有唯一的哈希值作为它们的ID。可以用 $ ipfs id <insert hash>对它们进行检查。

IPFS的守护程序设置了一个本地主机,让你能用浏览器与IPFS网络实现交互。系统默认值为8080。

我们用网络浏览器来看看我们的文件吧:

localhost:8080/ipfs/<hash of file>

现在应该能看到你的文件了。和之前说的一样,你可以输入内容的哈希值来阅读网络上的IPFS白皮书。

(QmV9tSDx9UiPeWExXEeH6aoDvmihvx6jD5eLb4jbTaKGps)。

快点儿来试试吧~

守护进程还为你的节点(node)提供了一个很好的网页用户界面(Web UI)。系统默认URL为:

127.0.0.1:5001/webui

你可以看看所有节点(peers)都在哪里,试着用UI去上传文件,而不是用命令行。

现在IPFS能做到的东西已经很多了,但是我们还不能真正使用到它。其实普通人甚至都可能不知道这东西区别在哪里。

但它是迁移互联网协议的唯一途径。Juan Benet一直强调这一点,我觉得他说的很对。