前言

IPFS[1]和零网[2]是在同一年创立的,而如今IPFS已超零网2K star,生态系统也更加茁壮。

显然,缘于IPFS的模块化,将网络分层,才吸引了更多的开发者。

零网与IPFS有很多相似之处,比如同时基于BitTorrent。但实际上,看似相似,一些深层的技术还是不一样的。

深层机制

DHT

DHT即分布式散列表,用于存储节点信息,可以理解为,每个节点都是一个tracker

Tracker就是中心化的服务器,节点告诉tracker自己所有的资源,其他节点通过tracker找资源

IPFS支持DHT,可以实现完全去中心化。但ZeroNet尚不支持,只有tracker交换

Tracker交换相当于弱化的DHT,只有部分节点参与路由,抗封锁能力略弱。

Kademlia

Kademlia是一种通过分布式散列表实现的协议算法[3]

BitTorrent

BT协议是零网和IPFS的底层协议之一,所以不应将IPFS和零网和BT进行比较,毕竟不是在同一层面的。

可以说零网和IPFS是经过扩展、增强的BT。

而IPFS的数据是由一堆Git的数据块组成,这种交换数据块的BT又被称为BitSwap

Git - IPFS亮点之一

Git只增加数据,所以对P2P系统非常友好,并且有了Git之后就不会出现私钥被偷,文件全部被删除的事情。

零网有过私钥被公安拿去,强删数据的事情。

版本的变化只不过是添加数据或者更改对commit的引用的更改。

ZeroNet的站点结构

不同于IPFS,零网直接使用站点公钥对站点进行标识,以站点为单位,站点之间的文件是分开管理的。

因此,没有IPFS的去重机制,浪费空间。

站点由各content.json组织,相当于一个索引文件,所以站点下载的第一件事就是下载它。

分布式网络之上的站点

两个网络都一样,不能实现完全动态的站点,站点都是静态文件。没有后端逻辑,纯前端站点。

零网有原生API,对纯前端站点进行扩展,利用API实现有限的后端功能:

  • 将文件内数据导入数据库,加快查询速度。
  • 发布用户内容,实现站点评论。
  • 聚合站点,实现一定程度的复用。

可以看出,零网针对站点作出特别优化,IPFS确实是个文件系统。

但这些附加功能完全可以在IPFS之上实现,通过各种插件。

域名系统

零网采用NameCoin,而NameCoin客户端太大,所以用一个官方的零网站点发布域名数据,也就是说域名系统并不完全分布式。

而IPFS,方法更多,比如IPFS可以使用现有的DNS,需要购买域名,然后添加DNS TXT记录,dnslink=/ipfs/<CID for your content here>

最后按/ipns/example.com/path/访问。

速度问题

零网对每次发布都推迟几秒,因此CPU占用很小。IPFS没有任何限速,有时候就CPU占用很高。

当然,有利有弊。

编程语言

IPFS的实现更多,Go的实现早就有了,JS的也在编写了。零网到现在都只有Python2编的。

Go和Python的差距很明显,而且零网用的是Python2,经常发生各种阻塞,查询数据库的时候网页就不响应。

Py2在2020年以后就不支持了,零网作者应该会在今年搞定到Py3的迁移。

做种

零网网站一经访问,永久存储和做种在访客硬盘里,但IPFS会将下载的文件视作缓存,定期清理,所以就有Pinning service。

而零网的网站若是要pin,直接在零网网门访问,然后网门就会为你做种。

结论

IPFS更加前沿和模块化。零网有很多针对站点的功能,适合建站。


  1. https://github.com/ipfs/ipfs ↩︎

  2. https://github.com/HelloZeroNet/ZeroNet ↩︎

  3. https://zh.wikipedia.org/wiki/Kademlia ↩︎