大概浏览了一下emule的specification,看起来还是包含了centralized bootstrapping过程,即需要连上一种中间服务器,获得ID,发布共享文件列表,搜索也需要通过服务器来完成,客户端和客户端的通信只是用来下载文件的。

没有看过代码和实际实现,不知道理解的有没有问题。

 

DHT(Distributed hash table)以及kademlia:

DHT就是把节点ID和内容<KEY,VALUE>关联,发布一个内容<key,value>需要找到ID和key的距离最相近的一个节点,查找一个key的过程同上,发布和查找的过程是O(log(n)) - n是KEY的地址空间。

kademlia是基于DHT思想设计的一个协议,在DHT以外还有很多的细节设计,如bucket保持活动节点,冗余的设计等等。

有一篇很好的对kademlia工作原理和讨论的文章

http://www.cnblogs.com/neoragex2002/archive/2006/02/25/337715.html 

emule使用了kademlia。

 

gnutella:

0.4的specification里面只包括了ping, pong, query, query-hit, push这些消息的格式和路由规则,没有bootstrapping过程,文件下载等内容。基本上是一个flooding结合TTL的overlay network。

完全的decentralized network

问题:

  无结构的网络的不稳定性

  flooding方式路由的效率问题,延迟及带宽的占用。

完全无结构和flooding方式路由可能会导致扩展性的问题。

 

0.6增加了很多的的内容,主要有一下几点:

  1. bootstrapping的描述:pong cache, Gwebcache (还是一个cache记录和尝试的过程),connection reject会有一个重定向。
  2. ultrapeer和leaf节点,最大的变化,使网络结构变得层次化,有效的减少网络拓扑的复杂度。
  3. flow control和query route protocol减少了query的flooding.

结构化和flooding的减少应该能改善可扩展性。

 

gnutella2:

http://g2.trillinux.org/index.php?title=Main_Page

看起来网络结构和gnutella 0.6差别不大,都是基于hub(ultrapeer) - leaf的hierarchical网络

减少flooding来改善性能和可扩展性。

posted on 2015-01-02 19:30  rilizj  阅读(280)  评论(0编辑  收藏  举报