什么是IPFS
首先引用一下官方介绍:
IPFS powers the Distributed Web —— A peer-to-peer hypermedia protocol designed to make the web faster, safer, and more open.
IPFS is a distributed system for storing and accessing files, websites,applications, and data.
可以看出来IPFS具有分布式系统和P2P网络的特性,但是它该怎么去理解呢?
IPFS是一个协议,可以类比http或者https来理解。比如我现在想要获取维基百科上关于火星的介绍,如果使用http协议,那么就需要知道这个页面的URL,https://en.wikipedia.org/wiki/Mars,在浏览器地址栏输入URL回车,浏览器就会向维基百科的服务器发出请求,如果服务器正常响应,那么我就获得了该页面。如果使用ipfs协议,那么就需要知道该页面的内容标识符即cid,然后在浏览器的地址栏输入ipfs://cid.(目前这个方式还没实现,因为目前浏览器不支持ipfs协议,但是可以通过官方网关来访问https://ipfs.io/ipfs/cid). 大家都知道网页本质上是一个html文档,这里的cid就是网页内容经过哈希函数加密生成的一个长度固定的字符串。那么为什么要这样做?这么做有什么好处?假设北京xx大学的两名学生A和B,都想要火星的维基百科介绍页面。用http协议的话,A和B分别要访问一次维基百科服务器。而用ipfs协议的话,那么当A已经获得了该页面后,B想要该页面时,就会先问谁有这个页面,然后A听到了就会告诉B:“我有”,然后发送给B。这个过程只有A访问了一次维基百科服务器,而B是从A那里获得的页面,不需要再访问维基百科。因为A、B距离近,所以这一方式加快了B获取页面的速度。当维基百科的服务器被很多的人在同一时间访问时,服务器负载较大,用户的请求可能会迟迟得不到响应;再者,如果服务器出现问题,比如需要改进或者被黑客攻击,直接会造成用户无法访问的情况,这就是中心化服务器的弊端。IPFS是分布式的系统,很大程度上避免了这种问题。IPFS节点只需要提供文件的cid,而不关心是哪个节点给我的,因为根据哈希加密的不可篡改性,只要cid不变,文件就不变,这种方式就叫做基于内容寻址(content addressing)。
IPFS是一个P2P网络,可以类比BitTorrent来理解。BT用户想要下载某个资源,就需要先下载一个种子文件,种子文件里面包含一个或多个tracker地址。tracker就是一个目录服务器,它会告诉用户哪些人同时也在下载该资源,返回的是这些人的IP信息。然后用户就尝试与这些IP建立链接,从他们那里获取资源。这些“志同道合”的BT用户形成一个集群,每个用户获取资源的同时也给其他用户提供着资源,所以加入的用户越多,资源下载速度越快。BitTorren虽然使用了点对点技术,但是并不是完全去中心化的,因为它存在tracker。假如所有的tracker都发生故障了,那么BT用户就不知道从哪里获取资源了。IPFS是完全去中心化的,是没有目录服务器的,那它是怎么找到拥有某种特定资源的节点呢?为解决这个问题,IPFS使用了分布式哈希表技术(DHT)。哈希表将文件名和文件存储地址形成一种映射,以键值对<key,value>的形式存储在表项中。在IPFS中,key代表文件cid,value代表拥有该文件的节点信息,如peerid,ip等。IPFS中的每个节点都只负责维护一小部分的DHT,所有节点加起来就组成了一个庞大的DHT。当一个IPFS节点想要某个资源时,就会去询问邻居节点谁有这个资源,邻居节点再去询问他的邻居节点…如此不断询问,直到有人知道谁有这个资源,就把目标节点告诉最初发起查询的节点,然后发起请求的节点与目标节点建立链接,进行p2p传输。
补充一点:现在很多成熟的BT软件也都使用了DHT技术。
文中存在不严谨的地方,欢迎大家批评指正。
- 什么是IPFS Pinning?
- IPFS可以用于什么?
- 【区块链】利用IPFS构建自己的去中心化分布式系统
- 【转载】当不了中国锦鲤?没关系,我们有IPFS!
- 一步步学习微软InfoPath2010和SP2010--第十二章节--管理和监控InfoPath Form Services(IPFS)(2)--IPFS性能因素
- 如何在IPFS里面上传一张图片
- IPFS承载着区块链破茧成蝶的希望
- 手游ip是什么意思
- 什么是高精准IP地址定位——IP问问
- DS, ES, SS, DI, SI, BP, SP, IP, FS 寄存器
- 什么是FS 22000认证?
- 20170408_OSI参考模型与TCP/IP模型与输入URL地址按下enter键以后发生了什么?
- 什么是双线双IP和双线单IP
- 批量添加ip后没有生效出现了什么问题?
- 【IPFS + 区块链 系列】 入门篇 - IPFS + Ethereum (上篇)-js-ipfs-api
- DS, ES, SS, DI, SI, BP, SP, IP, FS 寄存器
- 【IPFS】Windows搭建IPFS服务
- http://flash.chinaren.com/ip/id.php参数传递的是什么?
- 本地连接 是什么意思?它有IP吗?255.255.255.0是什么
- EIGRP-FS的意义是什么?