1. 首页
  2. 技术分享

IPFS背后的技术

IPFS可以做些什么

IPFS背后的技术
图像来源

简而言之,IPFS是一个P2P文件系统。一些术语:

  1. IPNS  - 名称系统。将加密密钥映射到IPFS中的文件。
  2. IPRS  - 记录系统。可以验证和查询的抽象记录。所有IPNS记录都是(好的)IPRS记录,但并非所有IPRS记录都是IPNS记录。
  3. DHTBlockchains,Pubsub等 – 分发这些记录的方式(以及更多)。

它是如何工作的:

IPFS为每个文件提供唯一的哈希(用于标识文件的指纹)。即使只有一个单一字符的差异,哈希也完全不同。因此,IPFS可以使用文件的内容来定位其地址,而不是像HTTP那样使用域名。

IPFS删除整个网络中的冗余文件。它为它进行版本控制。记录每个编辑历史记录,并且可以轻松追溯。

触发搜索查询时,IPFS会根据其哈希值搜索文档。由于哈希是唯一的,因此很容易进行查询。

IPFS中的哈希值和HTTP中的IP地址都难以让人记住。人们发明了域名来定位IP地址。我们还有IPNS来定位IPFS哈希。IPFS中的所有节点都存储哈希表以记录文件的相应位置。


技术

分布式哈希表

在IPFS的情况下,关键是内容的哈希。在IPFS节点中查询具有散列QmcPx9ZQboyHw8T7Afe4DbWFcJYocef5Pe4H3u7eK1osnQ的内容,IPFS节点将在DHT中查找哪些节点具有内容。

如何有效地找到特定值(快速,尽可能少的网络请求)以及如何管理DHT以便更改(进入/离开网络的节点或表中的新条目)容易被吸收,这对于存在各种DHT实现。

DHT在IPFS中用于路由,换句话说:

  1. 宣布向网络添加数据
  2. 帮助定位任何节点请求的数据。

白皮书指出:

小值(等于或小于1KB)直接存储在DHT上。对于更大的值,DHT存储引用,它们是可以为块提供服务的对等体的NodeId

阻止交换 – BitTorrent

一个值得注意的区别是,在BitTorrent中,每个文件都有一组独立的对等体(彼此形成一个P2P网络),其中IPFS是所有数据的一大群对等体。
当对等体连接时,它们会交换它们拥有的块(has_list)以及它们正在寻找的块(want_list)

BitSwap策略:
– 这种策略基于这两个对等体之间的先前数据交换
– 当对等体交换块时,它们跟踪它们共享的数据量(构建信用)和它们接收的数据量(构建债务)
-在BitSwap Ledger中跟踪两个对等点
– 如果对等方有信用(共享超过收到),我们的节点将发送请求的块
– 如果对等方有债务,我们的节点将共享或不共享,具体取决于确定性函数当债务较大时,共享的可能性变小
– 数据交换始终从分类账的交换开始,如果不相同我们的节点断开连接

版本控制系统 – Git

属性:
1)不可变对象表示文件(blob),目录(树)和更改(提交)。
2)对象通过其内容的加密散列进行内容寻址。
3)嵌入其他对象的链接,形成Merkle DAG。这提供了许多有用的完整性和工作流属性 
4)大多数版本控制元数据(分支,标签等)只是指针引用,因此创建和更新成本低廉。
5)版本更改仅更新引用或添加对象。
6)将版本更改分发给其他用户只是传输对象和更新远程引用。

自我认证的文件系统 – SFS

这用于实现IPFS的IPNS名称系统。它允许我们为远程文件系统生成地址,用户可以在其中验证地址的有效性。

SFS引入了一种构建自我认证文件系统的技术:使用以下方案寻址远程文件系统:

/ SFS / <位置>:<主机ID>

其中Location是服务器网络地址,并且:

HostID = hash(public_key || Location)
因此,SFS文件系统的名称证明其服务器。


应用

IPFS也可以做pubsub应用程序。

“发布者”发送按主题或内容分类消息“订阅者”仅接收他们感兴趣的消息,所有这些都没有发布者和订阅者之间的直接联系。

CLI用法:https//ipfs.io/blog/25-pubsub/

例:

内容发布/货币化平台:http//www.alexandria.io/learn/#integrated-technologies

github:https:  
//github.com/dloa/alexandria-librarian

P2P聊天应用程序:
https:  //orbit.chat 
https://github.com/orbitdb/orbit

在线播放器:​​输入哈希以查看相应的视频
http://www.ipfs.guide/ 
http://ipfser.org/2018/04/08/r36/

媒体网:https
//akasha.world/

示例列表:https
//github.com/ipfs/awesome-ipfs

退税

慢:通过scp
复制100MB和1G文件分别需要1.5秒和17秒在IPFS中,同样需要16秒和170秒

下载373M二进制文件:

  • wget:12.6 MB / s
  • ipfs get(方向A):9.10 MB / s
  • ipfs get(方向B):2.07 MB / s

  • ping:33.018毫秒
  • ipfs ping:32.93 ms
  • ipfs cat(方向A):151ms
  • ipfs cat(方向B):443 ms

参考:https//github.com/ipfs/go-ipfs/issues/2111

私人IPFS:

IPFS中的所有文件都可供公众使用,这对于大多数应用程序来说并不是一个理想的功能,特别是对于企业应用程序。人们可能想要一个只能由某些实体访问的私有IPFS。

此功能仍在实验短语中。
回复:https//github.com/ipfs/ipfs-cluster

路线图:https//cluster.ipfs.io/roadmap/
短期(2018年第二季度):

  • 项目网站(正在进行)
  • 从go-ipfs / importers中提取关键功能(正在进行)
  • 分片支持原型(正在进行)
  • 改进UX以处理更大的文件/并发引脚操作(多个方面,一些正在进行中)
  • IPFS中的高效存储库磁盘使用(正在进行)
  • 设置,管理和操作生产集群的参考指南。
  • 第一个指标暴露出来。
  • 由我们运营和维护的实时大型存储集群(IPFS)整合了我们所有的pinset。(进行中)
  • 讨论和合作始于“大数据集”领域的参与者。

中期(6-8个月),本节写于07/2018

  • 与对使用ipfs-cluster / ipfs存储大型数据集感兴趣的不同玩家进行稳定的合作。
  • 对至少~1TB数据集(包存储库)的良好分片支持。
  • 我们有一些指标可以了解集群的增长程度(对等体,pinset,存储库大小),降级开始的时间,应用程序性能的关键路径。
  • 协作档案工作(陌生人之间)

有用的链接

如何托管文件:https
//github.com/miaoski/ipfs-tutorial

在IPFS上传加密文件:https://medium.com/@mycoralhealth/learn-to-securely-share-files-on-the-blockchain-with-ipfs-219ee47df54c

在IPFS上托管以太坊应用程序:https://medium.com/@merunasgrincalaitis/the-ultimate-end-to-end-tutorial-to-create-and-deploy-a-fully-descentralized-dapp-in-ethereum-18f0cf6d7e0e

原创文章,作者:Eric,如若转载,请注明出处:https://ipfsdrop.com/tech/the-technology-behind-ipfs/

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

(+86)18301922335

在线咨询:点击这里给我发消息

邮件:haskell@freechains.cn

工作时间:7×24小时

QR code