星鉴网>技术干货>果壳里的IPFS

果壳里的IPFS

2019/3/20 23:34:41 4796人阅读

【导读】 IPFS(星际文件系统)是一个p2p分布式文件系统,旨在使用相同的文件系统连接异构设备。它提供了分散和永久的Web,它提供了多种好处,例如高吞吐量、DDoS保护、没有单点故障(由于其分散性),内容寻址存储模型和版本化文件系统。

IPFS是分散的互联网


  IPFS(星际文件系统)是一个p2p分布式文件系统,旨在使用相同的文件系统连接异构设备。它提供了分散和永久的Web,它提供了多种好处,例如高吞吐量、DDoS保护、没有单点故障(由于其分散性),内容寻址存储模型和版本化文件系统。


  堆

  IPFS协议可以划分为以下层。




  自下而上:

  网络:用于对等体之间通信的网络堆栈,例如传输协议,可靠性机制,NAT遍历技术,完整性检查,认证

  路由:查找其他对等方网络地址的路由系统和存储特定数据的对等方

  块交换:数据分发的组织(通信,对等方可以提供的数据以及他正在寻找的数据)

  对象MerkleDAG:MerkleDAG,其中对象使用其身份的加密哈希进行链接,提供许多好处,例如防篡改和重复数据删除以及在其上构建各种数据结构的能力

  文件:建模在DAG之上,文件表示为一组对象,其特点是与Git相似的版本控制系统

  命名

  应用

  履行


  IPFS堆栈是使用各种成功的项目形成的。以下部分将提供有关每个协议层实施的信息。

  先决条件


  在理解实现之前,学习某些关键技术的一些基本知识是有益的。


  哈希表

  “HT(哈希表)使用哈希函数来计算桶或槽阵列的索引,从中可以找到所需的值。”


  分布式哈希表

  DHT(分布式哈希表)是将密钥映射到分布式网络上的对等体(而不是表中的索引)的HT,其允许任何参与节点通过提供关联密钥来获得值。

  成功的DHT项目包括:

  KademliaDHT:提供高效的查找,依赖于平均联系log2(n)节点,并提供对各种黑客的抵抗

  CoralDSHT(DSHT中的's'代表'草率'):通过将地址存储到提供数据的对等体(而不是直接寻址数据)并引入集群来扩展Kademlia

  S/KademliaDHT:通过Sybill攻击预防扩展Kademlia

  阻止交换-BitTorrent

  BitTorrent是一个p2p文件共享系统,它协调群组(不信任的对等网络),以便它们彼此共享文件。它使用准针锋相对的策略(贡献节点在奖励节点受到惩罚时得到奖励)并跟踪文件片段的可用性,首先发送最稀有的节点。后者导致甚至非种子对等体能够彼此交换文件并且负载种子对等体。

  版本控制系统-Git

  VCS(版本控制系统)跟踪文件更改并实现不同文件版本的有效分发。Git建立在MerkleDAG(有向无环图,一个重复数据删除的merkle树,不需要与包含数据的非叶节点平衡)之上。

  Git将文件(blob),目录(树)和更改(提交)作为不可变对象进行管理,这些对象是内容寻址的。

  自我认证的文件系统-SFS

  使用以下方案寻址远程文件系统:

  #Location~servernetworkaddress#HostID:=hash(PublicKey,Location)/sfs/:

  因此,SFS文件系统的名称会对其服务器进行认证。用户可以通过验证服务器的公钥和协商共享密钥来保护流量。

  Libp2p

  Libp2p提供了一个高级,开发人员友好,可扩展的模块集,其中包含适用于p2p通信的网络协议实现。使用libp2p实现以下IPFS层:

  网络

  路由

  阻止交换

  网络

  身份


  每个节点都有一个NodeId,它是其公钥的加密哈希。当peer初始化连接时,他们交换他们的公钥并检查是否hash(other.PublicKey)equalsother.NodeId。如果false,连接终止。

  特征

  网络堆栈功能:

  传输协议:可以使用任何传输协议,例如TCP,UDP,Websockets以及更奇特的传输协议,例如QUIC和WebRTC

  可靠性:可以使用BittorrentuTP或SCTP提供

  连通性:ICENat遍历技术

  完整性:可以使用哈希校验和进行检查

  真实性:可以使用HMAC和发件人的公钥检查(可选)

  路由

  为了找到可以为特定对象提供服务的其他对等体的地址和对等体,使用DSHT。虽然小值(<=1KB)直接存储在DHT上,但对于较大的文件,仅存储引用,这些引用是NodeIds可以为块提供服务的对等方。

  阻止交换

  对于数据分发,IPFS使用BitSwap,这是一个受BitTorrent启发的协议。BitSwapAPI要求对等体提供字段want_list(数据,对等体正在寻找)和have_list(数据,对等体可以服务)。BitSwap充当持久的市场,同行可以在其中交换数据。

  对象MerkleDAG

  merkleDAG用于快速而稳健地存储和分发数据块。对象是使用目标的加密哈希的链接。由于其体系结构与Git相似,因此merkledag提供内容寻址,防篡改(因为内容可通过其校验和验证)和重复数据删除(具有相同内容的对象被视为同一对象)。

  通过其灵活的API,IPFSmerkleDAG允许以自定义数据格式存储数据,而IPFS甚至可能无法理解这些格式。可以使用IPFSmerkleDAG建模各种数据结构:键值存储,RDBMS,链接数据三元组存储(?),链接文档发布系统,链接通信平台和加密货币区块链。

  档

  文件系统本身也是在merkleDAG之上建模的。由于对象模型非常接近Git,因此可以在两个系统之间进行转换。支持的对象类型是:

  block(可变大小的数据块)

  list(其他列表的块集合)

  tree(块,列表和其他树的集合)

  commit(树的版本历史记录中的快照)

  命名

  虽然merkleDAG中的对象是不可变的,但命名是可变的。此外,通过各种技术启用人性化的名称,例如对等链接(指向另一节点的公钥的公共,节点范围别名),DNS,名称缩短服务和提示可发音标识符。

  结论

  外表


  IPFS是一个雄心勃勃的项目,它引入了新的分散式互联网基础设施的愿景,并为p2p应用程序提供了如何组织数据的解决方案。它有可能推动网络:

  “将网络推向新的视野,在那里发布有价值的信息不会将其托管在发布者身上,而是强加给那些感兴趣的人,用户可以信任他们收到的内容而不信任他们从中收到的同行,以及旧的但重要的文件不在哪里失踪。”

  我对IPFS的看法,即用分散的对应方取代集中式互联网


  尽管确信IPFS将成功用作许多p2p用例的主干,但我不确定它是否能够最终取代整个全球网络。近年来,我们一直在将我们的数据存储在我们的设备上,而不是将它们存储在云中。虽然研究使我们能够将数据存储在容量更大的存储介质上,但我觉得许多用户仍然在努力解决其设备上缺少可用磁盘空间的问题。根据IPFS的愿景,在完全分散的网络中,每个节点都需要提供一些宝贵的磁盘空间来存储网络的部分数据。


  本文来源于Medium 作者:Seraya


52

参与讨论

登录后参加评论......

全部评论 0

作者

返回顶部