

IPFS是一种分布式文件系统,它将现有与经过验证的对等技术结合到一个统一的系统中。
IPFS是一种分布式文件系统,它将现有与经过验证的对等技术结合到一个统一的系统中。它旨在利用分布式哈希表(Kademlia),块交换(BitTorrent),版本控制系统(Git)和自我认证文件系统(SFS)的优势来创建用于编写和部署应用程序以及分发和版本化大数据的新平台。为了使协议面向未来,IPFS广泛使用多格式。

IPFS协议栈可以从下到上分为七个子系统:
1. 身份
在P2P网络中,节点需要一种由其他节点识别的方式。在IPFS中,网络中的每个节点都获得一个NodeID,它是其公钥的加密哈希。使用S / Kademlia的静态加密拼图生成PKI密钥对(公共+私钥)。在第一次连接时,对等体交换公钥并检查公钥的哈希是否等于其他NodeID。如果匹配,则建立连接; 如果不是,则节点与“伪”对等节点断开连接。通过multihash格式,IPFS允许根据用例(例如,更强的安全性和更快的性能)以及将来改变的功能选择来使用不同的散列算法。
2. 网络
P2P网络中的节点需要一种与其他节点通信的方式。IPFS基本上可以在任何网络上运行,并管理传输、可靠性、连接性、完整性和真实性。一个特别有趣的方面是对等寻址,其中IPFS不依赖于地址或访问IP但使用multiaddr格式。这样,IPFS可用于覆盖网络,地址存储为多个字节字符串,供底层网络使用。
3. 路由
IPFS网络中的节点需要能够找到其他对等体的网络地址和可以提供某些特定数据的对等体。为此,IPFS使用基于S / Kademlia和Coral的分布式Sloppy Hash Table(DSHT)。DSHT可实现高效查找,同时有效利用存储和带宽。IPFS DSHT用于宣告节点具有某些特定数据,并通过参考该数据的多哈来找到可以为某些特定数据提供服务的节点。小元数据(<= 1KB)直接作为其值存储在DSHT中。对于较大的值,仅存储引用,即可以提供数据的对等体的NodeID。即使默认值是DSHT,IPFS的路由系统也可以针对不同的用例进行交换。
4.交换
交换数据IPFS使用类似于BitTorrent的协议,称为BitSwap。数据被分解为块并在节点之间交换。与仅在寻找相同文件的对等体之间交换数据的BitTorrent不同,BitSwap块与所有IPFS节点交叉文件。BitSwap作为数据市场,节点以特定数据进行交换。为了确保节点接收它们请求的数据,BitSwap实施了激励数据复制的策略,例如,利用数字货币优势的项目FileCoin。因为每个节点都可以使用自己的策略,所以大多数节点使用的策略应该具有抵御滥用的弹性。在这样的策略中,应该有一个分类账来跟踪两个对等方之间的交换。如果同行在收到数据块时共享并累积债务,则会获得信贷。如果对等体请求数据并具有信用,则它将接收该块。如果对等方处于债务状态,则其他对等方共享该区块的概率将取决于债务数额。这样可以避免自由加载,同时仍然能够实现有效的数据传播。如果节点没有其他对等方请求的任何数据并累积债务,它可以请求网络从其他对等方评估的数据块,但优先级低于其实际需要的数据块。如果对等方处于债务状态,则其他对等方共享该区块的概率将取决于债务数额。这样可以避免自由加载,同时仍然能够实现有效的数据传播。
5.对象
IPFS中的数据以Merkle Directed Acyclic Graph(Merkle DAG)组织。节点称为对象,可以包含数据和/或指向其他对象的链接。这些Merkle链接是嵌入在源中的目标的加密哈希。因此,您将获得分布式且经过身份验证的哈希链接数据结构,这些数据结构提供许多有用的属性,如内容寻址,回火阻力和重复数据删除。这意味着所有内容(包括链接)都由其哈希值唯一且不可变地识别,并且可以通过这种方式进行处理。内容通过其哈希验证,IPFS检测它是否被篡改或损坏,因为该对象的哈希值将发生变化。保存完全相同内容的所有对象(因此具有完全相同的哈希)仅存储一次,这对于索引对象和非常常见的数据片段尤其有用。

6. 文件
为了在Merkle-DAG之上建模一个类似git的版本控制文件系统,IPFS定义了以下一组对象:
Blob是一个可变大小的数据块(无链接),代表IPFS中的文件
列表表示大型或重复数据删除的文件,并包含有序的blob或列表序列。可以将同一节点链接到各个节点的定向图允许有效的重复数据删除。
树代表目录并包含blob、列表或其他树
提交类似于git提交,表示对象的版本历史记录中的快照。他们可以引用任何类型的对象。
7. 命名
在数据是内容寻址的系统中,对象的每次更改都会改变其哈希值,您需要某种方式来传达新的或更新的内容。这可以通过可变命名来完成。IPNS(InterPlanetary命名空间系统)为每个用户分配一个可变的命名空间,并且可以将对象发布到由用户私钥签名的路径,以验证对象的真实性。这允许类似于URL的人类友好名称,对等链接和名称缩短服务。它的工作方式是将内容作为不可变的IPFS对象发布,然后将其哈希值作为元数据值发布在路由系统上。