当前位置:文档之家› Kademlia协议的分析与改进

Kademlia协议的分析与改进

第18卷 V01.18 第2期 No.2 电子设计工程 Electronic Design Engineering 2010年2月 Feb.2010 

Kademlia协议的分析与改进 

张齐.劳炽元 

(华南理工大学计算机科学与工程学院,广东广州510006) 

摘要:针对Kademlia协议存在的路由表更新迟缓、负载失衡和网络拓扑失配的缺陷,提出一种基于节点综合性能的 

K桶(K—bucket)构建方法,以改进Kademlia协议的性能。并通过模拟实验,证明了在恰当的更新策略下该方法的有 

效性。 

关键词:对等网(P2P);Kadendia协议;K桶;负载失衡;拓扑失配;综合性能 中图分类号:TP393.0 文献标识码:A 文章编号:1674—6236(2010)02—0125—03 

Analysis and improvement of Kademlia protocol 

ZHANG Qi,LAO Chi—yuan 

(School ofComputer Science and Engineering,South China University ofTechnology,Guangzhou 510006,China) 

Abstract:Aiming at the defects such as routing table update delay,load imbalance,network topology mismatch existing in 

Kademlia protocol,a K—bucket construction method based on the node’S comprehensive performance is presented in this 

paper,in order to improve the performance of Kademlia protoco1.With an appropriate update strategy,the effectiveness of 

this method is proved by simulation. 

Key words:peer—to—peer(P2P);Kadendia protocol;K—bucket;load imbalance;topology mismatch;comprehensive per- formances 

Kademlia是一种典型的结构化对等网P2P(Peer.to—Peer) 

协议,该协议以分布式的应用层全网方式存储和检索信息…。 

在众多P2P协议中,Kademlia是应用最为广泛、原理和实现 

最为实用和简清的一种。当前主流的P2P软件(如eMule、 

Bitcomet、Bitspirit和Azureus等)都采用Kademlia作为其辅助 检索协议 

但随着P2P应用规模的不断增长,P2P用户急剧增加, 

Kademlia协议同有的缺陷就越显突 .如节点负载失衡、K桶 (K—bucket)更新迟缓以及逻辑拓扑与物理拓扑失配等。为了 

适应P2P应用规模的不断增长.改善Kademlia协议的性能. 

本文将对Kademlia协议进行分析并提出相应的优化策略。 

1 Kademlia协议的缺陷 

1.1 K桶更新迟缓 在Kademlia覆盖网中,每个节点都保存有一些其他节点 

的位置信息,以便本地节点进行寻址查询。根据Kademlia协 

议的规定,这些位置信息一般由IP地址、UDP端口.节点ID 

等数据组成,并分为160个组。用单链表将组内节点连接起 

来,组成一个K桶。每个K桶有至多k个位置信息,这些位置 

信息所代表的节点与本地节点的距离(异或距离)都在同一 

个范围内。比如第i个K桶只保存与本地节点相距[2‘,2i+1】范 

围内的节点信息。K桶的逻辑结构如图l所示。 

一般来说,当i值很小时,K桶通常是空的(即无足够多 

收稿日期:2009—08—31 稿件编号:20HD90807l k-bucke t【0] k-bucket【1] k-bucket[2] 

k-bucket[i1 E .{=三 ….E日.{=三 nuI 1 ■ 距离:f1,2) 距离:【2,4) 

距离:【4,8) 

距离:【2 ,2 ) 

k-bucket fl 59】 日 三|卜.[三 …・ 日._[三 n1.1lI距离: ,2 ) Leas t—Recent ly Mos t—Recent ly 

图1 K桶的逻辑结构 的节点,比如当 0时,该K桶只能保存l项);而当i值很大 

时,其对应K桶的项数又很可能超过k个。这里参数k是为 

平衡系统性能和网络负载而设置的一个常数.但必须是偶 

数,比如在BitTorrent的实现中,k取值为8 。 

在标准Kademlia协议中,K桶的更新比较迟缓。假设有 

3个节点A、B、C,只要节点B持续在线,则无论其计算性能 

和网络带宽如何低劣,节点B的信息将一直保存在节点A的 

某个K桶里。而对于性能和带宽都更佳的节点C,却只有代 

表A、C距离的那个K桶没有填满k个节点信息时.才能填 上节点C的信息。 

将在线时间长的节点留在K桶可增加K桶中的节点在 

下一时间段仍然在线的概率.提高网络的稳定性并减少网络 

维护成本(无需频繁更新节点的K桶)。此外,这种机制能在 

一定程度上防御DOS攻击。因为只有当原来的节点失效后. 

本地节点才会更新K桶的信息.从而避免由于新节点的加入 而泛洪路由信息【 。但这种机制不及时更新K桶。将性能和带 

作者简介:张齐(1963一),男,山西太原人,硕士,副教授。研究方向:智能控制、嵌入式网络系统、信息处理。 

..125- 

日 电子设计工程)2010年第2期 

宽更佳的节点拒于门外,不利于提升Kademlia的搜索效率和 

降低等待时间。随着Kademlia用户增加,共享的数据、文件更 

多。这种缺陷会更加明显。 

1.2节点的负载失衡 

Kademlia协议基于如下假设:所有节点的能力是相当 

的;资源在覆盖网中的分布是随机的、均匀的;所有节点都可 

以和其他任何节点连接。而在实际情况中,各节点的计算能 

力、通信带宽和活动时间都是极端异构的。平等看待各节点 的能力将会导致节点负载失衡.造成网络的性能瓶颈I 。同样 

数量的请求包,带宽大的节点可以轻松应对,但会造成带宽 

浪费:而对于带宽较小的节点,则会造成网络堵塞。 

对等网(P2P)指各节点地位平等而不是能力相同圈。通常 

引入超级节点(Super node)概念以区分系统中的节点,使计 算能力强、存储容量大、高带宽、低延迟的节点成为超级节 

点,充当一个区域的服务器,而性能较差的节点作为叶子节 

点141,如图2所示。但这种策略需要一种复杂的算法来处理超 

级节点的选择、退出、失效和其他异常情况,因此会增加系统 

的额外开销。 

●普通主机终端(scJ ●超级节点(sN) 

图2混合拓扑结构 

1.3网络拓扑失配 Kademlia协议是利用IP网络上的一个覆盖网络实现寻 

址的。覆盖网络只是一个采用分布式哈希表(DHT)构建的逻 

辑概念上的网络。相当于应用层协议。覆盖网络通过哈希值 

决定网络中资源的映射位置,这种方式可提高系统可扩展性 

和资源定位速度。而覆盖网络的寻址是建立在逻辑概念上 

的,由覆盖网络中的逻辑跳(hop) ̄1成,根据各节点保存的路 由信息选择一条逻辑跳数(hops)最少的路径作为最优路径。 

由于覆盖网络并未过多考虑底层物理拓扑结构.因而会造成 

逻辑拓扑与物理拓扑失配。覆盖网络中逻辑最近的2个节点 往往在物理层并不是最近,因此造成很多不必要的路由.降 

低了资源定位效率I51。 

针对网络拓扑失配.当前的一种解决方法是地理布局 

(geographic layout)。该方法是利用收集的邻居信息(物理位 

置)决定本地节点的逻辑位置.使得在逻辑空间相邻的2个 

节点在物理层也相近旧。但这种方法同时会导致节点在逻辑 空间分布不均,加重负载的不均衡性。另外,这种策略使得邻 

居节点只能保存在前几个K桶里,则本地节点搜索某些关键 

字(该关键字经哈希转换后与本地节点的ID相似)速度很 

快。而大部分关键字的搜索速度都比较慢。 

-126- 2泛洪搜集邻居节点 

采用Kademlia协议原有策略构建覆盖网,即使用一致性 

哈希函数(consistent Hash function)将数据和节点都均匀映射 

到一个逻辑空间,使性能优良的节点均匀分布于160个K 

桶,从而避免搜索性能的不均匀。另外,为了降低网络拓扑失 配造成的影响,提高系统的搜索性能,本文的改进策略是对 

邻居节点作 丌L一3(3个物理跳数范围内)泛洪,找出所有 

1TrL一3邻居节点并把它们加入K桶里(邻居节点也均匀分布 

在160个K桶里)。对新节点进行1TrL一3泛洪操作也可使老 

节点在泛洪中了解到有新邻居产生,并及时更新其K桶。 

3基于节点综合性能的K桶 

3.1节点的综合性能131 

在负载平衡方面,考虑到节点的异构性,本文从节点的 

计算能力、存储能力、网络带宽、在线时间、物理跳数TrL 

(Time To Live)等因素量化出节点综合性能,综合性能高的节 

点将承担更多的访问负载,存储和提供更多信息。这里 

提出模型C ̄f(M,U,B, , )来计算节点的综合性能,其中 

C是综合性能的量化值,∞是常数, 为存储能力,U为计算 

能力,B为带宽, 为在线时间, 为消息传递所消耗的物理 跳数。 厂(肘, ,曰, , )根据节点各方面的性能计算出一个数 值,该数值越大则表示综合性能越高。 

3.2调整后K桶的结构 

为了依据节点的综合性能来选择下一跳节点。本文对K 

桶的结构进行调整。首先,为K桶中每个结点都增加一个综 合性能成员数据。然后将所有结点按照综合性能从高到低排 

序。并将K桶头结点的结构体修改如下: 

typedef struct f 

double sum; 

能值总和 

double rain; 

int count: node ̄next; 

}Head; //sum记录当前K桶里所有结点的综合性 

//min记录当前K桶里最小的综合性能值 

//count记录当前K桶已保存的节点数 //next是指向下一个结点的指针 

3.3节点的选择 

为避免每次搜索都集中在少数几个综合性能优异的节 

点上,造成节点负载过重,这里是根据概率随机选择节点。这 样虽然综合性能高的节点被选中的概率高。但不会每次都被 

选中,从而在一定程度上避免了系统热点(Hot Pot)的产生。 根据概率选择节点的步骤如下:首先把各个节点的综合 

性能值在数轴上相叠加.如图3所示。则某节点综合性能值 

越大,该节点在数轴上占据的长度就越长:然后利用随机函 

数rand()所产生的随机数是均匀分布的。令choose=sumx 

rand(),看choose落在哪个区间内就选择其对应的节点。比 如C ̄<choose< +Cb,这样choos

e就落在第2个区间内,于是

相关主题