http://www.xiaoyenzi.com

IPFS源码解读

  最近有人捅了马蜂窝,整个互联网圈子里,一时间热闹无比。数据造假与版权侵犯让相当一部分人咬牙切齿,又无可奈何。更可恨又无奈的是,看着关注度与热度的不断升级,相关方立马整理服务器,清楚记录,毁尸灭迹。

  难道这就是互联网技术应该有的样子吗? 我想一定不是。随着此类时间的不断发生,越来越多的技术geek站出来,开始做一些不同的事情,开始思考如何从技术上根本上解决此类问题,而不是依赖媒体和良心。 这其中IPFS不仅是先驱,也是佼佼者。

  在之前我们介绍了,也就是ipfs初始化。通过初始化,我们创建了一个本地的离线IPFS节点,在这个离线节点中,我们也可以做一些简单的操作。比如添加文件、查看文件内容、查看版本、查看配置等。

  IPFS是分布式的全球存储网络。也就是说可以随时跟全球的计算机进行通信并做数据交换。显而易见,离线的情况下肯定无法跟其他节点进行通信对不对? 所以需要加入到IPFS网络中。在IPFS中,要加入到网络中相当简单,只需要运行一个简单的命令就能实现。没错,它就是强大的 命令。

  简单执行会占用一个终端,由于后续很多操作,都是需要ipfs在线模式的,所以这里介绍一个简单的命令,让ipfs在后台运行。 运行这个命令ipfs会在后台运行。这样我们就连接到了ipfs全球网络。

  我们可以做一个简单的验证,打开浏览器输入

  或者终端输入如下命令

  我想肯定有人想问,它是如何连接的,原理是什么?

  接下来我们来看看ipfs daemon的源码,看看其究竟干了什么事情?

  如下图所示,找到对应的代码文件打开

  IPFS源码解读

  后面我们会debug,所以修改debug配置文件。

  在源码里面有一段英文的LongDescription, 建议大家仔细阅读下, 此外也可以在终端执行命令 来查看。

  以上从【1】- 【8】是整个IPFS Daemon的启动过程。

  检查ipfs是否已经初始化,如果没有初始化,会以默认配置文件初始化。

  打开初始化的仓库,也就是~/.ipfs 目录

  读取配置文件

  根据配置文件生成一个新的ipfs节点

  连接到IPFS网络

  在IPFS中,网络层是使用的P2P对等网络,一个新的节点要连接到网络中时,需要知道连接的默认节点。那么在运行的时候,其是如何知道其他节点并进行连接的?

  其实在 也就是初始化的过程中,ipfs已经添加了默认的节点在配置文件中,可以用命令 来查看。 如图所示:

  IPFS节点配置

  正因此,我们运行的本地节点就可以找到IPFS网络,并连接到IPFS全球网络中,与其他节点进行通信。既然说到这里,我们能不能不让我们的节点连接到主网,仅仅只是在自己的私有网络中通信呢? 答案当然是可以的,关于私有IPFS网络的搭建,我放在下一节专门探讨下。

  开启API服务

  在IPFS中,很多通信都是通过API来进行的。API的会在本地的5001端口运行。unix下可以通过如下命令查看。

  或者使用telnet来测试

  开启Gateway网关

  通过gateway网关我们可以像访问普通的互联网网站一样来访问IPFS上的文件或者网站。可以说正是因为gateway网关的存在,让用户感觉IPFS跟传统的web服务很相似,在入口处没有引入过多新的概念或者变化。gateway将后面复杂的IPFS进行了封装并对普通用户透明,是IPFS中至关重要的一部分。关于IPFS Gateway的使用,以及如何利用IPFS替换Samba等文件共享服务器,在局域网内做文件共享服务,将在后续的使用案例中探讨。

  启动完成

  到这里,整个IPFS的启动就算是完成了,当然在这中间还有一些细节,我这里没有列出来。大家可以自己在阅读源码,梳理下整个过程。

  关于本地节点的一些地址以及端口信息,如果忘记,可以通过配置文件来查看。

  当然上面的值是可以根据自己的意愿来修改的,具体修改的方式在源码里面关于命令的那一段长描述里面可以看到。感兴趣的可以读读。

  在本篇中,介绍了, 在这里我通过八个步骤来阐述了整个启动过程。但大家都可以看出来,在源代码的解析过程中,并没有深入进去。主要原因是一深入进去,内容就太多了。 由于 IPFS是p2p网络。所以在网络部分,在往下跟,就会到libp2p,也就是IPFS的网络层。 所以这里不深入,等到后面,分析了libp2p之后,在过来看这部分内容,相信收获会更多。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。