作者 | 星际云盒
来源 | IPFS白皮书
在大白话IPFS(一)里面,我们讲了HTTP存在的弊端,以及IPFS是如何克服这些弊端的。了解完那两方面,我们就不禁会问,那IPFS是怎样工作的呢?
这篇文章我们就来讲讲IPFS协议是如何工作的。
基于内容寻址众所周知,HTTP协议是基于域名寻址,即我们需要输入搜索内容所在的服务器对应的IP地址,然后服务器响应我们的请求,返回我们想要访问的网页内容。因为我们搜索的是某个IP地址,而且并不知道那个IP地址是否仍保存着我们想要的内容,所以会经常遇到返回一个404页面(即搜索内容已被删除),上一篇文章有说到的这点。
而IPFS协议的寻址方式是——基于内容寻址,意思是,我们是直接搜索我们想要获取的内容本身,而不是它所在的服务器IP地址。
基于内容寻址——是指搜索内容本身,IPFS网络中的每一个内容都对应着唯一的哈希值(HASH),我们通过搜索内容对应的哈希值,即可搜索到我们的想要的内容本身。
每一个被上传到IPFS网络上的文件,系统都会用哈希算法对该文件进行加密,然后得到一个数值,叫哈希值(HASH)。哈希值是这样的(一串64位、由数字和字母构成的数值):
00740f40257a13bf03b40f54a99398c79a664bb21cfa2870ab07888b21eeba8
每个文件的哈希值都是唯一的,即使是两个文件内容只有1bit的不同, 其哈希值也是完全不一样的。文件加密完毕后,系统会将文件进行分割与复制,最后分布式存放到若干个IPFS存储节点当中。
当我们搜索/下载内容时,IPFS网络系统就会从离我们最近的距离(这里不是物理距离,是数学距离)的若干存储节点,传输数据或者文件的碎片(不是整个文件)给我们,它是若干节点同时下载传输到我们的设备上(类似于P2P、BT技术),速度非常快。当然,从这些节点下载出来的文件碎片,最终会整合成一个完整的文件呈现给我们。
IPFS网络是一个细粒度的、不可靠的、分布式的、易联合的内容分发网络(Content Delivery Network , CDN)。这就是IPFS与HTTP的区别,传统HTTP协议是从单个中心服务器将整个文件下载传输到设备上的,下载的速度相对慢很多。
容错机制,版本控制,永久保存上传到IPFS网络的文件会被分割成若干块,那如果其中的一块意外被损坏了,怎么办呢?不用担心,IPFS系统有一个容错机制,容错机制的意思就是,假设一份文件被分割成10份,其中4份损坏了,那么还是可以根据剩下的6份还原出原文件来。所以说,你的文件是可以被永久保存在IPFS网络里面的。
假如我上传了两份一样的文件,那岂不是存在两份一样的文件了?不会的,IPFS会在整个网络范围内删掉冗余重复的文件, 并为相同文件建立版本管理, 也就是说,每一个文件的变更历史都将被记录(类似版本控制工具Git,SVN等),用户可以很容易回到文件的历史版本去查看数据。并且,每个节点除了存储了数据以外,还存储了一张哈希表,用来记录文件存储所在的位置,便于进行文件的查询下载。
IPNS命名系统如果我们要在IPFS网络上查询想要的文件或信息,只要输入对应的哈希值,就可以检索到这个文件。由于这个哈希值是全网唯一的,查询起来的速度非常快。
但是,如果使用哈希值来区分文件的话,我难道要记住那么多的一串串的哈希值?一个哈希值可是有64位的数字加字母啊,记起来多麻烦啊。假如我在IPFS网络上搭建了一个网站,生成一个这么复杂的哈希值,这不利于宣传啊,也会造成传播困难。
事实上,当然不会这样。因为哈希值不容易记忆,就像IP地址一样不容易记忆。所以Protocol Labs协议实验室弄出了IPNS(InterPlanetary Name System),IPFS的域名命名系统,这样,IPFS就可以利用IPNS将哈希值映射为容易记的名字了。
用一个例子演说IPFS的工作流程
比如我想观看一部叫ABC的视频:
1. 加入IPFS网络,在网络中搜索叫ABC的文件(ABC是通过IPNS映射得来的名字)。
2. IPFS网络迅速索引区块链上的哈希值,反馈出搜索结果。
3. 你支付一点Filecoin代币,获取ABC文件缓存到本地,ABC文件不是从云或者服务器上面下载下来的,而是由IPFS网络的参与者贡献的,它可能是离你最近的一个网络节点。这样的好处是,不仅不需要中间服务器,而且网络传输效率最快。
4. 如果ABC文件恰巧你周边好几个人都有,那IPFS网络会把这个文件拆成一小片一小片,节省了这些节点的储存成本,也让你用最具效率的方式下载到该视频。
5. 这个ABC视频文件缓存在你自己电脑里,不仅自己可以观看,同时也为其他需要ABC这部视频的人提供资源。
6. 另外,你也可以自己发布新内容到这个网络上,并且有机会获得Filecoin代币,因为你也为网络做了贡献。
通过这样的方式,实现了整个网络的文件利用达到最优效率。