IPFS(星际文件系统)研究报告

in #ipfs7 years ago

简介:
说到文件传输协议这好像是一个纯IT的概念,对于很多人来说这东西很陌生,自己并不了解它是什么。其实,任何一个互联网用户都在使用网络传输协议只是我们平常没留意它而已。举个例子,我们想知道法国总统马克龙是什么人,打开电脑或者手机,在浏览器内输入“马克龙”三个字就能搜出很多相关信息。网页中罗列的所有信息都是在HTTP超文本协议内完成搜索的。“马克龙”三个字所对应的所有网页都是HTTP协议下对应“马克龙”的所有信息。同理,淘宝上买东西也是在HTTP协议下,淘宝系统根据用户提供的关键字找到了对应的商品。
以上两个例子是针对电脑而言的,即有线互联网。细心的朋友也会注意到:我们用手机浏览器进行网页搜索后,也能实现上述功能。手机浏览器、手机淘宝也能根据关键字找到对应的搜索内容。这就是HTTP协议的精妙之处:协议架构下实现了有线互联网和无线互联网的无缝对接,HTTP协议可以同时在有线网络和无线网络施加运用。
我们平时上网使用的微信、QQ也是在HTTP协议架构下完成的。我跟朋友小明聊微信:“嗨,出来吃饭吧。”我的微信好友列表内有联系人小明,我们之间有互联互通的聊天地址。所以我能向小明发微信。但是我两的微信聊天内容别人是看不到的,因为我只与微信好友建立了交流通道。陌生人无法获取我的HTTP 地址(我的微信HTTP协议地址是微信号,别人加我,自己不同意的话,我与对方是没有建立HTTP协议通道的),也无法看到聊天内容。HTTP协议是各类软件的连接协议。
相信通过前面三段文字的介绍,你已经对文件传输协议有了直观的了解。三段文字重点介绍了HTTP文件传输协议。抛砖引玉,介绍HTTP是为了加深大家对于IPFS文件传输协议的理解。IPFS协议的中文翻译是星际文件系统,这个名字也表露了开发者的雄心壮志,HTTP协议架构下的互联网连接了整个世界,IPFS协议的开发者希望这一协议架构能实现星球之间的连接。假如未来的SpaceX成功把人送入火星,那么星际文件系统能够将他与地球连接起来。想象一下,那个宇航员在火星上刷着Tiwitt,看黄石公园的风景,跟中国的朋友聊天,多么不可思议的场景!
IPFS是一套分布式的文件传输协议,以前的HTTP文件传输协议是在搜索文件对应的地址,用户找到这个地址后再访问上面的文件。比如:用户输入www.baidu.com进入的网页是百度的搜索引擎,即百度的官方网站。IPFS协议则是将网络中的文件印射成唯一的哈希值。大家都知道哈希算法是输入值经过运算后,可得出多个输出值。只有完全一样的输入值才能得出相同的哈希输出值。因此,当文件内容发生改变后,文件印射的哈希树也会随之改变。这样的好处是:一个文件对应唯一的哈希数列。文件可以存储在分布式网络的任何节点都能被找到。HTTP协议则只能找到一个文件地址,而不是文件本身。存储的文件必须放置在中心化服务器上,用户通过文件地址连接服务器,再访问文件。HTTP协议已经存在了近40年,通过该协议访问文件必须经过中心化服务器,因此这套协议创造了许多互联网巨头。中国的百度、腾讯、阿里巴巴,美国的亚马逊、谷歌、Facebook都是高度中心化的互联网巨兽。互联网把这个世界推平,它本应让这个世界更加公平,但中心化的互联网巨头却将巨量的财富、海量的数据控制在自己名下,这是不公平的!借助IPFS文件传输协议或许能让这个已经连接在一起的世界,变得没有中心,让世界变得更加公平。

HTTP协议存在的问题:
中心化的储存结构下,数据丢失或被删除则无法被找回
浏览网页的过程中,我们都经历过这种场景:“404 Page Not Found”。点开网页后什么也没看到只有一串这样的字符。出现这种情况有两种可能:

  1. 服务器的数据被删除了
  2. 服务器被永久关停了
    你所寻找的网页已经在互联网中消失了,再也无法访问。

运行效率低下
文件只能通过中心化服务器访问,这对于服务器的信息承载能力要求极高。用户想快速访问服务器并获取相关资料,则带宽与服务器需要更好的运营水准。中国目前的互联网政策为:“降费提速”旨在提高网络的带宽速度,假定带宽条件相同的前提下,相同的文件读取速度使得HTTP协议中维护服务器的成本远高于IPFS.在运行速度、运营成本的双重考量下,IPFS文件传输协议显得更有优势。

成本昂贵
根据IPFS官方的博客,韩国著名歌手鸟叔的“江南Style”MV到目前为止,已经被全世界播放了30亿次,如果我们假设这个MV的大小为100MB,那么到目前为止,这个MV一共消耗了大约300Petabytes(1P=1,000,000GB)的网络流量,如果按照0.01USD/GB 的价格来算的话,那么谷歌将支付3百万美金给网络服务供应商(ISP)。

安全问题
Http协议过于地中心化。为了支撑Http协议,服务器必须24*7小时处于开启状态。对于流量巨大的公司:百度,淘宝,腾讯,他们每年将花费巨额资金用于维护公司的服务器和解决安全隐患例如:DDoS,XSS,CSRF等等。去中心化的IPFS文件传输协议则没有此类风险,对网络的分布式攻击显得成本昂贵且攻击难度远大于攻击中心化服务器。

过于依赖主干网络
HTTP协议架构下对于主干网络的要求极高,主干网络需要承载极大的信息读取和存储压力。同时主干网络又是脆弱且运营成本偏高的,主干网络可能因系统内部的错误运行出现瘫痪,也可能受到外部攻击。主干网络承载的信息量过大,这也意味着维护成本较高的问题。

IPFS的运行逻辑
IPFS详解:
IPFS是一套全新的网络协议,它具备提高网络运行效率,降低成本,打破现在的网络服务提供商过度中心化的格局。IPFS是一套去中心化的文件系统。首先来回顾一下互联网发展的两个阶段:第一阶段,完全集中化的互联网结构。互联网诞生之初是完全集中化的产物,二战时期美国设计原子弹的过程中使用了计算机,通过它完成了巨量的计算任务。那台由数万个电子管组成的计算机承载了所有计算任务,这是高度集中化的网络结构。第二阶段,网络分散为不同的计算集群,举个例子:中国铁路网12306为乘客提供网络购票服务,起初的集中化处理订单数据的方式让12306网站不堪重负,后来引入了多个数据处理集群,网站的运行效率提高,此时的乘客能够快速地完成网络购票,并且12306铁路网降低了网站的运营成本。从两个阶段的发展历程来看,可总结出两点:一、网络的结构正在由中心化的运行方式逐步走向分散集群的阶段,未来很有可能出现完全去中心化的网络。二、网络的去中心化程度降低有助于实现降低成本和提高效率。
IPFS本质上是一种内容可寻址、版本化、点对点超媒体的分布式存储、传输协议,目标是补充甚至取代过去20年里使用的超文本媒体传输协议(HTTP),希望构建更快、更安全、更自由的互联网时代。在IPFS网络架构下,节点存储的文件可生成对应的独一无二的哈希值,哈希值与文件一一对应。文件内容发生改变则哈希值也会随之改变,这种设计保证了通过哈希值能够精确地找到这个文件并且文件内容是固定不变的。
当用户通过哈希值在网上搜索文件内容时,这个文件所对应的哈希值会通过唯一的标识去访问网站,并且提前检验这个标识是否已经被存储过。如果被存储过,直接从其它节点读取它,不需要重复存储,一定意义上节约了空间。简单来说,文件与哈希值呈现一一对应关系,文件可分散存储在网络中的不同节点。文件所对应的唯一哈希值可找到节点上的所有文件。这样带来两个好处:一、文件不需要重新存储直接通过哈希值即可访问文件。二、存储文件的节点分散于全网,用户调取文件时,从物理距离最近的地点访问问价即可,这样可有效降低带宽成本。在HTTP协议下,用户访问文件需通过中央服务器完成数据访问。这种设计给中央服务器造成了巨大的带宽压力,并且用户访问数据的空间距离可能较远,这种结构会导致较高的带宽成本。
IPFS网络结构也具备弥补区块链不足的优势,区块链的数据存储能力较弱,且成本高昂。区块链也具备存储数据的能力,区块容量越大,可存储的数据也会越多,数据的存储成本自然也会越低。但区块扩大容量必定会造成出块时间变长,进而影响区块链的整体运行效率。(莱特币的逻辑结构与比特币非常相似,但莱特币通过降低区块容量获取了更高的出块速度)同时,新区块是通过挖矿等共识机制产生的,区块扩容也会对降低挖矿效率。(较大的区块容量对应矿工较高的区块计算难度)。IPFS与区块链结合可有效解决区块链的数据存储难题,将文件存放在IPFS网络内,将IPFS中所对应的哈希值添加到区块中,可以实现区块链与IPFS的互联互通。通过区块中存储的文件哈希值到IPFS网络中查找对应的文件。简单来说,区块存储了哈希值,哈希值为一串字符对于内存空间的占有需求非常低。区块链上需要存储的数据则放在IPFS文件协议内。两者的优势互补,可以实现区块链的文件存储功能。下文将会详细介绍EOS.IO与IPFS的联系与运用。
IPFS文件协议可将使用该协议的任何计算机或者通讯设备都设置为网络中的一个节点,文件可存储在节点上。我们的手机、电脑等设备几乎都有闲置的存储空间,如果将这些存储空间放入网络内用于存储数据。我们可获得一定的filecoin代币奖励,网络中也能充分地利用这些闲置的存储空间。我们日常所使用的软件,观看的视频本质上都可以用“文件”来定义,因此IPFS文件协议可能是一台“全球计算机”,世界上的所有使用IPFS协议的电脑共同组成了这台计算机,它的计算速度和效率将会是永远的全球第一!

IPFS的结构:
区块链协议栈.jpg

图1 IPFS的八层协议栈

身份层 每一个加入节点的用户都有独一无二的身份信息,身份信息对应唯一的哈希值。身份信息通过Kademlia协议生成,并将身份信息存储在分布式松散哈希表内。这里的哈希表可简单理解为是存储身份信息的数据库。
网络层和路由层 使用LibP2P可支持任意两个节点之间传输数据。
交换层 这里类似于迅雷的BIT链接,用户可通过BIT链接下载文件,或者上传文件。IPFS团队开发了Bitswap技术,用户可将文件的哈希值放在节点处,用户访问数据时可通过这一节点的哈希值,直接访问到存储信息的节点处。简单来说,节点处不存放文件,只是在节点存储哈希值,通过哈希值可直接访问文件。这种设计可节省节点的存储空间。同时,它增加了信用和帐单体系来激励节点去分享文件,用户分享的文件越多可获得更高信用分。这套设计逻辑可鼓励更多的用户将文件存放在IPFS文件系统内。
文件层和对象层 这两个层面主要负责管理IPFS上存储的数据,大多数据存储对象以默克尔树的形式保存。
默克尔树.jpg
图2 默克尔树
我们来想象树木的样子,树木扎根于地面,生长出树干、很多枝干和无数的叶子。无论树木多么庞大,所有的一切都要依赖于树根。如果把哈希值比作树叶,那么也可以找到树根,即哈希值的总密码。默克尔树就是这样的原理,所有的哈希值可以储存在介质内,只有一个总哈希值可以打开这个钱包。
哈希值可存储于节点上,这些哈希值对应着文件具体的存储位置。该节点可通过自己所对应的哈希值访问。
命名层 即使用指纹公钥进行验签,即验证所用的公钥是否与NodeId(用户的身份信息)匹配,这套设计逻辑在于验证发布对象的真实性,也就是验证发布的信息是否是用户本人发布的。
应用层 IPFS架构的具体的一切运用场景。

IPFS的重要组成部件
Mutiformats 一系列hash加密算法和自描述方式的集合,简单理解为将文件转换为哈希值的部件。
LIPP2P 以快速且节约成本的方式帮助开发者迅速建立一个可用P2P网络层。
IPLD 一个转换中间件,将现有的异构数据结构统一成一种格式,方便不同系统之间的数据交换和互操作。例如:以太坊和比特币可通过IPFS网络实现数据交换。
Filecoin 这是支撑IPFS运营的代币激励机制,filecoin可在加密货币交易所兑换为法币,即人民币、美元等。

IPFS的具体实现流程
IPFS协议的运行必须有存储数据和检索数据两部分构成,用户将数据存入网络,数据被其它用户查看才有价值。并且,IPFS以filecoin为代币激励机制,因此,IPFS网络内的矿工分为存储矿工和检索矿工。
存储数据,客户向IPFS所属的区块链网络提交存储订单,系统为客户匹配存储矿工。客户向矿工发送数据,矿工将数据存入IPFS节点。做存储矿工有条件限制,即存储矿工必须以一定的物理存储介质作为抵押品,防止矿工擅自将所有权属于本人的IPFS存储节点关闭或用作它用,导致的客户存储资料无处可放的情景。一旦客户擅自关闭物理存储介质,则存储矿工的抵押品可用作存放客户数据的物理存储介质。
检索数据,客户向IPFS所属的区块链网络提交存储订单,系统为客户匹配检索矿工。矿工为客户找到对应的数据并将结果返回给客户。
客户提交的订单是请求或提供服务的声明。订单被统一存储在订单簿内,订单簿订单集合的统一称呼。如果客户存储的数据太大,可将数据进行分段处理并将不同的数据片段保存在不同的节点。被记录数据片段流向数据表内,由数据表进行统一分配存储节点,并且在数据被检索到后,将分段的数据进行拼接。

Filecoin的经济逻辑
Filecoin是支撑整个IPFS运行的经济激励机制,这套机制充分体现了“你为我付出,我为你劳动”的市场经济特征。客户通过存储数据和查找数据向矿工支付filecoin代币,矿工为客户提供存储和检索数据的服务获得经济回报,即filecoin代币奖励。
客户与矿工对存储数据的内容和大小进行协商议价,确定价格后,双方达成交易。Filecoin用来衡量这笔数据存储和检索的经济价值有多高。
矿工的工作证明机制:
复制证明(Proof-of-Replication),矿工存储信息留下的凭证,让客户相信矿工的确存了这些信息。
时空证明(Proof-of-Spacetime),简单来说,时空证明是验证矿工的数据存储与工作时间是否匹配来确定矿工的工作是否已经完成。矿工生成连续的存储证明来验证自己在规定时间内存储数据。
工作量证明(Proof-of-Work),表明哪些数据已经被存储下来,已经被存的数据无需矿工进行二次存储。
Filecoin的工作证明机制可能面临的攻击:
女巫攻击: 恶意矿工可能通过创建多个女巫身份,假装存储了很多文件,并获取多笔存储奖励,但实际上只存储了一次。
外包攻击: 恶意矿工通过从其他存储提供商获取数据,提交比他们实际的物理存储容量更大的存储能力,以赚取更多的filecoin。
生成攻击: 恶意矿工会宣称要存储大量的数据,他们使用一些程序提交订单。订单包含的实际存储容量小于他们所宣称的存储容量。这种行为没有被发现,则矿工可获得更多的代币奖励。

IPFS文件系统在EOS.IO中的运用
EOS.IO 是一款允许任何人创建并启动智能合约的软件平台。EOS.IO类似于Windows操作系统,这是一个可以在上面随意编写区块链程序的操作系统。EOS.IO代表了区块链3.0,具备广阔的运用前景。
区块链因自身结构上的缺陷,无法具备存储大量数据的能力。但节点内的数据可以被大量运用,节点内存储的数据时100%可用的。EOS.IO同理也存在以上的优势和劣势,如同硬币的两面EOS.IO有强大的功能,但存储容量太小是制约EOS.IO发展的瓶颈。同时,EOS.IO还面临两个问题:一、区块链无法存储需要修改的文件。二、区块链分类账簿的信息复制到每个节点会产生大量的不必要的备份。
为解决这一问题,EOS.IO引入了IPFS文件系统。用户可在EOS.IO的区块内存入IPFS的文件名,即IPFS网络文件对应的哈希值。用户通过哈希值来找到与EOS.IO相关的文件。这种方式保证了EOS.IO智能合约引用了确定的且不可修改的文件,但无法保证文件的可用性。如果被存储数据的节点所有者拒绝提供服务,即文件被节点删除或文件无法找到,这种情况可能导致智能合约缺少该节点的文件,而无法执行合约。
EOS.IO引用IPFS文件系统的具体实现方式
在EOS.IO框架内设置专用的存储文件的代币TOK,用户在EOS.IO下部署文件系统的智能合约。该智能合约允许用户合约内存储的IPFS文件名指向网络内对应的IPFS节点文件。简单来说,用户向EOS.IO区块链广播消息,通过智能合约内特定的API接口将文件存放到IPFS节点,并将文件对应的哈希值保存在智能合约内。EOS.IO对上传的文件可以进行加密,加密后的数据为个人所有,其他人不能访问,即区块内存储的哈希值被加密过,其它人无从获取。
上传文件的过程,用户通过TOK区块链所属智能合约的一个API接口上传文件。区块生产者验证上传文件的大小和IPFS名称,验证过程是为了保证上传的文件信息是用户本人上传的,区块生产者完成验证后表示文件已经被接收。
寻找文件的过程,用户和其它区块生产者通过IPFS文件地址找到该文件,执行查看或复制的命令。

EOS.IO的存储结构:
流程.jpg
用户将数据上传至EOS.IO智能合约中的API接口,通过接口将数据传到至IPFS文件系统内。上传完成后,用户可将IPFS文件的生成的哈希值放回节点,以保证其它用户可通过哈希值找到这个文件。

EOS.IO内部的存储配额问题:
根据EOS.IO的约定,由EOS的全体社员进行投票,获得TOK最多的前25名的生产者有存储数据的权利,25名以后的存储商没有权利。数据存储商投票表示他们想要的存储配额,所有投票者(所有投票者是持有TOK代币的社员,他们有存储数据的需要)想要获得的存储配额的中位数是即为存储配额。区块生产者也在这套机制的激励下,提高自身的存储容量来赚取更多的TOK以获得更大的投票话语权。获取TOK的既得利益者就是25名数据存储商,他们获得较多的TOK并且能够进行投票。新的数据存储商要成为前25名中的一员,他必须通过社员投票的方式入选前25名。这个模式与EOS竞选21个超级节点类似,想要成为21个超级节点之一,必须得到社区用户的集体支持,并使用EOS进行投票!
TOK对应的存储容量永远不被被用完,原因如下:

  1. 存储容量由Bancor算法决定,在该算法下存储容量的剩余额度不会低于10%
  2. TOK的价格与存储容量此消彼长,存储容量下降,对应的TOK价格上涨。用户出于存储成本的考虑,会减少存储文件。

EOS.IO架构下的IPFS经济逻辑
EOS.IO的框架下,每年有5%的固定通货膨胀,这笔超发的是EOS自己产生的铸币税。关于EOS的经济逻辑详见Steemit论坛中的EOS经济逻辑一文,链接如下:https://steemit.com/eos/@henryli/eos 通货膨胀产生的这笔公款可用于支付IPFS系统运营的费用。简单来说,矿工的手续费用EOS公款支付,用户只管免费用就行!IPFS系统内,存储数据和检索数据所必须的所有小额支付都可以由EOS的公款统筹支付!
存储经济学:
用户存储文件后到删除文件前,这段时间内锁定对应的TOK。这种机制下,矿工可能会囤积大量的TOK ,他们会销毁一定数量的代币用于稳定市场中的代币价格,以求在未来TOK解锁后,能让TOK有较高的存储价值。(白皮书中如是说,但我认为这里存在巨大流动性隐患。矿工完成存储任务后,收到的TOK无法兑换为法币。这代表着自己付出的劳动长期取法得到回报!)
如果客户为存储文件而支付TOK的速度快于通货膨胀的速度,则会增加TOK的价值,鼓励存储数据的商户收入增加,他们会扩张存储设备的规模。换句话说,存文件越多,可获取的tok越多。如果存储需求量下降,tok价格的贬值速度超过EOS的自然通胀率,存储商户可减少存储容量以降低损失。
带宽经济学:
我们事先假设一个情景:用户上传一部私人视频,然后被数百万人观看。存储并播放这部视频需要向服务商支付一定的费用。这笔费用由谁来支付最合理?我们现在的情景是:我们上传的视频被人观看所带来的带宽费用由网站运营商支付。而网站通过打广告的方式赚取广告费,支付了带宽费用后,网站还有一定的结余。然而,我们抛开广告赚取的费用不谈,只是把播放视频的带宽看作服务,那么用户为这笔带宽产生的费用付费是最合理的。
上面讲述的案例中,用户支付带宽费用最为合理,这里也延伸出一个问题:带宽的费用非常之低,用户为带宽支付的钱是非常小额的,并且有巨量的交易笔数。这对于客户来说是一件开销很低,但支付麻烦的事。在EOS的经济逻辑下,带宽的费用由EOS的铸币税统筹支付。
用户可免费使用EOS的基础性服务,而一些高端的个性化服务则需要用户额外支付费用。这种模式类似于腾讯QQ,使用QQ的基础功能时免费的,QQ黄钻等高端功能则需要额外付费。

IPFS和P2P网络(对等网络)的区别与联系
表格.jpg

IPFS存在的问题
IPFS对于文件存储有明显的成本优势,文件的存储费用相对于中心化服务器更低,并且部分IPFS的矿工费用可由区块链项目统筹支付。但IPFS协议的运行效率有待商榷,原因如下:一、IPFS文件协议尚未大规模运用,它的运行效率有待考量。二、响应速度问题:HTTP协议下的服务器有着较快的读取和写入速度,IPFS网络中出现分段下载的情景后,网络的响应速度可能变慢。三、网络中的私人数据有效性问题:中心化服务器提供的数据有公用价值,比如:网易云音乐中的海量音乐存储在服务器内,许多用户均有使用需求。但IPFS上传的众多私人数据对于公众无言毫无意义,这些数据是否是对IPFS存储节点的资源浪费?四、IPFS文件协议能否支撑起商业级运用还有待考量,微信、淘宝网等商业应用的数据处理能力非一般的服务器能够媲美!

分析与总结
IPFS星际文件系统是一种全新的网络协议,它有可能成为价值互联网的底层协议。我们现在所熟知的网络是构建在HTTP协议框架之上,访问的网络文件几乎都是存储在中央服务器上供用户调取使用的。IPFS协议则可以将文件分散地存储在全网的任何一个节点,只要用户能提供一定的存储空间就可以为其它用户提供存储服务。我们所熟知的P2P对等网络是构建在HTTP协议框架下的,对等网络与IPFS文件协议有诸多相似的地方,两者均可实现点对点文件传输,都可以实现网络资源的全网共享。但两者有两方面的根本性区别:一、网络的底层协议不同,对等网络的底层协议依然是HTTP网络协议,IPFS则构建了一套新的网络运行协议。二、IPFS文件协议有filecoin代币作为经济奖励,鼓励用户上传文件,使用该网络;而对等网络则没有任何经济奖励,它的盈利方式与目前的所有网站的盈利方式相同,通过广告获取收入。区块链技术开启了价值互联网的大门,各类代币可与法币完成实时兑换,这意味着很多互联网项目可直接变现,无需经过复杂的投融资过程。IPFS文件协议通过filecoin的形式实现了文件传输与经济回报的有机结合,有金钱驱动的网络必定会吸引众多用户参与进来。IPFS协议目前尚未大规模运用,这是一项有着光明前景,但尚未成熟的技术!

Sort:  

Go here https://steemit.com/@a-a-a to get your post resteemed to over 72,000 followers.

Congratulations @henryli! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 1 year!

You can view your badges on your Steem Board and compare to others on the Steem Ranking

Do not miss the last post from @steemitboard:

3 years on Steem - The distribution of commemorative badges has begun!
Happy Birthday! The Steem blockchain is running for 3 years.
Vote for @Steemitboard as a witness to get one more award and increased upvotes!