您的位置:首页 > 其它

什么是IPFS

2020-06-08 04:41 726 查看

首先引用一下官方介绍:

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技术。

文中存在不严谨的地方,欢迎大家批评指正。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: