回顾

IPFS - InterPlanetary File System 星际文件系统,是一个点对点的分布式文件存储系统,IPFS的愿景是构建一个全国际的分布式网络,用来代替传统中心化的服务器模式,一切的IPFS节点组成一个分布式网络,每个节点都能够存储文件,用户能够从IPFS构建的网络中以DHT(Distributed Hash Table,分布式哈希表) 的方法获取文件,然后实现了新一代的完全去中心化的网络,旨在取代现有的万维网。IPFS功能很丰富,如DHT组网,文件存储,Bitswap文件交流等功能。

文件存储和文件交流的技术详解能够经过之前的推文内容进行了解,今天咱们来了解这个文件系统的“地基”——网络模块

IPFS网络初识

IPFS是一个开源项目,要达到它声称的构建一个全国际的分布式网络的方针,那么他必定要先处理不同国家、不同区域节点的衔接问题。

首要,看一下IPFS网络部分装备,如下图所示,红框内部的Swarm是IPFS监听的网络地址,其间支持ipv4和ipv6协议,且默许支持QUIC协议。

IPFS网络是如何组建的?

*QUIC协议是由google最早提出的,目前已经提交给互联网工程使命小组(IETF),成为了正式的网络标准,相关于TCP来说QUIC网络传输协议的传输速度更快。

IPFS节点发动之后日志如下图所示,能够看到IPFS节点监听了以下网络地址,其间包含本地的、局域网、广域网的地址,最终还有/p2p-circuit地址。

IPFS网络是如何组建的?

问题来了,为什么需求监听这么多地址?

那是因为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组网阶段。

IPFS网络是如何组建的?

▲ DHT组网阶段

IPFS节点衔接种子节点成功今后则去经过DHT去发现其他节点,关于DHT的详解能够看这篇文章《Libp2p中DHT和Bitswap详解》。

发现其他节点之后则测验进行衔接,衔接成功的节点会加入到该节点的节点列表,以便后续能够直接与该节点通讯,考虑到全国际的IPFS节点规划很大,不可能每个节点和其他节点坚持长衔接,所以对每个节点的衔接数量做了约束,一般节点衔接数量都在1千以下(IPFS装备文件中能够装备),关于没有衔接的节点需求通讯的话,能够经过DHT找到该节点地址,然后衔接该节点进行通讯,这样就构成了大规划的分布式节点网络。

咱们能够经过一个示例展示上述进程。下图是一个常见的网络拓扑架构,有三个网络别离衔接了Internet,IPFS node1布置在具有公网ip的服务器上,外部能够直接拜访该节点,IPFS node2和IPFS node3都布置在对称型NAT设备后边,外部不能拜访该节点。

IPFS网络是如何组建的?

在上面的网络架构下,处于公网的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节点为例。

实际上IPFS的这种网络组成方法也能很好地支持超大规划节点的组网,当节点规划很大的时分(数万节点),设置数十个节点作为种子节点,经过DHT组网就能完结数万甚至更多节点的组网,此时每个节点的长衔接数量坚持在数百个,后续节点间通讯时,假如还没有树立衔接,能够经过DHT依据节点id查询该节点的地址信息(地址列表,包含一切公网和局域网地址),然后经过该地址衔接该节点最终完结通讯进程。

IPFS网络的这种组成方法也十分值得分布式系统学习和借鉴。

作者简介

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

视野开拓

每个奴隶都或多或少想过揭竿起义,只是这些锁链牢牢地锁着他们,让他们未能如愿。手铐束缚着他们的双手,他们既无法攻击别人,也无法保护自己。男性身上都戴着锁链,这让女性也更无力抵抗。女性与男性相隔离,因而更容易受欺辱。一天晚上,在弗吉尼亚绿蔷薇县的一个小酒馆中,一名旅客看到几个商贩把一队奴隶带到一个房间。这名游客于是留下了这样的记录,每个白人男性从奴隶中“带走一个女性去和他们过夜,这已是一件习以为常的事”。10岁的奴隶移民约翰·布朗曾看见奴隶贩子斯塔林·芬尼和他的助手在南卡罗来纳州路边的马车上轮奸一位女性,其他女性在旁边哭泣,而那些带着锁链的男性只能在旁边默默地坐着。-《被掩盖的原罪》

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注