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

简介

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

项目概况

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

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


Go项目概况.jpg

项目意义

  • HTTP 是低效且昂贵的


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


    价值保留
    • 据统计,一个网页的生命周期平均只有100天,到处充斥着404
    • IPFS 保存文档的每个历史版本并且可以轻松建立弹性的镜像数据
  • 中心化抹杀了公众机会


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


    去中心化
    • 一旦主干网因为自然灾害或人为因素宕机,应用都会挂掉
    • 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
    image.png

IPFS 与 区块链

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

使用 IPFS

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

下载地址

初始化

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

init.jpg

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

文件夹.jpg

启动服务

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

daemon.jpg

节点发现

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

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

peers.jpg

Hello World

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

cat.jpg

文件上传与下载

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

add.jpg

Web端

web.jpg

关键技术

文件分块

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

block.jpg

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

subnode.jpg
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352

推荐阅读更多精彩内容