详情
星际文件系统互联网是怎么样组建的?

回顾

▲ DHT组网阶段

星际文件系统节点连接种子节点成功将来则去通过DHT去发现其他节点,关于DHT的解析可以看这篇文章《Libp2p中DHT和Bitswap解析》。

发现其他节点之后则尝试进行连接,连接成功的节点会加入到该节点的节点列表,以便后续可以直接与该节点通信,考虑到全世界的星际文件系统节点规模非常大,不可能每一个节点和其他节点维持长连接,所以对每一个节点的连接数目做了限制,通常节点连接数目都在1千以下,对于没连接的节点需要通信的话,可以通过DHT找到该节点地址,然后连接该节点进行通信,如此就构成了大规模的分布式节点互联网。

大家可以通过一个示例展示上述过程。下图是一个容易见到的互联网拓扑构造,有三个互联网分别连接了Internet,星际文件系统 node1部署在具备公网ip的服务器上,外部可以直接访问该节点,星际文件系统 node2和星际文件系统 node3都部署在对称型NAT设施后面,外部不可以访问该节点。

在上面的互联网构造下,处于公网的星际文件系统 node1作为种子节点,种子节点最早启动,然后星际文件系统 node2,node3,node4,node5的种子节点配置成星际文件系统 node1,分别启动后第一连接星际文件系统 node1,连接成功后通过DHT发现其他节点最后分别连接,对于星际文件系统 node1,它连接的节点地址列表如下图所示,因为星际文件系统 node2,node3,node4,node5均处于NAT设施后面,所以星际文件系统 node1节点列表中这类节点的端口都是NAT设施映射后的端口。

对于星际文件系统 node3来讲,它的节点地址列表中,星际文件系统 node1的地址是公网地址,因为星际文件系统 node3和星际文件系统 node2都处于NAT设施后面,不可以直接连接,所以星际文件系统 node2的地址是relay地址,星际文件系统 node1节点作为relay节点,星际文件系统 node3给星际文件系统 node2发消息时通过星际文件系统 node1转发,relay地址格式为:

Relay节点的地址/p2p-circuit/p2p/目的节点id

而星际文件系统 node3的节点地址列表中,星际文件系统 node4和星际文件系统 node5的地址均为局域网地址,如此就完成了公网节点、处于NAT设施后的局域网节点的组网过程。

以上就是星际文件系统互联网的组建过程,为了便捷描述只不过以几个星际文件系统节点为例。

事实上星际文件系统的这种互联网组建方法也能非常不错地支持超大规模节点的组网,当节点规模非常大的时候,设置数十个节点作为种子节点,通过DHT组网就能完成数万甚至更多节点的组网,此时每一个节点的长连接数目维持在数百个,后续节点间通信时,假如还没打造连接,可以通过DHT依据节点id查看该节点的地址信息,然后通过该地址连接该节点最后完成通信过程。

星际文件系统互联网的这种组建方法也很值得分布式系统性的学习和借鉴。

▲ Bootstrah3阶段

星际文件系统节点在启动之前需要配置它的Bootstrap节点,配置文件中有关配置如下图所示,Bootstrap配置中配置了星际文件系统节点启动时需要连接的所有种子节点列表,这类节点地址列表信息是默认的,假如需要搭建星际文件系统私有互联网可以修改成我们的种子节点列表。默认提供的种子节点都是具备公网地址的节点,星际文件系统节点启动的时候第一连接该种子节点,后续通过该种子节点去发现星际文件系统互联网中更多的节点,从而进行连接,也就是DHT组网阶段。

作者简介

姚文豪 来自数据网格实验室BitXMesh团队 数据平台构造师

星际文件系统 - InterPlanetary File System 星际文件系统,是一个P2P的分布式文件存储系统,星际文件系统的愿景是构建一个全世界的分布式互联网,用来替代传统中心化的服务器模式,所有些星际文件系统节点组成一个分布式互联网,每一个节点都可以存储文件,用户可以从星际文件系统构建的互联网中以DHT 的方法获得文件,从而达成了新一代的完全去中心化的互联网,旨在取代现有些万维网。星际文件系统功能非常丰富,如DHT组网,文件存储,Bitswap文件交换等功能。

文件存储和文件交换的技术解析可以通过之前的推文内容进行知道,今天大家来认识这个文件系统的“地基”——互联网模块。

星际文件系统是一个开源项目,要达到它声称的构建一个全世界的分布式互联网的目的,那样他势必要先解决不同国家、不同区域节点的连接问题。

第一,看一下星际文件系统互联网部分配置,如下图所示,红框内部的Swarm是星际文件系统监听的互联网地址,其中支持ipv4和ipv6协议,且默认支持QUIC协议。

*QUIC协议是由谷歌最早提出的,现在已经提交给网络工程任务小组,成为了正式的互联网规范,相对于TCP来讲QUIC互联网传输协议的传输速度更快。

星际文件系统节点启动之后日志如下图所示,可以看到星际文件系统节点监听了以下互联网地址,其中包含当地的、局域网、广域网的地址,最后还有/p2p-circuit地址。

问题来了,为何需要监听这么多地址?

那是由于星际文件系统是一个开源项目,为了让全世界各地的节点连接起来则需要要解决各种互联网状况下节点连接的问题。

监听当地地址,如此当地启动多个星际文件系统节点,它们之间可以以该地址进行连接,监听局域网地址,如此内网内启动多个星际文件系统节点,它们之间可以以该局域网地址相互连接,监听广域网地址,如此公网中启动多个星际文件系统节点,它们之间可以以该广域网地址进行连接。

通过上述方法就解决了大多数互联网状况下的星际文件系统节点的互联网连接问题:

2个节点都在同一主机:通过127.0.0.1地址连接

2个节点在同一个内网内:通过局域网地址连接

2个节点都有公网地址:通过公网地址连接

1个节点在内网,1个节点在公网:内网的节点通过在公网节点的公网地址连接

这里有一个问题,假如2个节点处于两个不同内网环境,因为存在NAT设施,NAT设施可能是对称型,对称型的NAT设施是没方法穿透的,所以星际文件系统提供了relay的方法解决不同内网环境下节点的连接问题,上面提到的监听/p2p-circuit地址则是为知道决该问题,对于2个处于不同内网环境不可以直接连接的节点,通过配置relay节点中转从而打造连接。

至此,星际文件系统解决了不同互联网环境下的节点之间打造连接的问题,下面大家来看一下星际文件系统是怎么样构建大规模的分布式节点互联网,将处于全世界的不同区域的各个节点连接起来的。

星际文件系统互联网构建的过程可以看作是两个阶段:

版权保护: 本文由 T12区块链 原创,转载请保留链接: http://www.egfi.cn//baike/1896.html