Kademlia(1)

http://book.51cto.com/art/201212/375279.htm

 

另一种DHT对等网络是Kademlia,它由Maymounkov和Mazières设计。与Pastry类似,Kademlia基于结点距离来路由报文,但是正如下文所述,Kademlia中的距离度量与Pastry中不同。在这个网络中,两个标识符(结点或关键字)之间的距离是通过位异或(XOR)来度量的。换言之,如果x和y是两个标识符,我们有

 

当我们度量两点间的几何距离时,XOR有以下四个特性:

 

标识符空间

在Kademlia中,结点和数据项是m位标识符,它们创建了含有2m个点的标识符空间,这些点分布在二叉树叶子结点上。此协议使用SHA-1散列算法,其中m = 160。

例2.23  为方便起见,我们假设m = 4。在这个空间中有16个分布在二叉树叶子结点上的标识符。图2-55给出的情况只有8个活动结点以及5个关键字。

如图2-55所示,由于3 ( 3 = 0,因此关键字k3存储在结点N3上。尽管关键字k7看起来与N6和N8在数字上等距,但是,它却存储在N6上,因为6 ( 7 = 1而6 ( 8 = 14。另一个有趣的点是关键字k12,它与N11在数字上更接近,但它却存储在N15上,因为11 ( 12 = 7但是15 ( 12 = 3。

 

Kademlia(1)_第1张图片 
(点击查看大图)图2-55  例2.23

路由表

Kademlia仅为每一个结点维护一个路由表;且没有叶子结点集。网络中每个结点将二叉树分成m棵子树,这些子树并不包含结点自身。子树i包含了那些与相应结点共享最左i位数字(公共前缀)的结点。路由表有m行但只有1列。在我们的讨论中,我们假设每一行存储了相应子树中的一个结点的标识符,但是之后我们展示出Kademlia允许每行有多达k个结点。这个思想和Pastry相同,但是公共前缀的长度是基于比特位的个数,而不是基于2b的数字个数。表2-21给出了路由表。

 

Kademlia(1)_第2张图片 

 

例2.24  让我们来找例2.23中的路由表。为简便起见,我们假设每行仅使用一个标识符。因为m = 4,每个结点有四个子树,这些子树对应路由表中的四行。每行的标识符代表在相应子树中与当前结点距离最近的点。图2-56给出所有的路由表,但是只有三棵子树。为了使图例更小,我们选择出8棵树。

我们以结点6举例,使用相应的子树来解释一下如何构造路由表。对于其他结点的解释是类似的。

a.在第0行,我们需要插入一个结点标识符,这个结点在子树中公共前缀长度p = 0且距离最近。在这棵子树中有三个结点(N8、N11以及N15),然而,N15与N6最近,因为N6 ( N8 = 14,N6 ( N11 = 13并且N6 ( N15 = 9。N15就被插入到第0行。

Kademlia(1)_第3张图片 
(点击查看大图)图2-56  例2.24

 

 

你可能感兴趣的:(Kademlia(1))