IPFS综述

1. IPFS工作原理


IPFS是一个P2P存储网络。内容可通过位于世界任何地方的对等点访问,这些对等点可能会传递信息、存储信息或两者兼而有之。IPFS知道如何使用它的内容地址(CID)来找到相关的内容,而不是基于它的位置。IPFS有三个基本原则:

1)通过内容寻址(内容标识符)进行唯一标识;

2)通过有向无环图链接内容(文件的内容);

3)通过分布式哈希表发现(多地址)内容;

这三个原则相互建立,以实现IPFS生态系统。让我们从内容寻址和内容的唯一标识开始。

1.1内容寻址

IPFS使用内容寻址来识别内容。比如,在图书馆找书的时候,经常会询问书名,这就是内容寻址。传统的URLs和文件路径,通过其所在地址识别一个文件,它在什么计算机上和计算机硬盘上的哪个位置。

IPFS不是基于位置,而是通过文件中的内容或其内容来寻址文件。上面的内容标识是该地址内容的加密散列。散列对于它来自的内容是唯一的,即使与原始内容相比它可能看起来很短。它还可以验证你是否得到了你要求的内容,不一样的内容只会得到不同的哈希值。

1.2 Merkle DAG(默克尔有向无环图)

Merkle DAG是在Merkle树的基础上构建的,Merkle DAG和Merkle树很相似,但不完全一样,Merkle DAG不需要进行树的平衡操作、非叶子结点允许包含数据等。Merkle DAG的目的主要有如下几点:

1)内容寻址:使用多重Hash(Multi-Hash的格式存有三种类型信息,类型,长度和哈希值)来唯一识别一个数据块的内容;

2)防篡改:可以方便地检查Hash值来确认数据是否被篡改;

3)由于内容相同的数据块Hash值是相同的,很容易去掉重复的数据,节省存储空间。

其中第三条是IPFS系统中最为重要的一个特性,在IPFS系统中,每个块的大小限制在256KB(暂定为256KB,这个值可以根据实际的性能需求进行修改)以内,那些相同的数据就能通过Merkle DAG过滤掉,只需增加一个文件引用,而不需要存储空间。

 1.3 DHT(分布式哈希表)

DHT的主要思想如下:全网维护一个巨大的文件索引哈希表,这个哈希表的条目形如<Key,Value>。这里的Key通常是文件在某个算法下的哈希值(Key也可以是文件名或对文件内容的一种描述,如内容摘要),而Value则是存储文件的节点IP地址。查询时,仅需要提供Key,就能从表中查询到存储节点的地址并返回给查询节点。当然,这个哈希表会被分割成小块,按照一定的算法和规则分布到各个节点上。每个节点仅需要维护一小块哈希表。这样,节点查询文件时,只要把查询报文路由到相应的节点即可。

2. CID(内容标识符)

在去中心化网络上与对等方交换数据时,依靠内容寻址(而不是集中式的网络的位置寻址)来安全地定位和识别数据。内容标识符是字描述(自描述)的内容寻址标识符,它不指示内容存储在哪里,而是根据内容本身形成的一种地址。CID中的字符数取决于基础内容(文件内容)的加密哈希,而不是内容本身的大小。由于IPFS中大多数内容使用SHA2-256进行哈希处理,因此大多数CID的大小都相同,这使得它们更易于管理,尤其是在处理多个内容时。

创建CID的第一步是转换输入数据,使用加密算法将任意大小的输入(数据或者文件)映射到固定大小的输出,这种转换称为加密散列摘要或简称为散列。如下图所示:
 

 

使用的加密算法必须生成具有以下特征的散列:

1)确定性:相同的输入应该总是产生相同的哈希值;

2)不相关:输入的微小变化应该会生成完全不同的哈希值;

3)单向:从散列中重建数据应该是不可行的;

4)唯一性:一个文件产生一个特定的哈希值。

3. multiaddr(多地址)


检索节点就是接到用户请求需要检索某个内容的节点。存储节点就是存储了用户所需内容的节点(存储节点就是,用户请求检索某个文件时,存储该文件的节点)。当检索节点要检索某个内容时,实际上是要查找谁是存储节点并且存储节点到底在哪里。

当存储节点被找到后,IPFS网络就会返回存储节点的“多地址”。典型的“多地址”看起来是类似下面这样的一串字符:

/ip4/123.456.78.90/tcp/4001/ipfs/QmAbCdEfGhIjKlMnOpQrStUvWxYzAbCdEfGhIjKlMnOpQr

“多地址”为检索节点提供了以下信息:1)其它节点如果想与存储节点进行通信需要遵循什么协议(ipv4还是ipv6);2)存储节点的IP(互联网上IP地址)是多少;3)其它节点访问存储节点时该访问哪个端口(与存储节点连接后,通过那个端口对文件进行传输、下载);4)存储节点的Peer ID是多少。

4. UnixFS


将文件添加到IPFS时,它可能太大而无法放入单个块中,因此它需要元数据将所有块链接在一起(通过Merkle DAG中对象的links和data进行链接)。UnixFS是一种基于协议缓冲区的格式,用于描述IPFS中的文件、目录和符号链接。这种数据格式用于在IPFS中表示文件及其所有链接和元数据。UnixFS创建链接对象的块或块树。其功能如下表示:

data formats:管理UnixFS对象到协议缓冲区的序列化/反序列化;

importer:从文件和目录构建DAG;

exporter:导出DAG。

5. libp2p


libp2p是一个模块化的协议、规范和库系统,支持对等网络应用程序的开发,负责IPFS数据的网络通信、安全、对等路由和内容发现、交换等功能。libp2p能够帮助我们连接各个设备节点的网络通信库,任意两个及诶单[3] (节点),不管在哪里,不管什么处于什么环境,不管运行什么操作系统,不管是不是在NAT之后。

5.1 寻址

Libp2p以一致的方式使用许多不同的寻址方案。多地址(缩写为multiaddr)将多层寻址信息编码为单个“面向未来”的路径结构。例如,/ipv4/171.113.242.172/udp/162表示使用地址为171.113.242.172的IPv4协议,同时向端口162发送UDP数据包。

5.2 传输

用于将数据从一台机器移动到另一台机器的技术。传输是根据两个核心操作定义的,侦听和拨号。侦听意味着你可以接受来自其他对等方的传入连接。拨号是打开与侦听对等方的传出连接的过程。Libp2p的核心要求之一是传输不可知(不知道从哪个节点或多个节点进行文件的传输),这意味着使用哪种传输协议的决定取决于应用程序的开发人员。

5.3 安全

Libp2p支持将传输连接升级为安全加密的通道(当在DHT中找到存储文件的节点,会直接与存储节点进行连接)。然后,你可以信任正在与之通信的对等方的身份,并且没有第三方可以读取对话或在进行中对其进行更改。

5.4 对等点身份

PeerIdentity(通常写成PeerId)是对点网络上特定对等点的唯一引用。每个Libp2p对等点都有一个私钥,它对所有其他对等点保密,以及一个相应的公钥(PeerID就是对节点公钥进行哈希加密的结果),与其他对等点共享。

5.5 对等点路由

对等路由是利用其他对等节点的知识发现对等地址的过程。在一个对等路由系统中,一个对等点可以给我们提供我们需要的地址(如果他们有的话),或者将我们的查询发送给另一个更有可能得到答案的对等点。

5.6 bitswap


bitswap的主要功能是利用信用机制在节点之间进行数据交换(信用机制就是能够激励节点去分享数据,即使这个节点暂时没有数据的需求),不局限于一个种子文件中的数据块。bitswap协议中存在一个数据交换市场,这个市场包括各个节点想要获取的所有块数据,这些块的数据可能来自文件系统中完全不相关的文件,同时这个市场是由IPFS网络中所有节点组成的(市场就是所有的文件。节点存储文件、传输文件,共同维护文件)。
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值