美文网首页IPFS
IPFS结构和关键流程

IPFS结构和关键流程

作者: 孔祥子看天下 | 来源:发表于2018-07-23 16:01 被阅读27次

IPFS结构

宏观上

[图片上传失败...(image-e7ae19-1532319867950)]

细节来看

[图片上传失败...(image-a36506-1532319867950)]

按照白皮书,从技术上大概分为以下几个大模块

1. 身份 - 管理节点身份生成和验证。

2. 网络 - 管理与其他对等体的连接,使用各种底层网络协议。这些协议是可配置的。

3. 路由 - 维护信息以定位特定的对等体和对象。响应本地和远程查询。默认为DHT,但可更换。

4. 交换 - 一种支持有效块分配的新型块交换协议(BitSwap)。模拟市场,弱化数据复制。贸易策略可替换。

5. 对象 - 具有链接的内容寻址不可更改对象的Merkle DAG。用于表示任意数据结构,例如文件层次和通信系统。

6. 文件 - 由Git启发的版本化文件系统层次结构。

7. 命名 - 自我认证的可变名称系统。针对特定文件,可以锁定唯一hash

<pre class="ql-syntax ql-authorBlock-13003047 first-line ql-long-13003047" spellcheck="false" line="6zhm" data-linenum="1">这些子系统不是独立的;</pre>

<pre class="ql-syntax ql-authorBlock-13003047 ql-long-13003047" spellcheck="false" line="CGKW" data-linenum="2">它们是集成在一起,互相利用各自的属性。</pre>

<pre class="ql-syntax ql-authorBlock-13003047 last-line ql-long-13003047" spellcheck="false" line="Tjrg" data-linenum="3">从下到上构建协议栈。</pre>

关键流程

IPFS身份管理

由于IPFS网络是没有中心服务器的,各个节点之间的数据传输是需要识别各个节点的,并且要求各个节点的ID是唯一的,如果没有一定的生成规则,就带来了挑战。在IPFS中,IPFS节点ID是这样规定的。

1。节点要自己生成一个基于PKI(https://en.wikipedia.org/wiki/Public_key_infrastructure)的秘钥对。

2.对密钥对中的公钥做hash也就是HASH(节点公钥),就得到了节点的ID

默认生成的节点秘钥配置放在文件夹:~/.ipfs/config ,如果你没有自定义IPFS_PATH的话。

例如我本机的

"Identity":{

    **"PeerID"**:**"QmQeJWckGKS9C56NtyvqA3APsq4gbtS8YwPnLTb9ZT3dd4"**,

    **"PrivKey"**:**"privateKey"**

},

说明:~/.ipfs/config内容狠多,下面再说。

疑问:

这里如果节点作恶了,我从新生成一对密钥对就OK拉 !!!怎么办?

节点ID的使用,当两个节点需要通信的时候

1.交换两个节点的公钥

2.检测HASH(节点公钥)是否等于节点ID

3.如果检测不相等,就退出。

IPFS 初始化流程

初始化命令

ipfs init

命令分析

init 命令如果后面不跟着ipfs配置文件的话,会检测 ~/.ipfs/config是否有一个配置文件,没有自动生成一个默认的。之后,就根据这个默认的配置文件初始化 。当然用户也可以自定义一个配置文件,把路径附加在init 的后面。

IPFS启动流程

启动化所做的事情

1.检测是否需要生成配置文件,如没有,生成

2.读取配置文件

3.根据配置文件调用 core.NewNode(req.Context, ncfg) 生成节点

4.打印本地节点的swarm节点地址信息

5.调用serveHTTPGateway监听一系列端口,提供http网关服务

5.调用普罗米修斯模块(prometheus)启动性能收集系统运行的一些metric

6.启动

最复杂的是在第三步,这里面也有很多细节。

第三步

IPFS 数据上传流程分析

  1. 首次启动的时候,会通过配置文件中的bootstrap选项拿出来种子节点,建立网络连接建立连接可能和传统的P2P不太一样,待确定:自己维护一张路由表?还是维护一个连接列表?;Bittorrent如何做的呢?

  2. 连接的时候,会通过身份层,做节点有效性验证;NodeID,自描述Hash值;两个值一致则对等节点允许接入;

  3. 将文件按照上限256K字节打散成一个一个的block,计算每个block的hash,同时计算文件的merkel root hash;

  4. 将3的hash存入DHT; DHT会在路由层被使用;DHT会在bitswap协议中,被全节点维护;

  5. 到4步的时候,只是进行了本地存储,没有上传至IPFS公网;随后要进行pub操作

IPFS 数据下载流程分析

  1. 如果该文件被PIN过,则直接从本地返回;否则会向对等节点发送block hash列表;

  2. 对等节点通过DHT和路由层算法,找到每个block hash所在的节点,将文件返回来;

  3. 本地节点在接收block文件的同时,也会不断的将block广播至其他对等节点;

  4. 更新DHT;组装block文件,返回至用户端

参考链接

https://hackernoon.com/understanding-the-ipfs-white-paper-part-2-df40511addbd

https://ipfs.io/docs/commands/#ipfs-key

联系微信:bitwiki

相关文章

网友评论

本文标题:IPFS结构和关键流程

本文链接:https://www.haomeiwen.com/subject/euodmftx.html