IPFS技术系列之IPFS协议栈

前言

本文主要介绍IPFS底层的协议栈,包括IPFS的七层结构。


一、IPFS协议概述

  和HTTP类似,IPFS是基于TCP/IP的应用层协议。IPFS协议栈也是由七层负责不同功能的子协议构成。如下图所示:

1.身份层:管理节点身份生成和验证。
2.网络层:管理与其他节点的连接。
3.路由层:以DHT维护路由信息以定位特定的对等节点和对象,用以响应本地和远端节点发出的查询请求。
4.交换层:基于BitSwap(比特交换协议),模拟可信市场,弱化数据复制,防止作弊。
5.对象层:基于Merkle DAG ,具有内容寻址,防冗余等特性。
6.文件层:类似于Git的版本文件系统,支持blob,list,tree 等结构体。
7.命名层:具有自验特性的可变名称系统。
那么,下面我将对七层结构一一作介绍:

二、身份层

  在IPFS网络中,所有的节点通过唯一的NodeId进行标识,与比特币的地址类似,NodeId也是一个公钥的哈希。每个节点在IPFS代码中都由Node结构体来表示,其中只包含NodeId及一组公私钥对。

type NodeId Multihash
type Multihash []byte // 自描述加密哈希摘要
type PublicKey []byte
type PrivateKey []byte // 自描述的私钥
type Node struct {
    
    
NodeId NodeID
PubKey PublicKey
PriKey PrivateKey
}

身份系统的主要功能是标识IPFS网络中的节点。类似于用户信息的生成。在节点首次建立连接时,节点之间首先交换公钥,并且进行身份验证。

三、网络层

IPFS网络堆栈具有以下特点:
1.传输:IPFS兼容现有的主流传输协议,包含WebRTC DataChannels,uTP等传输协议。
2.可靠性:使用uTP和sctp来保障,用以动态调整网络状态。
3.可连接性:使用ICE来实现广域网的可连接性。
4.完整性:使用哈希校验检查数据完整性。IPFS网络中所有数据块都具有唯一的哈希值。
5.可验证性:使用数据发送者的公钥及HMAC消息认证码来检查消息的真实性。

四、 路由层

IPFS路由层数据结构使用基于S/Kademlia和Coral技术的分布式松散
哈希表(DSHT),主要用于实现内容路由、节点路由及数据存储等三种基本功能。IPFS的DHT结构会根据所存储数据的大小进行区分:小的值直接存储在DHT上,一般不过1KB;更大的值,DHT只存储值索引,这个索引是一个NodeId。

五、交换层

  IPFS的交换层借助BitSwap协议,主要功能是利用信用机制在节点之间进行数据交换,并且每个节点在下载的同时不断向其他节点上传已下载的数据。在IPFS中,数据的分发和交换都是使用的BitSwap协议。
BitSwap协议主要负责两件事情:
1.向其他节点请求需要的数据块列表
2.为其他节点提供已有的数据块列表。

BitSwap数据交换的生命周期经历4个状态:
1.状态开发(Open):对等节点间开发待发送BitSwap账单状态,直到建立连接。
2.数据发送(Sending):节点间发送want_list和数据块。
3.连接关闭(Close):节点发送完数据后断开连接。
4.节点忽略:节点因为超时、自定义、信用分过低等因素被忽略。

六、对象层

  IPFS对象层主要是使用Merkle DAG技术构建了一个有向无环图数据结构,用来存储对象数据。
Merkle DAG 为 IPFS提供了一些比较有用的属性,包括:
1.内容寻址:所有内容由多重哈希校验并唯一标识。
2.防止篡改:在IPFS网络中如果数据被篡改或损坏,可以通过哈希验证检测到。
3.重复数据删除:保存完全相同内容的所有对象都是相同的,并且只存储一次。

七、文件层

   IPFS还定义了一组对象,用于在Merkle DAG之上对版本文件系统进行建模。
1.块(block):一个可变大小的数据块。
2.列表(list):一个块或者其他列表的集合。
3.树(tree):块、列表或其他树的集合
4.提交(commit):树版本历史记录中的快照。

八、命名层

  在命名层,协议实验室团队为IPFS设计了IPNS星际文件命令系统模块。
在其中采用的是自验证命名的方式。该模式如下:
1.通过NodeId =hash(node.Pubkey),生成IPFS节点信息
2.给每个用户分配一个可变的命名空间,由之前的生成的节点ID信息作为地址名称,在此路径下:/ipns/。
3.一个用户可以在此路径下发布一个用自己私钥签名的对象。
比如:/ipns/XLF2ipQ4jD3UdeX5xp1KBgeHRhemUtaA8Vm/
4.当其他用户获取对象时,可以检测签名是否与公钥和节点信息相匹配,从而验证用户发布对象的真实性。

另外,IPFS还使用了一些技术,用来增加IPNS的用户友好度。
1.对等节点链接
用户可以将其他用户节点的对象直接链接到自己的命名空间下。
2.DNS TXT IPNS记录
用户可以在现有的DNS系统中添加TXT记录,这样能通过域名访问IPFS网络中的文件对象。

#DNS TXT 记录
ipfs.benet.ai. TXT “ipfs=XLF2ipQ4jD3U …”
#表现为符号链接
ln -s /ipns/XLF2ipQ4jD3U /ipns/fs.benet.ai

IPFS也支持可读标识符Proquint, 可以将二进制编码翻译成可读文
件的方法

#proquint语句
/ipns/dahih-dolij-sozuk-vosah-luvar-fuluh
#分解为相应的形式
/ipns/KhAwNprxYVxKqpDZ

除此之外, IPFS还提供短地址的命名服务

#用户可以从下面获取一个link
/ipns/shorten.er/foobar
#然后放到自己的命名空间
/ipns/XLF2ipQ4jD3UdeX5xp1KBgeHRhemUtaA8Vm

总结

以上就是今天要讲的IPFS协议栈,包括其中的七层结构。

猜你喜欢

转载自blog.csdn.net/ggj89/article/details/122582337
今日推荐