详解IPFS技术架构与应用

IPFS是什么?

星际文件系统(InterPlanetary File System)

本质上是一种内容可寻址、版本化、点对点超媒体的分布式存储、传输协议,目标是补充乃至取代过去20年里使用的超文本媒体传输协议(HTTP),希望构建更快、更安全、更自由开放的互联网时代。

Ipfs最核心的技术是p2p,原来是中心化的服务器在分发内容,现在我们想要下载某一个内容,可以直接建立一个连接,也可以跟其他人连接,迅雷也是这种模式,它是一个虚拟的p2p中心网络,这里不多细讲。

为什么需要IPFS?

1.HTTP的中心化是低效的, 并且成本很高

油管上,鸟叔的“江南style”这个视频,累计被播放30亿次,假设这个文件100MB大小,则播放这个视频浪费300Petabytes(1P=1,000,000GB)的网络流量,按照0.01USD/GB算CDN成本,谷歌将支付300W美金给ISP服务商。

使用HTTP协议每次需要从中心化的服务器下载完整的文件(网页, 视频, 图片等), 速度慢, 效率低。如果改用P2P的方式下载, 可以节省近60%的带宽。

2.Web文件经常被删除

http的页面平均生存周期大约只有100天,Web文件由于存储成本太高经常被删除,无法永久保存。

IPFS提供了文件的历史版本回溯功能(就像git版本控制工具一样), 可以很容易的查看文件的历史版本, 且数据无法删除,可以得到永久保存。

3.中心化限制了web的成长

现在使用的互联网其实是由数百万个分布在世界各地的服务器构成的。世界最大的芯片制造厂商 Intel 有大约10万台服务器,Facebook有3万台,美国最大的电话公司 AT&T 也有2万台,而 Google有超过100万台服务器。

在现有的http协议下,所有的数据都保存在这些巨头的服务器上,这是高度中心化的。巨头不但对我们的数据有绝对的控制权和解释权,各种各样的监管,封锁,监控一定程度上也极大的限制了创新和发展。

建立在去中心化的分布式网络上的IFPS很难被中心化管理和限制,互联网将更加开放。

4.互联网应用高度依赖互联网主干网

过于中心化,为了支撑http协议,服务器7*24小时开启,对于大流量公司,比如百度、腾讯、阿里等,投入大量资源维护服务器和安全隐患,防止DDoS,XSS,CSRF等攻击。

主干网络受制于战争,自然灾害,中心服务器宕机等因素,都可能造成整个互联网中断服务。

IPFS可以极大的降低对中心主干网络的依赖。

IPFS如何工作?

IPFS为每一个文件分配一个独一无二的哈希值(文件指纹: 根据文件的内容进行创建), 即使是两个文件内容只有1个比特的不相同,其哈希值也是不相同的。所以IPFS是基于文件内容进行寻址, 而不像传统的HTTP协议一样基于域名寻址。

IPFS在整个网络范围内去掉重复的文件, 并且为文件建立版本管理, 也就是说每一个文件的变更历史都将被记录(这一点类似版本控制工具git,svn等), 可以很容易个回到文件的历史版本查看数据。

当查询文件的时候, IPFS网络根据文件的哈希值(全网唯一)进行查找。 由于每个文件的哈希值全网唯一, 查询将很容易进行。

如果仅仅使用哈希值来区分文件的话,会给传播造成困难,因为哈希值不容易记忆,就像ip地址一样不容易记忆,于是人类发明的域名。IPFS利用IPNS将哈希值映射为容易记的名字。

每个节点除了存储自己需要的数据,还存储了一张哈希表, 用来记录文件存储所在的位置,用来进行文件的查询下载。

IPFS的架构

IPFS 协议栈

身份 S/Kademlia生成 对等身份信息生成

网络 任意传输层协议 ICE NET & NAT穿透

路由 分布式松散哈希表(DSHT) 定位对等点和存储对象需要的信息

交换 BitTorrent& BitSwap 管理区块如何分布

对象 Merkle-DAG 内容可寻址的不可篡改、去冗余的对象链接

文件 类似Git 版本控制的文件系统:blob,list, tree, commit

命名 具有SFS(Self-CertifiedFilesystems)IPNS:DAG对象命名可变

应用 在IPFS上运行的应用程序利用最近节点提供服务提供效率、降低成本

身份层和路由层

对等节点身份信息的生成以及路由规则是通过Kademlia协议生成制定,KAD协议实质是构建了一个分布式松散Hash表(distributedhash table),简称DHT,每个加入这个DHT网络的人都要生成自己的身份信息,然后才能通过这个身份信息去负责存储这个网络里的资源信息和其他成员的联系信息。

网络层

LibP2P可以支持任意传输层协议。

ICE NAT traversal框架整合STUN、TURN和其他类型的NAT协议,该框架可以让客户端利用各种NAT方式打通网络,从而完成NAT通信,这对于IPFS的p2p网络非常重要。

交换层

类似迅雷这样的BT工具,IPFS团队把BitTorrent进行了创新,叫作Bitswap,它增加了信用和帐单体系来激励节点去分享,用户在发送给其他节点数据可以增加信用值,从其他节点接受数据降低信用值。如果用户只去接收数据而不分享数据,信用分会越来越低而被其他节点忽略掉。

对象层和文件层

共同管理IPFS上80%的数据结构。

大部分数据对象都是以MerkleDag的结构存在,这为内容寻址和去重提供了便利。

文件层是一个新的数据结构,和DAG并列,采用Git一样的数据结构来支持版本快照。

命名层

具有自我验证的特性(当其他用户获取该对象时,使用指纹公钥进行验签,即验证所用的公钥是否与NodeId匹配,这验证了用户发布对象的真实性,同时也获取到了可变状态),并且加入了IPNS这个巧妙的设计来使得加密后的DAG对象名可定义,增强可阅读性。

应用层

IPFS核心价值就在于上面运行的应用程序,可以利用它类似CDN的功能,在成本很低的带宽下,去获得想要的数据,从而提升整个应用程序的效率。

IPFS家族

IPFS项目其实很大,并不是一个东西,IPFS是由很多模块组成,每一个模块现在都已经独立成项目了,并且有自己的主页。

协议实验室的主页:https://protocol.ai/projects/

在协议实验室的主页上面,可以找到目前的五个项目,来简单看一下IPFS家族成员:

详解IPFS技术架构与应用

更多详情请查看: https://developer.aliyun.com/article/582714