#ipfs

IPFS P2P网络原理 以及 Bitswap的数据交互流程

关于IPFS的P2P网络相关分析是基于 v0.4.15

commit: 8671f7bb9f1409a60e97666422ff87017dc4cbfc

首先IPFS执行初始化, 先配置 IPFS_PATH , 比方是当前目录

1
$ export IPFS_PATH = $PWD

初始化

1
$ ipfs init

IPFS初始化时会在本地生成一个默认的 config 文件

这个config文件会有一些ip和端口的配置,配置的就是本地的 host

然后在 builder.go 文件里的 setupNode 函数会调用 startOnlineServices 将配置文件中的相关信息传参,从而建立IPFS host

bitswap 是一个数据块交互的网络实现, 每个IPFS节点有一个bitswap网络。 通过wantmanager进行管理, 而wantmanager 里面又实现了队列机制。 如果队列有消息需要发送的话,首先判断msgQueuesender是否为nil,则会先建立连接,生成一个 sender 然后发送数据。

bitswap 的一些操作命令,基本都是查看数据交互过程的一些数据信息展示, 实际操作主要还是利用到 ipfs block get 等相关命令

ipfs block get 后面带着指定的块 cid , 会先从本地blockstore里面判断是否有指定的块,如果没有则根据当前网络连接的情况, 将所需要的 块 放在 wantlist里面,形成一个 work, 触发当前的 msgQueue的事件循环机制doWork 去执行,发送bitswap 消息 从而从其他节点中获取到需要的块。

获取一个数据block的时序图

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×