IPFS
名词解析
IPFS 诞生于2015年、2017年8月,IPFS 的激励层filecoin,公开众筹在很短时间内,就募集了超过2.57亿美金,相当于接近20个亿人民币的投资!IPFS 中文名字叫“星际文件系统”,它是一种全新的超媒体文本传输协议,可以把它理解为一种支持分布式存储的网站。相对应的就是现在大家所熟悉的以 http 开头的中心化存储网站。
IPFS
IPFS 诞生于2015年、2017年8月,IPFS 的激励层filecoin,公开众筹在很短时间内,就募集了超过2.57亿美金,相当于接近20个亿人民币的投资!所以它引起了全世界投资人的高度关注!与此同时它打破纪录,创造了当年全球ICO的奇迹,当之无愧的成为了一个全球瞩目堪比当年以太坊的明星项目!
IPFS 中文名字叫“星际文件系统”,它是一种全新的超媒体文本传输协议,可以把它理解为一种支持分布式存储的网站。相对应的就是现在大家所熟悉的以 http 开头的中心化存储网站。这跟我们平时使用的百度云,阿里云这些网站有什么不一样呢?各位不妨思考一下,你存储在U盘,网盘上的这些数据 是绝对的安全吗?答案是否定的!它会丢失,甚至会被和谐掉,对吗?比如从前的金山网盘,360网盘,官方通道已经关闭了,文件需要大量的转移,时间精力都浪费了,另外像百度网盘,免费用户使用的空间也是有限的,如果你想增加储存容量就必须得充值,而且安全性也是有待考究的。
而 IPFS 的网络存储文件,使用的是去中心化分片加密存储技术,把文件分割成了多个片段,存储在网络的各个节点上,而这些节点就是我们使用的电脑,当你下载文件的时候,或者想要打开文件的时候,IPFS 网络会自动把文件还原,给你使用、供你下载,可以防止某个人或者某个机构控制你的数据,也可以防止被黑客攻击,这样就可以保护我们的存储数据,不会被随意篡改、删除了!此外,使用IPFS 网络进行文件存储、文件下载,在速度方面 可是相当的快!IPFS 最大的神奇之处呢,是彻底告别了传统的HTTP协议常见的卡顿和404错误。
IPFS的身体架构
IPFS至少有八层子协议栈,从上至下为身份、网络、路由、交换、对象、文件、命名、应用。每个协议栈各司其职,又互相搭配。
IPFS技术构架
身份层和路由层可以一起解释。对等节点身份信息的生成以及路由规则是通过Kademlia协议生成制定。KAD协议实质是构建了一个分布式松散Hash表,简称DHT,每个加入这个DHT网络的人都要生成自己的身份信息,然后才能通过这个身份信息去负责存储这个网络里的资源信息和其他成员的联系信息。如同微信名片分享,在无法通过直接搜索微信号的情况下,如果你要找一个人,可以通过有这个人联系方式的朋友分享名片来建立联系。网络层比较核心,使用的LibP2P可以支持任意传输层协议。NAT技术能让内网中的设备共用同一个外网IP,我们都体验过的家庭路由器就是这个原理。
交换层是类似迅雷这样的BT工具。迅雷其实是模拟了P2P网络,并创建中心服务器,当服务器登记用户请求资源时,让请求同样资源的用户形成一个小集群swarm,在这里分享数据。这种方式有弊端,一位服务器是由迅雷统一维护,如果出现了故障、宕机时,下载操作无法进行。
中心化服务还可以限制一些下载请求,人们发明了一种更聪明的方式就是BitTorrent,让每一个种子节点所要存储的数据,通过哈希表存储在里面,BT工具相对不太受监管,服务更加稳定。
IPFS团队把BitTorrent进行了创新,叫作Bitswap。它增加了信用和帐单体系来激励节点去分享,我推断FileCoin有很大概率是基于Bitswap,用户在Bitswap里增加数据会增加信用分,分享得越多信用分越高。如果用户只去检索数据而不存数据,信用分会越来越低,其它节点会在嵌入连接时优先选择信用分高的。
这一设计可以解决女巫攻击,信用分不可能靠机器刷去提高,一直刷检索请求,信用分越刷越低。请求次数和存储量的变量之间有一个比较精妙的算法,类似一个抛物线,前期可以容忍很多东西,达到一定次数后不再信任。
对象层和文件层适合结合来谈,它们管理的是IPFS上80%的数据结构,大部分数据对象都是以MerkleDag的结构存在,这为内容寻址和去重提供了便利。文件层是一个新的数据结构,和DAG并列,采用Git一样的数据结构来支持版本快照。
对象层 文件层
命名层具有自我验证的特性(当其他用户获取该对象时,使用指纹公钥进行验签,即验证所用的公钥是否与NodeId匹配,这验证了用户发布对象的真实性,同时也获取到了可变状态)。并且加入了IPNS这个巧妙的设计来使得加密后的DAG对象名可定义,增强可阅读性。
最后是应用层,IPFS核心价值就在于上面运行的应用程序,我们可以利用它类似CDN的功能,在成本很低的带宽下,去获得想要的数据,从而提升整个应用程序的效率。
新的技术取代老的技术,无非就两点:第一,能提高系统效率;第二,能够降低系统成本。IPFS通过以上八层协议把这两点都做到了,但这只是它精妙设计的一方面,另一方面还体现在协议与模块的完美对应。
IPFS族谱关系
IPFS的团队在开发时,采用高度模块集成化的方式,像搭积木一样去开发整个项目。协议实验室团队2015年创立,到17年的时间里都在做IPLD、LibP2P、Multiformats这三个模块的开发,它们服务于IPFS底层。
从IPFS族谱关系图(纵向数据流图)上看,你能很直观地发现,看似复杂的协议构架,其实每一层的实现都绑定在对应的模块下,合理有序。
IPFS族谱关系图
Mutiformats是一系列hash加密算法和自描述方式(从值上就可以知道值是如何生成)的集合,它具有SHA1\SHA256 \SHA512\Blake3B等6种主流的加密方式,用以加密和描述nodeID以及指纹数据的生成。
Mutiformats
libp2p是一个模块化的、点到点网络的库。它具有强大的浏览器支持,能够完全在浏览器上,或通过WebSockets和WebRTC等协议工作,被认为是IPFS核心中的核心。它面对Quic和Tor传输协议、GO、JavaScript和Rust语言、Polkadot等各式各样的传输层协议以及复杂的网络设备,都可以帮助开发者迅速建立一个可用P2P网络层,快速且节约成本,这也是为什么IPFS技术被众多区块链项目青睐的缘由。
IPLD转换中间件
IPLD其实是一个转换中间件,将现有的异构数据结构统一成一种格式,方便不同系统之间的数据交换和互操作。现在IPLD支持的数据结构,是比特币、以太坊的区块数据,也支持IPFS和IPLD。这也是IPFS为什么受到区块链系统欢迎的原因之二,它的IPLD中间件可以把不同的区块结构统一成一个标准进行传递,为开发者提供了成功性比较高的标准,不用担心性能、稳定和bug。
IPFS合理巧妙地应用了这几个模块的功能,集成为一种容器化的应用程序,运行在独立节点上,以Web服务的形式,供大家使用访问。如此复杂却又如此设计巧妙,项目的完整落地势必推动互联网的新一代革命进程,尽请期待。