站在Web3.0 理解IPFS是什么
尽管网络上,已经有不少文章讨论IPFS,不过真正讲明白IPFS想做什么的很少,文本尝试站在未来Web3.0的高度来看看IPFS究竟用来解决什么问题。
DApp 的缺陷
对区块链有所了解的同学,知道区块链维护的是一个中立的(去中心)、共同信任、难以篡改的数据库、智能合约创造的是一个完全透明(不被干扰)的运行规则,因此可以解决信任问题。
一切看起来很美好,我们可以开发去中心化应用DApp 解决信任问题,由此也确实产生了很多的博彩类DApp游戏。
不熟悉DApp的同学可以看我另一篇文章程序员如何切入区块链去中心化应用开发.
细心的同学,也许会发现一个问题,虽然DApp的后台逻辑(智能合约)是在无中心的节点上运行的透明的规则,但是我们看到内容却来自于一台无信任的中心化服务器。
这是由当前互联网规则-超文本媒体传输协议(HTTP)决定的,简单来讲,在这个协议下,当我们在浏览器输入一个网址时,总是会先找到这个网址(域名)对应的服务器IP地址,然后请求服务器,并把服务器的响应显示在浏览器。
这种方式下文件能否访问,完全取决于服务器,服务器也许会关闭、内容获取被篡改或删除,对用户都无法保证。我自己看到好内容把网页收藏的习惯,经常会出现过一段时间再去访问的时候,页面已经不存在了。
IPFS想要做什么
IPFS - InterPlanetary File System 星际文件系统,多数人谈到IPFS都只讲到它的去中心化存储,其实IPFS想要做的远不只存储,其目标是取代HTTP,成为Web3.0时代的基础协议。我们从其官网对IPFS的定义就可以看到其雄心。
尽管Web3.0目前没有明确定义,从2014年以太坊联合创始人Gavin Wood提出分布式网络的Web3.0概念开始,业界普遍认为Web3.0 特征应该是 分布式、可信任。
在官网的有这样两个描述:
IPFS is the Distributed Web
A peer-to-peer hypermedia protocol to make the web faster, safer, and more open.IPFS aims to replace HTTP and build a better web for all of us.
翻译过来就是: 1. IPFS是分布式Web,是点对点的超媒体协议,以构建更快、更安全、更开放的网络。 2. IPFS旨在取代HTTP,为我们构建一个更好的web。
当然,要完全取代HTTP还有一段路要走,最大的坎是怎样让主流的浏览器支持IPFS协议,现在是通过HTTP网关的方式访问IPFS网上面存在的文件。
未来IPFS能取代Http的话?就是通过网络浏览器里直接输入 ipfs://文件hash 访问内容,目前这种方式访问IPFS 必须依靠浏览器插件ipfs 伴侣, 并且这个插件的使用不广泛。
注意,这里提到的浏览器,只是沿用这个名词,Web3.0的浏览器也许不叫浏览器, 它更可能是数字钱包和浏览器的组合体,现在浏览器上发起交易也同样需要依靠钱包插件进行签名。所以这样一个形态的产品也是大家的机会,这是一个全新的超大入口级产品。
即未来期望的访问方式是这样的:
ipfs://Qme2qNy61yLj9hzDm4VN6HDEkCmksycgSEM33k4eHCgaVu
而现在通过网关访问是这样的:
http://127.0.0.1:8080/ipfs/Qme2qNy61yLj9hzDm4VN6HDEkCmksycgSEM33k4eHCgaVu
https://ipfs.io/ipfs/Qme2qNy61yLj9hzDm4VN6HDEkCmksycgSEM33k4eHCgaVu
IPFS是怎么做的
IPFS是一种内容可寻址、版本化、点对点超媒体的分布式存储、传输协议。
我们知道在现在的网络服务里,内容是基于位置(IP)寻址的,就是在查找内容的时候,需要先找到内容所在的服务器(根据IP),然后再在服务器上找对应的内容。
而在IPFS的网络里,是根据内容寻址,每一个上传到IPFS上面去的文件、文件夹,都是以Qm为开头字母的哈希值,无需知道文件存储在哪里,通过哈希值就能够找到这个文件,这种方式叫内容寻址。
工作原理
在IPFS系统中,内容会分块存放(如果内容很小就会直接存在DHT中),并分散存储在IPFS网络中的节点上(不过目前的IPFS实现,一个节点会完整保存内容的所有区块)。系统会给内容的每一个块计算哈希值,然后把所有块的哈希值拼凑起来,再计算一次哈希值,从而得到最终的哈希值。同时每个节点会维护一张DHT(分布式哈希表),包含数据块与目标节点的映射关系。
在IPFS中是通过哈希去请求文件的,它就会使用这个分布式哈希表找到文件所在的节点,取回文件根据哈希重新组合文件(同样也会验证文件)。
IPFS的特点
根据前面的原理,我们可以推倒出IPFS的几个特点:
当我们知道一个文件的哈希值之后,可以确保文件不被修改, 即可以确保访问的文件是没有被篡改的。因为根据哈希的特点,哪怕源文件有一丁点的更改,对应的哈希值也会完全不同。
(理论上) 如果IPFS得以普及,节点数达到一定规模,内容将永久保存,就算部分节点离线,也不会影响文件的读取,不像现在的收藏会失效。
由于IPFS是一个统一的网络,只要文件在网络中被存储过,除了必要的冗余备份,文件不会被重复存储,对比现有互联网,信息孤岛,各中心间不共享数据,数据不的不重复存储,IPFS一定意义上节约了空间,使得整个网络带宽消耗更低,网络更加高效。
相对于中心化存储的容易遭受DDOS攻击,IPFS采用分布式存储网络,文件被存储在不同的网络节点,天然避免了DDOS攻击,同时一个文件可以同时从多个节点同时下载,通信的效率也会更高。
IPNS
在IPFS中,一个文件的哈希值完全取决于其内容,修改它的内容,其相应的Hash值也会发生改变。这样有一个优点是保证文件的不可篡改,提高数据的安全性。
但同时我们在开发应用(如网站)时,经常需要更新内容发布新版本,如果每次都让用户每次在浏览器中输入不同的IPFS地址来访问更新后内容的网页,这个体验肯定是无法接受的。
IPFS提供了一个解决方案IPNS(Inter-Planetary Naming System),他提供了一个被私钥限定的IPNS哈希ID(通常是PeerID),其用来指向具体IPFS文件哈希,当有新的内容更新时,就可以更新IPNS哈希ID的指向。
为了方便大家理解,做一个类比,和DNS类似, DNS记录了域名指向的IP地址, 如果服务器更改,我们可以更改DNS域名指向,保证域名指向最新的服务器。
IPNS则是用一个哈希ID指向一个真实内容文件的Hash,文件更新这更改哈希ID的指向,当然更新指向需要有哈希ID对应的私钥。
通过IPNS访问文件的方式如下:
利用插件访问:ipns://QmYM36s4ut2TiufVvVUABSVWmx8VvmDU7xKUiVeswBuTva
利用网关访问: http://127.0.0.1:8080/ipns/QmYM36s4ut2TiufVvVUABSVWmx8VvmDU7xKUiVeswBuTva
IPNS同样兼容DNS,使用DNS TXT记录域名对应的IPNS哈希ID,就可以域名来替换IPNS哈希ID来进行访问。从而实现更容易读写和记忆。
例如使用以下方式简化访问:
ipns://ipfs.io
https://ipfs.io/ipns/ipfs.io/
IPFS/IPNS 如果使用,将在后面的文章进一步介绍。
小结
IPFS是一项非常激动人心的技术,尽管它仍在发展的早期(区块链也是),还有很多问题需要我们一起解决,如NAT穿透问题,浏览器支持问题,内容存储激励问题,存储数据安全与隐私保护问题。
但是通过 IPFS + 区块链将真正创建Web3.0时代的应用,这是一个完全可信的、自运转(不停机)的应用,它可以做什么我不知道,我对未来充满期待。
欢迎来知识星球提问,星球内已经聚集了300多位区块链技术爱好者。
深入浅出区块链 - 系统学习区块链,打造最好的区块链技术博客。
站在Web3.0 理解IPFS是什么的更多相关文章
- Webx.0-Web3.0:Web3.0
ylbtech-Webx.0-Web3.0:Web3.0 Web3.0只是由业内人员制造出来的概念词语,最常见的解释是,网站内的信息可以直接和其他网站相关信息进行交互,能通过第三方信息平台同时对多家网 ...
- Web3.0应用程序架构
Web 3.0 应用程序(或"DApps")的架构与 Web 2.0 应用程序完全不同. 以博客园为例,这是一个简洁的博客网站,用户可以发布自己的内容并可以评论他人的内容进行互动. ...
- 人物传记STEPHEN LITAN:去中心化存储是Web3.0生态重要组成
近期,NGK.IO的开发团队首席技术官STEPHEN LITAN分享了自己对去中心化储存的观点,以下为分享内容. 目前的存储方式主要是集中式存储,随着数据规模和复杂度的迅速增加,集中存储的数据对于系统 ...
- 简述Web3.0
什么是 Web 3.0 以及为什么要关心它. 为了更好地理解什么是 Web 3.0,我们需要知道什么是 Web 1.0 和 2.0. 为了不让你厌烦,这里简单的解释一下: Web 1.0 -- 信息仅 ...
- 青山不遮,毕竟东流,集成Web3.0身份钱包MetaMask以太坊一键登录(Tornado6+Vue.js3)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_213 上世纪九十年代,海湾战争的时候,一位美军军官担心他们的五角大楼会被敌人的一枚导弹干掉,从而导致在全球的美军基地处于瘫痪状态. ...
- web3.0、比特币、区块链、元宇宙,以及那些待收割的韭菜们!
前几天看到周星驰在社交账号上招聘web3.0的人才,感觉有必要说说web3.0,当然不是基于技术层面,而是从另一个维度说说web3.0以及其它相关的概念,从而做到如何反欺诈,如何避免被资本割韭菜.想到 ...
- 如何使用maven建一个web3.0的项目
使用eclipse手动建一个maven的web project可能会有版本不合适的情况,例如使用spring的websocket需要web3.0什么的,不全面的修改可能会出现各种红叉,甚是苦恼.我从我 ...
- Web1.0、Web2.0、Web3.0的主要区别
Web1.0:以静态.单向阅读为主,网站内信息可以直接和其他网站信息进行交互,能通过第三方信息平台同时对多家网站信息进行整合使用. Web2.0:以分享为特征的实时网络,用户在互联网上拥有自己的数据, ...
- [转]Web3.0时代,企业知识管理新趋势
[转自http://www.amt.com.cn/html/ManageFront/AMTPoint0/2014/0716/1370.html] Web3.0时代,企业知识管理新趋势 2014-07- ...
随机推荐
- PHP----------PHP自身的性能优化注意事项
1.如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍. 2.$row[’id’] 的速度是$row[id]的7倍. 3.echo 比 print 快,并且使用ech ...
- 微信小程序之回调函数
在微信小程序中众所周知在js里面得方法都是异步执行,我最近再做项目得时候也遇到了这个问题,再方法里面调用另一个方法里面的接口数据,第一次是调取不到的, 因为两个方法是同时开始执行得,所以怎么都取不到值 ...
- fork()相关的源码解析
fork()的真正执行采用的是do_fork()函数,所以下文将从do_fork()函数对fork()进行源码解析.下图是do_fork()的源码函数设计: 从上图我们可以看到do_fork()涉及到 ...
- codeforces-4
这题使用到了类似于双数据 Maximal Continuous #include<iostream> #include<algorithm> #include<stdio ...
- CentOS 7 安装配置KVM 通过KVM安装CentOS系统
搭建环境 : CentOS 7 [root@KVM ~]# systemctl stop firewalld [root@KVM ~]# systemctl disable firewalld [ro ...
- Mysql安装、设置密码、编码
一.MySQL介绍 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是 ...
- shell脚本的一些常用操作
字符串长度: ${#string}可获取string字符串的长度,如下: jenkins@soft1pc:~$ str="who are you"jenkins@soft1pc:~ ...
- numpy, matplotlib库学习笔记
Numpy库学习笔记: 1.array() 创建数组或者转化数组 例如,把列表转化为数组 >>>Np.array([1,2,3,4,5]) Array([1,2,3,4,5]) ...
- CEF JS实现获取剪贴板图片的DataURL
转载:https://www.deanhan.cn/js-paste-upload.html 转载:https://segmentfault.com/a/1190000002915597 转载:htt ...
- QString使用正则表达式快速去空格
//QString去掉空格 QString str; str.remove(QRegExp("\\s"));