analysis-of-IPFS-in-Chinese
analysis-of-IPFS-in-Chinese copied to clipboard
IPFS技术架构分析
IPFS分析笔记——Wayne
作者:杨尉(waynewyang),转载请注明出处
此资源库编写于2018年9月-10月,开源于2019年5月。
目录
- IPFS协议总览
- IPFS定义及参考技术
- 协议总览
- 基础
- 语言基础
-
基础模块分析
- multiformat
- cid
- repo—看看IPFS持久化的数据是什么样的
- IPFS协议分析
-
协议层分析
- network, routing, exchange, merkledag, naming
-
IPFS应用层数据结构
- unixfs
- debug方法
-
协议层分析
- IPFS API
- 对外接口
-
IPFS主要API概要分析
- init、daemon、add、get、cancel
- 应用
- 官方应用
- IPFS-Cluster
- ipfs-companion
- ipfs-desktop
- 第三方应用
- 官方应用
IPFS定义及参考技术
-
定义
白皮书:IPFS是一种内容可寻址、版本化、点对点超媒体的分布式文件系统
官网:IPFS是分布式Web,一种点对点超媒体协议,使网络更快,更安全,更开放。
-
参考技术
- ice协议——网络连通性
解释:解决peers之间的连通性
- DHT技术,KAD、coral算法——分布式路由
解释:解决peers之间的路由、内容路由(内容寻址)、以及分布式哈希key-value存储
重要特征:内容寻址、或者说哈希寻址
- bt——交换技术
解释:解决peers之间的内容交换
重要特征:P2P分布式、更快、更开放
- git——数据结构
解释:MerkleDAG借鉴git的数据存储方式,解决数据的防篡改、去重
重要特征:防篡改、去重
- sfs——命名系统
解决哈希难以记忆、以及由于DAG特性导致的动态数据变更导致的更新成本问题
重要特征:版本化(通过ipns的发布记录)、ipns解析(人类更容易识别操作)、dns解析
- unixfs系统
特征:unixfs挂载特性,挂载的ipfs类似一个文件系统,可以使用unix方式访问全球哈希。
第一步:在PEER A上,在IPFS添加another.txt文件
D:\go-ipfs>ipfs add another.txt
29 B / 29 B [===================================================
added QmamQ2prV7FTfFm1eJc5o6QRA2BAkUJAbc5JCrLpu9dY2z another.txt
第二步:在peer B上,挂载ipfs文件系统(全球性的),直接通过unix的方式,cat第一步的哈希,可以查询到文件内容
wayne@wayne:~$ ipfs mount
IPFS mounted at: /ipfs
IPNS mounted at: /ipns
wayne@wayne:~/go/src$ cat /ipfs/QmamQ2prV7FTfFm1eJc5o6QRA2BAkUJAbc5JCrLpu9dY2z
"This is new another file"
- 回到目录
协议总览
- [x] [IPFS项目进度]
- pm记录
-
- 规范制定中,不成熟。
-
- 草稿完成,很有可能做较大变更。
-
-接近稳定,只会做较小变更。
-
- 规范稳定,本质不变,可能做小的改善。
-
- 完全稳定,永久不变。
- [x] 协议总览
- MerkleDAG vs IP 瘦腰图
- ipfs通过MerkleDAG访问资源、http通过IP访问资源
- 向下提供支撑,向上提供应用
- MerkleDAG vs IP 瘦腰图
- 回到目录
语言基础
-
[x] go依赖包编译注意
-
[x] context用法
-
[x] interface理解
-
回到目录
基础模块分析
-
[x] multiformats
-
[x] 基于multiaddr的一些支撑包(网络层)
- [x] mafmt
- [x] addr-util
- [x] maddr-filter
- [x] multiaddr-filter
-
[x] cid
-
[x] repo
- [x] 参考
- 文档未更新
- [x] 持久化数据分析
- [x] 笔记
- [x] 示例
- [ ] 细节源码分析
- [x] 参考
-
[ ] 其他
- [ ] protobuf
- [ ] semver
- [ ] IPFS数据导入导出/DEX
-
回到目录
协议层分析
-
[x] network
- [ ] pnet
- [x] relay
- [ ] 穿透,待分析,目前端口转发OK,穿透比较差
-
[x] routing
- [x] DHT寻址原理
- [x] 源码中修改K桶 a并发与k值提高效率
-
[x] block exchange
- [x] block
- [x] 笔记
-
[x] merkledag
- [x] DAG的相关的数据结构
cid -> block -> node(dag)
link -> node(dag)
- [x] 对上层接口 ipld-format
- [x] 具体实现分析笔记
- [x] ipld-cbor
- [x] go-merkledag
- [x] dag-link数目大小限制,为什么是最多174个
-
[x] namesys
- [x] dns
- [x] ipns
-
回到目录
应用层数据结构
-
[x] unixfs
- [x] mount
- [x] 挂载在unix文件系统之上进行操作
- [x] mount 示例
- [x] files(mfs)参考
- [x] 操作示例
- [ ] 其他
- [ ] 源码分析
- [x] mount
-
回到目录
协议debug方法
ipfs log tail
- 回到目录
对外接口
-
[x] 参考
- [x] 参考
- [x] public-api
- [ ] js interface-ipfs-core
-
[x] API笔记
- [x] basic
- [x] data structure
- [ ] advance
- [x] network
- [x] tool
- [ ] others
-
回到目录
IPFS主流程概要分析
- 回到目录
IPFS-Cluster
ipfs-companion
-
回到目录
ipfs-desktop
-
回到目录
第三方应用
-
[Paratii - 分布式策展协议和流媒体引擎](Paratii - 分布式策展协议和流媒体引擎)
-
文章
-
回到目录