首页 > 代码库 > 一些network的model
一些network的model
大概浏览了一下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增加了很多的的内容,主要有一下几点:
- bootstrapping的描述:pong cache, Gwebcache (还是一个cache记录和尝试的过程),connection reject会有一个重定向。
- ultrapeer和leaf节点,最大的变化,使网络结构变得层次化,有效的减少网络拓扑的复杂度。
- 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来改善性能和可扩展性。
一些network的model