IPFS系列01-IPFS 前世今生
从今天开始我们聊一聊最近一直比较热门的 IPFS, 又叫星际文件系统(InterPlanetary File System), 通过这篇文章你会对 IPFS 的定义和整体架构有个初步的完整的认识。
# 1. IPFS 它是什么?
关于 IPFS 的理解,网上众说纷纭,很多人说它是区块链项目,也有人说它是分布式文件系统,还有人说它是矿机...
这里我们先抛开那些概念,首先我们看看IPFS官网(https://ipfs.io)对它的描述:
A peer-to-peer hypermedia protocol, to make the web faster, safer, and more open.
翻译过来是:一个点对点的超媒体协议,使得互联网更加快速,更加安全,更加开放.
提取一下句子的主谓宾, 你就能得到清晰,简明的定义: IPFS 是一个协议
这样理解起来很简单,但是有点抽象,根据信息论,要想消除一个事物的不确定性,减少信息熵,唯一的目的就是引入更多的信息,所以我们把定语还原:
IPFS 是一个 点对点 的 超媒体 协议。
# 2. IPFS 它要干什么?
这个我们还是从 IPFS 官网寻找答案:
IPFS aims to replace HTTP and build a better web for all of us.
这样看来 IPFS 协议诞生的目的是为了干掉 HTTP 协议,HTTP 协议出现到今天已经过去了半个多世纪,确实遇到一些瓶颈,并且 很少有一些设计能够增强整个 HTTP 网络或者为它带来新的功能。IPFS 的目标是就是取代 HTTP,重新建立一个完全去中心化,没有防火墙,没有政府监管,没有监控的 新的互联网世界。
# 3. IPFS VS HTTP
首先Http 是一种客户端-服务器的中心化访问模式,IPFS 是完全去中心化. http 是基于地址(主机ip)定位资源的,IPFS 是通过内容地址(Hash)定位资源 (具体的资源访问方式我们会在后面文章专门阐述)。
# 3.1 存储和访问
HTTP 是整文件存储,而 IPFS 是将文件切分成多个 chunk(文件碎片) 分散存储到多个节点,然后通过文件校验机制获取完整文件,这样使得文件的存储和访问更加高效 尤其是对于大文件来说,IPFS 的优势更加明显. 再者,在HTTP的文件系统中,存在大量的重复文件,而 IPFS 通过将文件切片之后,同一个切片只会保存一份, 大大提高文件碎片的重用性,节省存储空间。
# 3.2 传输
IPFS 传输高效,节约带宽资源,IPFS地址不是指的位置,而是直接指向资源,并确保这些数据都是来自最近的资源。 IPFS也会自动选择离你距离最近,带宽最流畅,存储速度最快,最可靠的节点来帮你存储数据,虽然你依然可以使用 HTTP + CDN 来使得服务器更靠近你, 但即使这样,可能最近的服务器还是离你有几百公里远,而且 CDN 的使用成本过高,只有少数大的互联网公司才用的起。
# 3.3 可靠性和持久性
HTTP 的可靠性就不用说了,你每天打开的那些 404 页面已经足够说明问题了。至于持久性,研究表明,现在一个网页的平均寿命是100天。人们每天都在删除历史数据。 IPFS 将会采用和Git类似的机制来记录文件的修改,保留多个数据版本,而不是每次修改后拷贝复制整个文件,并使用梅克尔树(Merkle DAG)来验证文件的完整性。 随着IPFS的缓存系统到位,默认情况下,很多可定期查看的内容完全可以脱机使用。
# 3.4 抵御DDoS攻击
HTTP 服务几乎是没有办法抵御攻击的,必须依赖硬件防火墙这些网络设备。因此一旦有人发起了 DDoS 攻击,将会大大降低 HTTP 服务的可用性。而 IPFS 是天然抗 DDoS 攻击的,因为发动 DDoS 攻击的前提是你必须先知道文件存储在那台服务器上,而 IPFS 的文件是分散存储到很多个节点上,这样就使得你无法定位你要攻击的 节点。
下面用个简单的表格来展示 IPFS 和 HTTP 的现状对比
VS | HTTP | IPFS |
---|---|---|
存储 | 存在大量的冗余数据 | 切分成 chunk 可去重,节省空间 |
带宽 | 需要大量的带宽资源 | 需要的带宽资源少,节省带宽 |
可靠性 | 容易丢失 | 可以保留多个数据版本 |
开放程度 | 中心化,掌握在少数机构手中(IBM,亚马逊,阿里云等服务器运营商) | 完全去中心化,更开放 |
# 4. IPFS 整体架构
作为一个分布式的文件系统,IPFS 提供了一个支持部署和写入的平台,同时能够支持大文件的分发和版本管理;为了达到上述的目的, IPFS 协议被分成如下的几个子协议:(本次只是对各个协议做个简单的介绍,后期我专门对每个子协议做详细的介绍)
Identities(身份认证) | 在 IPFS 网络中,所有的节点都通过唯一的 NodeId 进行标识,为了对抗女巫攻击(恶意创建多个节点),IPFS 内置了一个轻量级的 POW算法来生成节点 ID. NetWork(网络) | IPFS 可以使用任意的网络进行通信,它并没有假设自己一定运行在 IP 协议上,而是通过 multiaddr 的格式来表示目标地址和使用的协议,以此来兼容和扩展未来可能出现的其他网络协议。 Route(路由) | IPFS 路由使用的是 DHT(分布式Hash表), 同时采用了 IPNS 来解析路由记录。 Exchange(数据交换)| 在 IPFS 中,数据的分发和交换使用 BitSwap 协议,BitSwap 负责两件事情:向其他节点请求需要的 Block 以及为其他节点提供 Block, 对应使用的是, 这里借鉴的是 BitTorrent 技术, MerkleDAG(文件存储)| 这时 IPFS 文件系统的核心,是 IPFS 团队在 Git 文件系统的基础上进行了改进后的文件存储数据结构 Naming(命名) | IPFS 使用了自我认证认文件系统-SFS,并在其基础上发明了IPNS,解决了 MerkleDAG 易变的命名的问题。 Application(应用)|用户可以在 IPFS 基础上构建应用
# 5. 总结
本文对 IPFS 做了一整体的介绍,旨在让大家对 IPFS 有个整体的印象,它是一个点对点的超媒体协议,以及大概讲述了它是如何解决 HTTP 当前的一些痛点的, 后面会写系列文章对 IPFS 的各个子协议做专门的介绍.
本站博文如非注明转载则均属作者原创文章,引用或转载无需申请版权或者注明出处,如需联系作者请加微信: geekmaster01