IPFS系统与HTTP协议有何关系?

qq123456 6月前 293


  我们平时上网时,最熟悉的莫过于网址里的“http://”字样,其实HTTP是万维网 (WWW: World Wide Web)服务器传输超文本到本地浏览器的传送协议。协议全称是Hyper Text Transfer Protocol,即超文本传输协议。

  万维网如何利用HTTP工作呢?这又涉及到TCP/IP通信协议。简单来说,假设用户A在电脑上操作将文件上传至浏览器,而用户B需要从浏览器下载这个文件,那么这之间会经历一个过程。首先TCP程序会把A要发送的文件分解成很多数据,然后压缩成多个压缩包。这些压缩包又统统被装进一个IP里通过URL[ URL, 全称是Uniform Resource Locator, 中文叫统一资源定位符,是互联网上用来标识某一处资源的地址。向HTTP服务端即WEB服务器发送请求。Web服务器根据接收到的请求后,向客户端发送响应信息,于是A的文件上传成功。

  而用户B下载这个文件时,需要输入IP地址或者域名,好让电脑知道去哪里找到对应信息(基于位置的寻址Location based addressing)。之后电脑上会向WEB服务器发送请求,TCP会将发下载的压缩后的数据按序还原。如果接收TCP发现部分文件受损,会请求再发送一次。这样的话,就会有以下一些问题:

  1) 在互联网中,所有数据都会被存储在一个中心服务器上。无论用户是上传/下载文件或者是浏览网页,都需要一次一次从服务器上获取资料。一旦服务器出现故障、被限制或是被攻击,就会出现文件丢失或者网页无法打开的情况(错误404)。

  2) 基于位置的寻址方式也存在不确定性。比如,一旦IP被删,或者服务器关闭,那么用户将无法下载该文件。

  3) 如果这个文件是很多人都需要的,那么每个人都得去下载才能使用,造成很大的存储空间浪费问题。

  所以互联网虽然是四通八达又涵盖广泛的工具,但是也不可避免的有其局限性。

  IPFS在构建信息交换的桥梁这一点上,与互联网很相像,不同的是IPFS是去中心化的。也就是说IPFS没有一个中心服务器,所以不存在信息丢失或者被篡改的问题。并且IPFS可以实现文件共享,从而节省存储空间。

  二、IPFS的极简主义

  2014年5月,墨西哥小哥Juan Benet与他的几个斯坦福大学同学一起发明了IPFS。在创办IPFS之前,Juan Benet是典型的国外常春藤学生极客,有一个开挂般的人生。他是斯坦福大学的本科和硕士毕业,在斯坦福读硕士的期间就参与创立了Loki studios,担任联合创始人和CTO,这是一家手游公司,后来被雅虎收购。2011年入驻斯坦福学生创业孵化中心StartX EIR,2012年,毕业后创办了Athena,这是一个做了一年多的时间后,于2014年5月份创办Protocal Labs。

  Protocal Labs刚以创立就得以加入美国硅谷顶级孵化器Y-Combinator,IPFS是他们做的第一个产品。Protocol Labs 在创建IPFS的时候给它取名为“InterPlanetary File System(星际文件传输)”也是有深刻含义的。Protocol Labs希望构建一个点对点的分布式文件系统,通过底层协议,让全世界所有人都能够轻松从IPFS系统上提取文件,且不受防火墙的影响。甚至如果科技发展到一定程度,需要进行星球与星球信息传输时,IPFS也可以提供快速存储文件的服务。

  1.存储

  在IPFS中,信息可以存储进IPFS系统中的块(block)里,这些块可以存储至多256kb的数据,它们还可以链接其他IPFS块。也就是说,存储小于256kb的文件时,只需将这个文件放进一个块内就可以了。而大于256kb的文件会被分成多个256kb然后放进块中,之后IPFS将创建一个空块,该块将链接到文件的所有其他部分。这个空块就类似于一个大信封,里面会涵盖整个文件的所有部分。

  系统会给同一个文件的每一个块计算一次哈希值a,所有块的哈希值a计算完毕之后,会将所有的哈希值a拼凑成一个数组b,再计算一次哈希值,从而得到最终的哈希值c。最后把最终的哈希值c和原文件捆绑起来,组成一个对象,从而形成一个索引结构d。把块和最终的索引结构d上传至IPFS节点,文件便同步到网络了。

  此外,还有一种小于1kb的小文件,如果这些小文件也单独放进一个块里的话,也会造成一定的浪费。于是,IPFS把小于1kb的数据内容直接和哈希索引放在一起上传给IPFS节点,不会再额外的占用一个块。

  可见IPFS的创作理念,是尽可能少的使用存储空间,尽量分散的存储文件。另外,对于相同的文件,IPFS只创建一个文件夹,系统也会自动删除重复的文件,并修改的版本历史记录,这样可以大大节省存储空间,保证整个系统的运行速度,并保证存储文件的安全,和使用的便捷。

  2.读取

  同样作为信息价值交换的基础,用户在IPFS上传或者使用文件时,不再是基于位置的寻址(Location based addressing),而是基于内容的寻址(Content based addressing)。也就是把“去哪找信息”的指令换成“想找什么内容”的指令。

  在互联网内,下载文件或者浏览信息需要一个IP地址或者域名,而在IPFS内,每个文件都有自己的哈希值,并且一个哈希值只对应一个文件。不存在一个文件有多个哈希值,或者多个哈希值对应同一个文件的问题。因而,用户只需在IPFS内输入需要文件的哈希值,系统就会出现对应的文件。这些文件是分布存储的,所以只要有一个用户有对应的文件,就算部分节点罢工或者不在线,也不会影响文件的读取。

  具体在IPFS系统种下载文件时,首先,需要矿工根据最终哈希数值搜索该哈希的索引结构,并下载下来。然后,用户就可以根据哈希索引搜索到文件所在的节点位置。用户将节点上的块下载下来之后,IPFS将根据哈希数组的顺序,把文件重新组合出来,用户就可以使用了。

  可以看出,IPFS将文件细分,使上传略显复杂,其目的是使用户在下载时更加便捷。毕竟,小文件的下载比大文件来得更加简单方便。

最新回复 (0)
返回