(一)IPFS基础原理

简介

        IPFS的中文名是星际文件系统,由Juan Benet在2014年5月份发起。2015年,他创建的IPFS在YCombinator孵化竞赛中拿到了巨额的投资,同时成立了协议实验室。这个实验室团队由14位核心开发者以及社区中上百位代码贡献者组成的。2017年8月份IPFS售出10%的代币,当时募集到了2.57亿美金。

      IPFS本质上是一种内容可寻址、版本化、点对点超媒体的分布式存储、传输协议,目标是补充甚至取代过去20年里使用的超文本媒体传输协议(HTTP),希望构建更快、更安全、更自由的互联网时代。

  •   基于内容寻址,而非基于域名寻址。文件(内容)具有存在的唯一性,一个文件加入了IPFS的网络,将基于计算对内容赋予一个唯一加密的哈希值。这将改变我们使用域名访问网络的习惯。
  • 提供文件的历史版本控制器(如git),并且让多节点使用保存不同版本的文件。
  • IPFS的网络上运行着一条区块链,即用来存储互联网文件的哈希值表,每次有网络访问,即要在链上查询该内容(文件)的地址。
  • 通过使用代币(FileCoin)的激励作用,让各节点有动力去存储数据。 Filecoin 是一个由加密货币驱动的存储网络。矿工通过为网络提供开放的硬盘空间获得Filecoin,而用户则用 Filecoin 来支付在去中心化网络中储存加密文件的费用

工作机制

        IPFS为每一个文件分配一个独一无二的hash值,这个方式使得IPFS可以支持基于文件内容寻址。IPFS在整个网络范围内去掉重复的文件,并且为每一个文件建立版本管理。当查询文件的时候,IPFS网络根据文件的hash值进行查找。为了让用户更好的记文件存放的hash,IPFS利用IPNS将hash值映射一个比较容易记忆的IPNS名字,每个节点除了存储自己需要的数据,还需要存储一张hash表,用来记录文件存储的位置,进行文件的查询下载。

 

架构分析

        IPFS至少有八层子协议栈,从上至下为身份、网络、路由、交换、对象、文件、命名、应用。

 

1.身份层和路由层

          对等节点身份信息的生成以及路由规则是通过Kademlia协议生成制定,KAD协议实质是构建了一个分布式松散Hash表,简称DHT,每个加入这个DHT网络的人都要生成自己的身份信息(通过哈希生成的ID),然后才能通过这个身份信息去负责存储这个网络里的资源信息和其他成员的联系信息。如果新成员需要寻找一位老成员A的联系信息,而他没有这位老成员A的联系方式,那么他可以通过联系任意一位存储老成员A联系信息的成员来获取这位老成员A的联系信息,同理在IPFS中获取资源信息也是一样的道理。

2.网络层

网络层比较核心,使用的LibP2P可以支持任意传输层协议。NAT技术能让内网中的设备共用同一个外网IP,我们都体验过的家庭路由器就是这个原理。

3.交换层

        交换层,是类似迅雷这样的BT工具。迅雷其实是模拟了P2P网络,并创建中心服务器,当服务器登记用户请求资源时,让请求同样资源的用户形成一个小集群swarm,在这里分享数据。这种方式有弊端,一位服务器是由迅雷统一维护,如果出现了故障、宕机时,下载操作无法进行。

       中心化服务还可以限制一些下载请求,人们发明了一种更聪明的方式就是Bittorrent,让每一个种子节点所要存储的数据,通过哈希表存储在里面,BT工具相对不太受监管,服务更加稳定。

        IPFS团队把BitTorrent进行了创新,叫作Bitswap,它增加了信用和帐单体系来激励节点去分享,用户在Bitswap里增加数据会增加信用分,分享得越多信用分越高。如果用户只去检索数据而不存数据,信用分会越来越低,其它节点会在嵌入连接时优先选择信用分高的。这一设计可以解决女巫攻击,信用分不可能靠机器刷去提高,一直刷检索请求,信用分越刷越低。请求次数和存储量的变量之间有一个比较精妙的算法,类似一个抛物线,前期可以容忍很多东西,达到一定次数后不再信任。

4.对象和文件层

        对象层和文件层适合结合来谈,它们管理的是IPFS上80%的数据结构,大部分数据对象都是以Merkle DAG的结构存在,这为内容寻址和去重提供了便利。文件层是一个新的数据结构,和DAG并列,采用Git一样的数据结构来支持版本快照

5.命名层

       命名层具有自我验证的特性(当其他用户获取该对象时,使用指纹公钥进行验签,即验证所用的公钥是否与NodeId匹配,这验证了用户发布对象的真实性,同时也获取到了可变状态),并且加入了IPNS这个巧妙的设计来使得加密后的DAG对象名可定义,增强可阅读性。

6.应用层

生态介绍

 

用高度模块集成化的方式。协议实验室团队2015年创立,到17年都在做IPLD、LibP2P、Multiformats这三个模块的开发,它们服务于IPFS底层。

            Multiformats是一系列hash加密算法和自描述方式(从值上就可以知道值是如何生成)的集合,它具有SHA1\SHA256 \SHA512\Blake3B等6种主流的加密方式,用以加密和描述nodeID(节点编号)以及指纹数据的生成。

           LibP2P是IPFS的核心,面对各式各样的传输层协议以及复杂的网络设备

           IPLD是一个转换中间件,将现有的异构数据结构统一成一种格式,方便不同系统之间的数据交换和互操作。当前IPLD支持比特币、以太坊的区块数据以及IPFS和IPLD。IPLD中间件可以把不同的区块结构统一成一个标准进行传递。

           Filecoin把以上这些应用的数据价值化,通过类似比特币的激励政策和经济模型,让更多的人去创建节点,提供服务,去让更多的人使用IPFS。

03-08
### IPFS分布式文件系统介绍 IPFS(InterPlanetary File System)是种旨在补充甚至替代HTTP的新代超媒体传输协议。通过内容寻址、版本化和点对点的特性,使得互联网更加开放、快速且安全。 #### 基本概念 IPFS构建了个分布式的网络,在这个网络里每个节点都存储着自己创建的内容以及部分内容副本。当用户请求某个资源时,不是向固定的服务器发起请求而是询问整个P2P网络中的其他成员是否有该资源。这种方式不仅提高了系统的鲁棒性和抗审查能力,还因为多源并发下载而提升了访问速度[^1]。 #### 技术特点 - **内容可寻址**:传统URL基于位置定位网页或文件的位置;而在IPFS中,则是根据文件本身计算出唯的哈希值作为其地址。这意味着只要文件内容不变,无论存放在哪里都能被唯识别并获取到相同的数据。 - **版本控制系统集成**:类似于Git的工作原理,每次修改都会生成新的版本记录,并保留历史变更信息以便追溯查询。这有助于实现高效的历史数据管理和协作开发环境下的文档共享[^3]。 - **去中心化的架构设计**:不同于集中式服务提供商模式下容易形成单点故障的风险,IPFS采用分散式的节点构成全球范围内的超级计算机集群共同提供服务支持。任何拥有足够带宽和个人空间的人都可以成为贡献者参与到数据分发过程中来。 ```python import ipfshttpclient # 连接到本地运行的IPFS守护进程 client = ipfshttpclient.connect('/ip4/127.0.0.1/tcp/5001') # 添加文件至IPFS网络 res = client.add('example.txt') print(f'Added file with hash {res["Hash"]}') # 获取指定hash对应的文件内容 content = client.cat(res['Hash']).decode() print(content) ``` #### 应用场景 除了上述提到的技术优势外,IPFS已经在多个实际应用场景得到了验证和发展: - 文件存储与分享平台; - 内容发布系统如网站托管; - 版本控制系统辅助工具; - 区块链项目中的元数据管理方案; - 构建各种类型的去中心化应用程序(DApps)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值