回首
IPFS – InterPlanetary File System 星际文件系统,是一个点对点的分布式文件存储系统,IPFS的愿景是构建一个全世界的分布式网络,用来替换传统中心化的服务器模式,所有的IPFS节点组成一个分布式网络,每个节点都可以存储文件,用户可以从IPFS构建的网络中以DHT(Distributed Hash Table,分布式哈希表) 的方式获取文件,从而实现了新一代的完全去中心化的网络,旨在取代现有的万维网。IPFS功效很厚实,如DHT组网,文件存储,Bitswap文件交流等功效。
文件存储和文件交流的手艺详解可以通过之前的推文内容举行领会,今天我们来领会这个文件系统的“地基”——网络模块。
IPFS网络初识
IPFS是一个开源项目,要到达它声称的构建一个全世界的分布式网络的目的,那么他一定要先解决差别国家、差别区域节点的毗邻问题。
首先,看一下IPFS网络部门设置,如下图所示,红框内部的Swarm是IPFS监听的网络地址,其中支持ipv4和ipv6协议,且默认支持QUIC协议。
*QUIC协议是由google**提出的,现在已经提交给互联网工程义务小组(IETF),成为了正式的网络规范,相对于TCP来说QUIC网络传输协议的传输速率更快。
IPFS节点启动之后日志如下图所示,可以看到IPFS节点监听了以下网络地址,其中包罗内陆的、局域网、广域网的地址,**另有/p2p-circuit地址。
问题来了,为什么需要监听这么多地址?
那是由于IPFS是一个开源项目,为了让全世界各地的节点毗邻起来则必须要解决种种网络情况下节点毗邻的问题。
监听内陆地址,这样内陆启动多个IPFS节点,它们之间可以以该地址举行毗邻,监听局域网地址,这样内网内启动多个IPFS节点,它们之间可以以该局域网地址相互毗邻,监听广域网地址,这样公网中启动多个IPFS节点,它们之间可以以该广域网地址举行毗邻。
通过上述方式就解决了大部门网络情况下的IPFS节点的网络毗邻问题:
2个节点都在统一主机:通过127.0.0.1地址毗邻
2个节点在统一个内网内:通过局域网地址毗邻
2个节点都有公网地址:通过公网地址毗邻
1个节点在内网,1个节点在公网:内网的节点通过在公网节点的公网地址毗邻
这里有一个问题,若是2个节点处于两个差别内网环境,由于存在NAT装备,NAT装备可能是对称,对称的NAT装备是没有办法穿透的,以是IPFS提供了relay的方式解决差别内网环境下节点的毗邻问题,上面提到的监听/p2p-circuit地址则是为领会决该问题,对于2个处于差别内网环境不能直接毗邻的节点,通过设置relay节点中转从而确立毗邻。
至此,IPFS解决了差别网络环境下的节点之间确立毗邻的问题,下面我们来看一下IPFS是如何构建大规模的分布式节点网络,将处于全世界的差别区域的各个节点毗邻起来的。
IPFS网络构建
IPFS网络构建的历程可以看作是两个阶段:
Bootstrap阶段
IPFS节点在启动之前需要设置它的Bootstrap节点,设置文件中相关设置如下图所示,Bootstrap设置中设置了IPFS节点启动时需要毗邻的所有种子节点列表,这些节点地址列表信息是默认的,若是需要搭建IPFS私有网络可以修改成自己的种子节点列表(Qm开头的字符串是IPFS的节点id)。默认提供的种子节点都是具有公网地址的节点,IPFS节点启动的时刻首先毗邻该种子节点,后续通过该种子节点去发现IPFS网络中更多的节点,从而举行毗邻,也就是DHT组网阶段。
DHT组网阶段
IPFS节点毗邻种子节点乐成以后则去通过DHT去发现其他节点,关于DHT的详解可以看这篇文章《Libp2p中DHT和Bitswap详解》。
发现其他节点之后则实验举行毗邻,毗邻乐成的节点会加入到该节点的节点列表,以便后续可以直接与该节点通讯,考虑到全世界的IPFS节点规模很大,不可能每个节点和其他节点保持长毗邻,以是对每个节点的毗邻数目做了限制,一样平常节点毗邻数目都在1千以下(IPFS设置文件中可以设置),对于没有毗邻的节点需要通讯的话,可以通过DHT找到该节点地址,然后毗邻该节点举行通讯,这样就构成了大规模的分布式节点网络。
我们可以通过一个示例展示上述历程。下图是一个常见的网络拓扑架构,有三个网络划分毗邻了Internet,IPFS node1部署在具有公网ip的服务器上,外部可以直接接见该节点,IPFS node2和IPFS node3都部署在对称NAT装备后面,外部不能接见该节点。
在上面的网络架构下,处于公网的IPFS node1作为种子节点,种子节点**启动,然后IPFS node2,node3,node4,node5的种子节点设置成IPFS node1,划分启动后首先毗邻IPFS node1,毗邻乐成后通过DHT发现其他节点**划分毗邻,对于IPFS node1,它毗邻的节点地址列表如下图所示,由于IPFS node2,node3,node4,node5均处于NAT装备后面,以是IPFS node1节点列表中这些节点的端口都是NAT装备映射后的端口(内陆启动的IPFS端口默认是4001)。
对于IPFS node3来说,它的节点地址列表中,IPFS node1的地址是公网地址,由于IPFS node3和IPFS node2都处于NAT装备后面,不能直接毗邻,以是IPFS node2的地址是relay地址,IPFS node1节点作为relay节点,IPFS node3给IPFS node2发消息时通过IPFS node1转发,relay地址花样为:
Relay节点的地址/p2p-circuit/p2p/目的节点id
而IPFS node3的节点地址列表中,IPFS node4和IPFS node5的地址均为局域网地址,这样就完成了公网节点、处于NAT装备后的局域网节点的组网历程。
总结
以上就是IPFS网络的组建历程,为了利便形貌只是以几个IPFS节点为例。
实际上IPFS的这种网络组建方式也能很好地支持超大规模节点的组网,当节点规模很大的时刻(数万节点),设置数十个节点作为种子节点,通过DHT组网就能完成数万甚至更多节点的组网,此时每个节点的长毗邻数目保持在数百个,后续节点间通讯时,若是还没有确立毗邻,可以通过DHT凭据节点id查询该节点的地址信息(地址列表,包罗所有公网和局域网地址),然后通过该地址毗邻该节点**完成通讯历程。
IPFS网络的这种组建方式也异常值得分布式系统学习和借鉴。
作者简介
姚文豪 来自数据网格实验室BitXMesh团队 数据平台架构师
文章标题:IPFS网络是若何组建的?
文章链接:https://www.btchangqing.cn/189628.html
更新时间:2021年02月04日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。
然并软~哈哈哈
哈哈,看的人少,回一下比特币