2011年5月24日星期二

  Peersim kademlia manual - note

1

首先感谢这位在Peersim中实现Kademlia的guy。

 

分析:(以作者的Manul为主,稍加个人评论)

1 作者manual中的sections:
  • Section2: 首先简要介绍了kademlia协议,分析了其主要特征和一般功能;
  • Section 3: peersim实现kademlia的介绍,分了代码以及为了逼真的实现真实场景时所作出的一些选择;
  • Section4: 展现了实际模拟,提供了使用的配置和不同情况下的分析;
  • Section5: 给出了模拟结果;
  • 总结与展望
2 协议分析部分不再介绍,要有兴趣,参看:

http://blog.csdn.net/jo_say/archive/2011/05/09/6405732.aspx

 

3 实现部分:

作者首先声明了:作者跳过了搜素和存储value的实现,专注于如何寻找节点(所有操作的基础)。

并且采用了:event-driven model。 [peersim提供了ed和cd(周期驱动)两种方式]。

驱动协议的事件大部分是信息交换事件,也附带有一些处理网络中失败节点的超时事件。

3.1 消息:

和Peersim关联的事件就是Kademlia中的信息交换。每一个msg在实现中都是Message类的一个实例,这个Message类是在Peersim的SimpleEvent基类上扩展得到的。The messages有:

  • MSG_FINDNODE: 这个消息将开始一个寻找结点操作
  • MSG_ROUTE: 这个消息将驱使邻居节点查询一个结点
  • MSG_RESPONSE: 用来相应MSG_ROUTE消息的消息,它会包含K个到达目标结点的邻近结点。

3.2.1 Bootstrap process:

除了包含在Peersim core中的类WireKOut外,还实现了两个其他的类来提供网络的初始化和Bootstrape:CustomDistribution和StateBuilder.这两个类都集成自Peersim.core.control.

开始,WireKOut类在节点间随机的建立了一些连接来创建一个虚拟网络覆盖层。

然后,CustomDistribution初始了整个网络:给每一个node分配了私有ID(随机产生于0到2的bits方之间),其中BITS是一个来自Kademlia协议的参数,通常为160,但我们也可以看到,在我们的配置文件中,这个参数是可配置的(系统提供的example.cfg中这个参数为32).

最后StateBuilder类执行了节点的Bootstrap过程来填充所有初始化节点的k桶。其中,初始化过程针对每一个节点,增加了50个随机节点的IDs和50临近结点的IDs。这个幼稚的过程通过一种简单的方式填充了各种路由表,保证了每一个结点都有邻居结点以及其他分布在网络中的随机结点的相关知识。

 

 

 

 

 

 

 

 

 

 

 

 

没有评论:

发表评论