IPFS(InterPlanetary File System)星际文件系统,是一个内容寻址、版本化、点对点超媒体的分布式存储、传输协议,依靠分散的全球网络节点构成一个分布式系统,使得网络更加安全和高效。
对于普通用户而言,可以很快地将自己的计算机变成IPFS上的一个节点。或者可以将IPFS作为一个Firefox的插件运行,或者直接访问任何运行IPFS-JS的网页。
在这几种情况下,您都将成为IPFS网络上的节点,不同的节点能承担不同的责任。而一个典型的IPFS节点具有以下功能:
● 具有基于pki的身份
● 可存储部分dag
● 可作为服务器运行
● 与其他节点保持联系
● 可从其他节点获取内容
● 可嵌入移动应用程序
![10d47cc2a1661e7ca93a182de667f247.png](https://i-blog.csdnimg.cn/blog_migrate/98d3e0fe74d21be28f81d2154ea1f6b3.png)
1、具有基于pki的身份。Public Key Infrastructure(PKI),公开密钥基础设施,即利用公开密钥机制建立起来的基础设施。PKI的主要目的是用来发行“身份证明书”,一旦利用了证明书确认了身份,通信的加密也就可以实现了。
IPFS使用一个公钥(或非对称)加密系统来生成一对密钥:一个可以共享的公钥和一个需要保密的私钥。使用这组密钥,IPFS对等节点可以执行身份验证,其中公钥验证具有成对私钥的对等节点是否实际发送了给定的消息,并进行加密,其中只有具有成对私钥的对等节点才能解密使用相应公钥加密的消息。
有了公钥,就可以生成加密ID-您的对等身份。对等节点的ID本质上是其公钥的加密哈希。此ID使对等节点能够找到彼此,并在连接后进行身份验证。
![e98bfda3a2aa776614608dec5e3f1fec.png](https://i-blog.csdnimg.cn/blog_migrate/11aceaecf9f485036f50478808e2feb5.jpeg)
2、可存储部分DAG。Merkle DAG(梅克尔有向无环图)是IPFS核心的数据结构(让数据变得有意义),IPFS整个系统都是围绕Merkle DAG进行的,图的链接是哈希值。这使得IPFS中所有的对象具备以下属性:
● 授权的:内容可以被哈希加密并且通过链接进行验证。
●永久保持的:一旦文件被提取,对象就可以永久性的缓冲。
● 通用性的:任何数据结构都可以被表述为梅克尔有向无环图。
● 去中心化的:任何节点都可以创建对象,不需要从中心节点写入。
![29734ba13f5a21118656dd70ab3c05bd.png](https://i-blog.csdnimg.cn/blog_migrate/fe7883c41609289a33590e639f58631c.png)
DAG采用了见证人主链概念,维持一条公认的主链作为凭证,而其他分支只要不和主链冲突都可以视为有效交易,效率更好。
Merkle DAG使用多重哈希来唯一识别一个数据块的内容实现内容寻址;可以方便的检查哈希值来确认数据是否被篡改;还可以很有效地去掉重复的数据(内容相同的数据块哈希相同),节省存储空间。
![1c268c3e48a38644f2f87b697f171f37.png](https://i-blog.csdnimg.cn/blog_migrate/1d456e19794b6bed3e273d45690c5f84.png)
3、可作为服务器运行。IPFS并非无服务器,节点至少需要一台服务器进行数据发布。不过这台服务器的配置不用太高,能超频的单核虚拟机基本上足以提供必要的CPU资源;但如果大家同时要运行IPFS Cluster,则需要2 GB以上内存。
4、与其他节点联系。对于当前节点来说,所有与其连接的对等节点会构成一个swarm网络,以此实现相互通信,并通过各自的ID相互识别。这个ID为每个对等方交互提供了一个唯一的标识,以便对等节点知道自己正与正确的对等节点通信。
![7b0e15ed7bd25955e4366fee70c5712d.png](https://i-blog.csdnimg.cn/blog_migrate/1d9b707107a3287d985c6b4123110bf0.jpeg)
5、可从其他节点获取内容。一个存储服务,最基本的功能就是add存和get取操作,当本地节点发出一个get请求时,它首先会从本地的blockstore(数据分块存储库)中查找请求的数据。
如果没有找到,它便会向swarm网络发出请求,通过DHT Routing找到拥有该数据的节点,一旦找到一个拥有所请求数据的节点,该节点会把数据反馈回来。然后,本地节点会把收到的block(数据分块)数据缓存一份到本地的 blockstore中,这样整个网络中就相当于多了一份原数据的拷贝。
当有更多的节点都请求该数据的时候,就变得更加容易,而由于越来越多的节点都存有该数据,数据就变得几乎不可丢失。这就是IPFS网络能够永久保存数据的原理,只要有任何一个IPFS节点拥有某数据,这个数据就可以被全网所获取。
![279349027098d49f8a4a7b379e976b65.png](https://i-blog.csdnimg.cn/blog_migrate/91556c9ca4beac7c768b1f92eeb1ec1c.png)
6、可嵌入移动应用程序。目前已不少团队开发出了将IPFS嵌入移动应用程序的文件库。
IPFS Lite是一个提供与IPFS网络交互的基本功能的库:创建新数据和获取现有数据。对于希望直接在其代码、应用程序中嵌入IPFS功能的应用程序来说,IPFS Lite是一个不错的选择。
Berty创建的gomobile-ipfs可帮助在移动设备上运行IPFS。此文件库旨在提供适用于Android,iOS和React-Native的程序包,允许它们在移动设备上运行和使用IPFS节点。