IPFS 网络介绍与初步上手体验

简介

星际文件系统(InterPlanetary File System,缩写IPFS)是一个旨在创建持久分布式存储和共享文件的网络传输协议。它是一种 内容可寻址对等超媒体分发 协议。在IPFS网络中的节点将构成一个分布式文件系统。它是一个开放源代码项目,自2014年开始由Protocol Labs在开源社区的帮助下发展。其最初由Juan Benet设计。

项目概况

目前已在 Github 开源,https://github.com/ipfs。Go 语言及 JS 语言版本已经实现,Go作为主力语言,是标准参考。目前社区活跃:过去一个月,项目每周平均大概会解决40个左右的PR。

以 Go 语言版本为例,项目已经实现了以下组件:


IPFS 网络介绍与初步上手体验_第1张图片
Go项目概况.jpg

项目意义

  • HTTP 是低效且昂贵的


    IPFS 网络介绍与初步上手体验_第2张图片
    效率提升
    • HTTP 协议每次从一个服务器下载单个文件,而分布式协议,比如 P2P 协议,同时从多个源头获取文件的分片,效率大幅提升。以视频传输为例,有论文指出,P2P 可以节省 60% 带宽。
    • IPFS 具备分布式及无重复文件的特性,解决以上问题。
  • 互联网创造的价值每天都在湮灭


    IPFS 网络介绍与初步上手体验_第3张图片
    价值保留
    • 据统计,一个网页的生命周期平均只有100天,到处充斥着404
    • IPFS 保存文档的每个历史版本并且可以轻松建立弹性的镜像数据
  • 中心化抹杀了公众机会


    IPFS 网络介绍与初步上手体验_第4张图片
    王者不再荣耀
    • 互联网是人类史上关于公平和创新的重大工具,但是中心化对这是很大威胁
    • IPFS 致力于构造一个开放、扁平的网络空间
  • 网络应用过度依赖主干网


    IPFS 网络介绍与初步上手体验_第5张图片
    去中心化
    • 一旦主干网因为自然灾害或人为因素宕机,应用都会挂掉
    • IPFS 多样化的弹性网络可以不依赖于主干网运转

项目目标

干掉 HTTP。

IPFS aims to replace HTTP and
build a better web for all of us.

原理与使用

工作原理

  1. 当你向 IPFS 上传一个文档的时候,文档被切分成块(bolcks),每个块都有自己单独的唯一地签名标识,这个标识称为加密HASH(cryptographic hash)。
  2. IPFS将在全网检索是否有重复内容,有的话删除重复部分
  3. 每个网络节点可以只存储自己感兴趣的文档内容,并且维护一个索引,标识是谁存储了什么文档。
  4. 在查找文档时,实质上是查找一个加密HASH背后对应的内容
  5. IPFS 提供一个分布式命名系统 IPNS,使得可以为文件命名,而不是只能用 HASH
    IPFS 网络介绍与初步上手体验_第6张图片
    image.png

IPFS 与 区块链

IPFS 可以解决海量文件存储的问题,这正好解决了区块链的一个痛点。用户可以把 IPFS 上不变的、永久的访问链接打包到区块链的交易中去。

使用 IPFS

目前,IPFS 已经在 MAC OS / LINUX / WINDOWS 三大平台有了实现版本。当前实现主要是 CMD 命令操作为主。下面以 Windows 平台为例简单介绍其使用方法。

下载地址

初始化

执行 ipfs init 命令。初始化会在本地生成基础配置,包括 节点标识私钥信息,以及一些网络基础配置,可以通过 ipfs id 查看。

IPFS 网络介绍与初步上手体验_第7张图片
init.jpg

另外,这个命令也会在用户文件夹创建一些基础文件。

IPFS 网络介绍与初步上手体验_第8张图片
文件夹.jpg

启动服务

执行 ipfs daemon 命令。让本地节点接入 IPFS 网络。从命令执行输出可以看出,默认是在本机的 4001 端口进行基于TCP的监听。

IPFS 网络介绍与初步上手体验_第9张图片
daemon.jpg

节点发现

执行 ipfs swarm peers 命令。会列出当前网络上发现的邻节点。显示结构为

<访问方式>/ipfs/<节点公钥HASH>

IPFS 网络介绍与初步上手体验_第10张图片
peers.jpg

Hello World

IPFS 网络在创建时,默认放了一张猫咪图片 cat.jpg。因此我们可以尝试去下载它,这有点类似于代码世界的 Hello world!

IPFS 网络介绍与初步上手体验_第11张图片
cat.jpg

文件上传与下载

执行 ipfs add 命令,可以上传文件。
执行 ipfs get 命令,可以下载文件。
从示例可以看到,文件在 IPFS 上,以 HASH 直接标识,其值为 QmaAN3Uhj7f6fXzFpWMSid9sjW66Pq51cgCwrxDjSnYfxK

IPFS 网络介绍与初步上手体验_第12张图片
add.jpg

Web端

IPFS 网络介绍与初步上手体验_第13张图片
web.jpg

关键技术

文件分块

以刚才上传的文件 QmaAN3Uhj7f6fXzFpWMSid9sjW66Pq51cgCwrxDjSnYfxK 为例,执行 ipfs ls 命令,可以看到文件分块情况。这个原大小约 1M 的文件被分成了4个文件块,并且每个块又有自己的HASH。这是因为 IPFS 的存储粒度为 256KB。这块父块与子块间的关系,在 IPFS 里面采用 DAG 算法组织起来。

IPFS 网络介绍与初步上手体验_第14张图片
block.jpg

此时,我们执行文件块大小查看命令可以看到,子文件块由于存储了实际数据,因此为数据大小。父文件块由于已经被切割,实际内部只包含一些索引信息,大小只有 0.2KB

IPFS 网络介绍与初步上手体验_第15张图片
subnode.jpg

你可能感兴趣的:(IPFS 网络介绍与初步上手体验)