【原创】什么是IPFS(练手用)

引言:

号称可以替代HTTP协议的IPFS技术究竟几何?本文尽量以简单通俗的语言进行描述(练手用)

一、IPFS定义

IPFS全称InterPlanetary File System(星际文件系统),是由Protocol Lab(协议实验室)开发的一项基于P2P网络的,旨在解决传统HTTP协议导致的网络集中化与数据不稳定问题的新型网络协议。

想要知道IPFS的优势,首先我们要了解HTTP协议存在哪些劣势:

二、HTTP的短处

NeXTCube PC

距离世界上第一台HTTP协议的服务器NeXT开机运行已有数十年,如今这台服务器静静躺在博物馆中,主机上的一张纸条格外醒目——不要关机!诚如纸条所言,HTTP协议中的服务器不能”关机“,关机即意味着其他电脑无法访问此服务器上的数据,也意味着未保存数据的丢失,表现在用户端上,即是大家常见的”404Not Found“。简单来说,HTTP协议存在着一下3问题:

 1. HTTP高度中心化,使用成本高。想要通过HTTP协议下载文件,用户必须向中心化的服务器发送请求。简单的例子便是,用户在成都点开某视频网站观看视频,由于网站只有一个服务器,同一时间观看人数过多,导致视频观看卡顿,哪怕网站服务器就在家门口。如果想解决卡顿,传统的方法是花钱架设更多更好的服务器,这无疑是巨大的成本。

2. HTTP中的文件经常被删除。不论是出于审查需要,还是出于储存成本,基于HTTP协议构建的服务器几乎无法永久储存文件,十年前的网页,多数已经无法打开,即使打开其中的图片也无法加载,其原因便是网站服务器出于经济压力或者行政压力删除文件。

3. 基于HTTP的互联网高度依赖根服务器。现在全球共有13台IPv4根服务器,9个在美国,2个在欧洲,1个在日本,根服务器管理着全球互联网的域名与地址。一方面,根服务器可以通过限制访问与拒绝服务令某些网页或某些用户无法使用互联网;另一方面,根服务器被攻击也意味着互联网的剧烈波动,甚至导致全球互联网无法正常工作。根服务器实际上代表着以”自由“为代表的互联网走向了”集中“。

上述3个问题令HTTP协议及构建在协议之上的互联网存在巨大的隐患,虽然出于经济与政治的平衡,整个互联网仍然安然无恙的运行中,但一旦平衡被打破,互联网也将脆弱不堪,如伊朗曾因攻击导致全国断网,令国内动荡的加剧。以一种新型的协议改进或取代HTTP刻不容缓。在这种背景下,IPFS诞生了。

想要知道IPFS的优势,首先要明白IPFS是如何工作的。

三、IPFS的工作原理与优势IPFS分片

IPFS储存原理示意图,新文件与已有文件只有Hash7的结果不同,故新文件只储存Hash7部分

1、每一份储存在IPFS上的文件都将被分片,如果分片中的文件与网络中已有文件的哈希值相同,那么该部分将不再上传;分片的文件将以数个备份储存在整个IPFS网络中,防止单一分片因网络原因无法下载。最终,用户下载的文件也是通过下载各个分片完成下载。.

2、IPFS为每一份储存在其网络上的文件和分片赋予一个独立的、不重复的哈希值(哈希值的含义将在以后的文章详细讲述),通过此哈希值,在整个网络内寻找此文件,不同于HTTP是基于网络域名来寻找文件,这种方式避免了服务器关闭导致的文件下载失败情况。

3、 储存的文件若发生更改,每一次变更的历史纪录都将保存以便回溯;同时储存的哈希值可以通过域名系统IPNS映射为域名方便查询。

4、如需下载文件,首先找到这个文件所属的哈希表,根据表上的各个分片哈希进行下载,最后组合即可完成。

通过上述4个方式,IPFS完成了文件的储存、查询、下载,可以同传统HTTP协议一般进行服务器的假设与运行,而基于IPFS的互联网,将能通过以下途径解决传统HTTP的缺点:

IPFS的优势

 1、下载速度快,不依赖于主干服务器与中心化网络。由于下载文件是基于分片的哈希值同时下载多个分片,故下载速度同P2P下载(如迅雷)一般迅速;而基于文件寻址也令下载不经过某个中心服务器,可以从物理距离与网络距离最近的节点下载,大大减少延迟。

2、储存空间价廉丰富。一方面,IPFS网络利用Filecoin激励层促使矿工们租赁自己的硬盘与带宽,利用人性的逐利行为,促使矿工不断发掘更低成本的挖矿方式;另一方面,通过文件分片的哈希值剔除冗余文件,相比传统云储存项目,大大优化了网络的储存能力。以上两点共同降低了用户使用与储存成本。

3、安全。当中心化的网络节点受到大量访问请求时极易宕机(即ddos攻击),而提高抗DDOS攻击能力需要花费大量的成本。在IPFS网络中,由于所有节点都是平等的,资源储存在多个节点中,即使数个节点宕机其余节点仍能负担起整个网络的需求。

 4、隐私而开放。隐私上,IPFS基于P2P网络构建,数据交流不经过中心化机构监管,文件储存以哈希和用户私钥加密,有效避免了文件因监管或利益因素而被第三方删除。而开放的分布式网络,文件的交换记录可以被查询,IPFS的复制证明甚至可以知道上传的文件是否被他人所复制,同时激励层Filecoin也使用户上传的文件可以用以交换,促进资源流动。

IPFS网络,不同于其他已有的云储存项目亚马逊云、storj、maidsafe等,IPFS是一个底层架构,同IPNS(域名系统),IPLD(寻址系统),Filecoin(激励层),以及libp2p与Multiformats等,共同构建了一幅对等是网络的蓝图。基于此蓝图,我们可以构建个人的隐私云盘而不用担心封禁;制作不会404的网页;用作虚拟机的根文件系统;构建加密通讯平台……IPFS能做到这些,是因为传统计算机的系统由三个方面组成:“输出”、“处理”、“储存”,而IPFS从储存角度入手,改变现有的中心化储存格局,提升整体效率。

四、IPFS的未来担忧

然而,我们从辩证法中会学到,所有的事物不会是一成不变的美好,IPFS同理。我们会经常接触到IPFS优良的一面,但我们也要了解到IPFS的局限性,以及它未来的不可控性。

1、来自中心化机构的压力。IPFS系统杜绝了中心化结构的审查与监管,将权力下放到各个节点,这样的情景在近代有类似的情形——不论是法国大革命还是十月革命,本质都是将上层权力下放,解放底层人民的生产力。然而,改革的阻力也是非常巨大的,没人愿意放弃自己手里的蛋糕,因此IPFS在发展过程中一定会遭遇中心化机构施加的压力,甚至会有直接的对抗。另外,我们无法肯定IPFS所处的时代是欧文新和谐公社的空想社会主义阶段,还是列宁十月革命阶段,只能让时间来证明一切。

2、节点质量的参差不齐。所有P2P网络都需要面对一个问题:如何在节点作恶或失效情况下维持运转,即我们常说的拜占庭将军问题。中心化机构中因中心有绝对权力可以进行调度以解决此问题,而IPFS网络中为了缓解此问题提出了时空证明、复制证明,并以节点失信即罚没押金行为进行处罚。然而网络早期不乏有节点使用家用硬盘而非企业硬盘进行储存,极易导致数据丢失,一方面影响网络稳定性,一方面降低用户使用体验。并且经济惩罚在面对某些力量(如自然、行政)时不一定具备优势。如何平衡节点与用户间的天平,IPFS还有一段路要走。

3、网络中心化问题。同比特币的发展一般,效率与公平始终是此消彼长之势。矿工们为了挖矿的效率,最终一定会自发联合形成联盟甚至合并为几个节点;用户与开发者为了网络稳定性与隐私性,更希望网络维持一定的去中心化程度。这一论点同样适用于IPFS网络,比特币尚有core开发者与比特大陆矿霸以及数个小矿工联盟和开发者联盟及用户的竞争,IPFS网络能否发展出类似比特币的群雄割据局面,甚或优于比特币形成更公平的去中心化结构,我们无从得知。储存文件的中心化会重蹈HTTP的覆辙,我们只能希望IPFS作为HTTP的颠覆者,不会成为第二个HTTP。

五、总结

IPFS协议令网络的自由与独立精神再次辉耀,在可见的未来,IPFS与HTTP共存并非空想,至于前者能否取代后者,我们无法定夺。但我相信IPFS的潜力,去中心化已成世界的趋势,未来已经来临,只是尚未流行。

参考文献:

  • IPFS——它能取代HTTP协议? 苏江同学 简书 https://www.jianshu.com/p/ddccae89a49a
  • 什么是IPFS? 飞向未来 微信公众号:IPFS指南(ipfs_guide)
  • 什么是IPFS?为什么说它将取代HTTP?张灏楠 微信公众号:IPFSFAN(ipfsfan)
  • IPFS – Content Addressed, Versioned, P2P File System (DRAFT 3),  Juan Benet, https://github.com/ipfs/papers/raw/master/ipfs-cap2pfs/ipfs-p2p-file-system.pdf

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google photo

You are commenting using your Google account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s