深入浅出IPFS 技术原理

自2014年5月胡安·贝内特发起了IPFS项目至今,IPFS发展迅速,目前全球存储总量已经达到9EB(1EB=1024*1024TB)。
在这里插入图片描述
IPFS在我国也备受青睐,国家对它很重视,从2019年起就开始布局。在这里插入图片描述
IPFS并不是一个全新的技术,它是各种技术的集合体。协议实验室通过整合分布式哈希表、BT技术、Git版本协议、SFS自验证文件系统四种已有技术,创建一种点对点超媒体协议,试图打造一个更加快速、安全、开放的下一代互联网,实现互联网中永久可用、数据可以永久保存的全球文件存储系统。
在这里插入图片描述 在本篇文章中,我既希望能够通用分析、解读IPFS的技术原理,给我们开发IPFS生态应用提供帮助,也希望能够帮助我们学习协议实验室是如何运用并整合现有开源技术推成出新。
下面我们来了解一下IPFS是如何使用上述4种技术的。

1. 分布式哈希表

分布式哈希表技术(DHT),是一种分布式的存储和寻址技术
DHT的最主要思想是全网维护一个巨大的文件索引哈希表,这个哈希表的条目形如<Key,Value>。其中,Key通常是文件的某个哈希算法下的哈希值(也可以是文件名或者文件内容描述) ,而Value则是存储文件的IP地址。查询时,仅需要提供Key,就能从表中查询到存储节点的地址。
在这里插入图片描述
由于这个哈希表很大,因此它会被分割成小块,按照一定的算法和规则分布到全网各个节点上。
每个节点仅需要维护一小块哈希表,但每块哈希表不止由一个节点维护(这样即使节点意外挂掉也有其他的节点使DHT可用)。

当节点接受到查询请求后,如果可以在自己的桶(每一个节点维护的DHT子集被称为”桶“)中找到则回复,否则联系最近节点回复。这个过程一直到找到目标节点为止。
在这里插入图片描述

2. BT技术

BitTorrent是一种内容分发协议。它采用内容分发和点对点技术,帮助用户相互更高效地共享大文件,减轻中心化服务器的负载。BitTorrent网络里,每个用户需要同时上传和下载数据。文件的持有者将文件发送给其中一个或多个用户,再由这些用户转发给其他用户,用户之间相互转发自己所拥有的文件部分,直到每个用户的下载全部完成。这种方法可以减轻下载服务器的负载,下载者也是上传者,平摊带宽资源,从而大大加快文件的平均下载速度。
在这里插入图片描述
IPFS对BitTorrent技术进行了创新,在BT技术的基础上支持请求数据跨文件(BT只能基于文件传输),并增加了信用和帐单体系来激励节点去分享,由此创造出了Bitswap(数据块交换协议)。
在这里插入图片描述

Bitswap的信用账单体系由信用、策略、账单组成。

BitSwap信用体系

BitSwap协议为能够激励节点去乐于分享数据(即使这个节点暂时没有数据需求),根据节点的之间的数据收发建立了一个信用体系:有借有还,再借不难。

  • 发送给其他节点数据可以增加信用值
  • 从其他节点接受数据降低信用值

如果一个节点只接收数据而不分享数据,信用值就会降得很低而被其他节点忽略掉。简单来讲就是:你乐于分享数据,其它节点也乐于发送数据给你,如果你不愿意分享,那么其它节点也不愿意给你数据。

BitSwap策略

根据上面的信用体系,BitSwap可以采取不同的策略来实现,每一种策略都会对系统的整体性能产生不同的影响。
在这里插入图片描述
IPFS在其发布的白皮书中提供一个可参考的策略机制(实际的实现可以有所变化):

  • 每个节点根据和其他节点的收发数据,计算负债率
    r = b y t e s S e n t / ( b y t e s R e c v + 1 ) r = bytesSent / (bytesRecv + 1) r=bytesSent/(bytesRecv+1)
    其中r表示节点的负债率,bytesSent表示发送到负债节点的字节数,bytesRecv表示其他节点从负债节点接收到的字节数。当发送到负债节点的数据越多,而其他节点从负债节点接收的字节数越少,负债越高。
  • 通过负债率可以计算负债节点能够接收到数据的概率
    P = 1 − 1 / ( 1 + e x p ( 6 − 3 r ) ) P = 1− 1/(1+exp(6−3r)) P=11/(1+exp(63r))
    ​ 其中,P表示节点接收到其他节点数据的概率。
    在这里插入图片描述
    从图中可以看出,当负债率达到1左右(即接收和发送的数据量相等)的时候,能够接收到数据的率会急剧下降;当接收量是发送量的2倍时,能够接收到数据的概率只有0.5*;*当接收量是发送量的4倍时,能够接收到数的概率几乎为0。

BitSwap账本

每个节点都会记录下来和其他节点通信的账本(数据收发),可以保持节点间数据交换的历史和防止篡改。当两个节点之间建立连接的时候,BitSwap会相互交换账单信息,如果账单不匹配,则清除重新记账。恶意节点可能会故意“丢失”账单,以希望清除掉自己的债务。但其它交互节点会把这种情况记下来,如果发生的次数较多,其他节点就不会再信任它了。

3. Git 版本协议

IPFS使用GIT技术来解决数据分发和版本管理的问题。

我们在进行大文件传输或修改的时候总会遇到存储或传输压力大的问题,而Git在版本迭代方面非常出色。Git存储时会把文件拆成若干个部分,并计算各个部分的哈希值,利用这些构建起与文件对应的有向无环图(DAG),DAG的根节点也就是该文件的哈希值。这样的好处十分明显:如果需要修改文件,那么只需要修改少数图中节点即可;需要分享文件,等价于分享这个图;需要传输全部的文件,按照图中的哈希值下载合并即可。
在这里插入图片描述
上面的数据结构就是Git的数据结构Merkle DAG(默克有向无环图)。IPFS对此基础上进行改进,将每个文件拆分成256K大小的文件块。

值得注意的是,对同一个文件修改,提交到ipfs后产生的是新的文件,旧的文件还会存在,这样,在ipfs库里就记录了两个版本(旧版和新版)。通过这样,就可以很好地实现版本控制。

4. SFS自验证文件系统

SFS(Self-Certifying File System)是为了设计一套整个互联网共用的文件系统而提出的,它的宗旨是全球的SFS系统都在同一个命名空间下。在SFS中,分享文件会变得十分简单,只需要提供文件名就行了。

IPFS使用SFS自验证文件系统用于解决文件便捷分享及可信认证问题。

一般用于解决可信认证的方法是,所有服务器都生成一对公钥和私钥,当客户端向服务端发送文件时,客户端先用服务端的公钥进行加密,服务端接受到文件时用私钥解密。但这存在一个问题,怎么让所有的客户端都能获得服务器的公钥呢?

SFS使用一种新的解决思路,将公钥信息嵌入到文件名中,这种命名为“自验证文件名”。这样就没必要在文件系统内部实现密钥管理了。

IPFS使用该概念创建星际名称空间(IPNS),这是一种使用公钥加密来自我认证网络用户发布的对象的SFS。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IPFS(InterPlanetary File System)是一个基于内容寻址的、分布式的、新型超媒体传输协议。IPFS支持创建完全分布式的应用。它旨在使网络更快、更安全、更开放。IPFS是一个分布式文件系统,它的目标是将所有计算设备连接到同一个文件系统,从而成为一个全球统一的存储系统。某种意义上讲,这与Web最初的目标非常相似,但是它是利用BitTorrent协议进行Git数据对象的交换来达到这一个目的的。IPFS正在成为现在互联网的一个子系统。IPFS有一个更加宏伟而疯狂的目标:补充和完善现有的互联网,甚至最终取代它,从而成为新一代的互联网。这听起来有些不可思议,甚至有些疯狂,但的确是IPFS正在做的事情。图1-1所示为IPFS的官方介绍。 图1-1 IPFS官方介绍IPFS项目通过整合已有的技术(BitTorrent、DHT、Git和SFS),创建一种点对点超媒体协议,试图打造一个更加快速、安全、开放的下一代互联网,实现互联网中永久可用、数据可以永久保存的全球文件存储系统。同时,该协议有内容寻址、版本化特性,尝试补充甚至最终取代伴随了我们20多年的超文本传输协议(即HTTP协议)。IPFS是一个协议,也是一个P2P网络,它类似于现在的BT网络,只是拥有更强大的功能,使得IPFS拥有可以取代HTTP的潜力。Filecoin是运行在IPFS上的一个激励层,是一个基于区块链的分布式存储网络,它把云存储变为一个算法市场,代币(FIL)在这里起到了很重要的作用。代币是沟通资源(存储和检索)使用者(IPFS用户)和资源的提供者(Filecoin矿工)之间的中介桥梁,Filecoin协议拥有两个交易市场—数据检索和数据存储,交易双方在市场里面提交自己的需求,达成交易。IPFS和Filecoin相互促进,共同成长,解决了互联网的数据存储和数据分发的问题,特别是对于无数的区块链项目,IPFS和Filecoin将作为一个基础设施存在。这就是为什么我们看到越来越多的区块链项目采取了IPFS作为存储解决方案,因为它提供了更加便宜、安全、可快速集成的存储解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值