![KAD](http://img.gansulong.com/220807/0HA06014-0.jpg)
文章插图
KAD简介
Kademlia的简称,一种基于P2P理念的新型网路拓扑结构,主要的目标是做到不需要伺服器和改善可量测性 。
官方网站
在2004年2月27日正式发布的 eMule v0.42b中,Kad开始正式内嵌成为eMule的一个功能模组,这个版本的主要新增功能就是支持Kademlia network(简称Kad) 。
eMule以前版本连线的是传统 eD2k network,该网路的特点是用户运行eMule时,首先连结到一个伺服器,通过该伺服器用户连结到其它Clients进行下载 。
【KAD】对于Kad
用户不需要连结伺服器,而是直接连结到Clients 。因此,Kad也被称之为Serverless network(无伺服器网路) 。Kad具有传统eD2k所不具备的优势,虽然还处于开发阶段,但从长远角度看,Kad将更具发展潜力 。
eMule v0.42b版本同时支持传统eD2k以及Kad 。安装后用户可以从连结选项 中自行选择使用或不使用Kad,也可以两者同时使用 。现有ED连结对两种network完全通用 。进行档案搜寻时,需要选择 Kad (对应Kademlia) 或 server (对应eD2k) 。这一版本还存在一定的问题,主要是系统资源占用量较老版本有所加大,另外存在一定程度的Memory Leak(记忆体泄漏) 。
基本介绍外文名:Kademlia
缩写:KAD
基于:P2P理念的新型网路拓扑结构
主要目标:做到不需要伺服器和改善可量测性
详细解释基本上Kademlia不是一个网路是一个很热门的技术,通称为DHT (Distributed Hash Table 分散式散列表) 。Kademlia虽说不是DHT中最好的,但是已经相当不错,而且很新 。DHT有很多套用,但是P2P可能是其中最重要的 。因为它可以让 P2P网路,完全不必使用伺服器 。我所知道的网路,大概只有Freenet和早期的Gnutella没有类似伺服器的东西 。其他的网路,举凡 Fasttrack,eDonkey,OpenNap,WinMX等等,都有类似伺服器的东西 。但是前两者的着名问题是效率不彰,因此DHT就可以帮助解决这个问题 。另外没有伺服器的好处,一是不怕伺服器被有关单位查禁,二是可以让更多人连上P2P网路 。像Overnet就是使用Kademlia技术的纯 P2P网路,但是eMule Kademlia并没有和Overnet相容,听说是eMule的设计师认为Overnet不够好,所以把Overnet不好的地方修改了 。总之,Overnet/eMule Kademlia都是基于Kademlia的网路,只是eMule并没有发明另一个新名称罢了 。至于哪个会成功,我个人看好eMule,因为 eDonkey网路上超过7成以上使用eMule 。Overnet虽然问世超过1年,但是使用人数始终无法占上百万 。如果eMule Kademlia能把使用者带进来,我想基于纯P2P的好处,eMule Kademlia网路可能超过5百万,超过Fasttrack的极盛时期 。Kad网路是一种根本不需要伺服器的架构每个eMule客户端负责处理一小部分search和source finding的工作 。分配工作的原理是基于客户端的唯一ID和search或者source的hash之间的匹配来决定 。比如说LordOfRing1.avi这个档案由用户abc来负责(通过档案的Hash决定),则任何用户共享这个档案的时候都会告诉用户abc我有这个档案,其他用户去下载这个档案的时候也会询问abc,abc告诉他们谁有这个档案,source finding就完成了 。search的方法也差不多,每个人负责一个keyword 。如何找到用户abc则是通过一种将用户id异或的方式,两个id的二进制异或值决定他们之间的逻辑距离,比如1100距离1101要比距离1001近 。当一个用户加入Kad后,首先通过一个已知的用户找到一批用户的ID和IP连线埠 。当此用户A要寻找某特定用户x时,A先询问几个已知的逻辑距离X较近的用户,如x1,x2,x3,x1,x2,x3会告诉A他们知道的更加近的用户的ID,IP和连线埠,依此类推,A最终就能找到X 。寻找的次数应该在logN数量级,N是总人数Kad 的出现 结束了之前eDonkey时代在eD圈里只存在着eD2K一种网路的模式,它通过新的协定开创并形成了自己的Kad网路,使之和eD2k网路并驾齐驱,而且它还完全支持两种网路,可以在两种网路之间通用 。Kad同样也属于开源的自由软体 。Kademlia 两个明显的特点你要做的就是在使用eMule的时候打开Kad,你会发现有两个明显的特点(1)你的下载速度会加快(2)你的下载档案的源会增加以上两条对于LowID和经常下载源在国外的档案用户,效果就更为突出,特别对于在eD2K网路中只有几个源或者没有源的档案,在Kad网路中,一般都能找到源,所以说你使用了eMule下载档案,基本上不会出现没有源的请况,无论多长时间,差别只是源的多少个数问题,由于Kad网路都是自动配置的,所以你丝毫不用分心,那幺索性我们就打开它,何乐而不为呢?高低ID说明可能很多朋友会关注, kad网路没有高低id的计算原则,是否对于低id来言就畅通无阻了呢?我们大家知道在ed2k网路里面,我们的id是通过ip进行如下的算法计算得出的设我们的IP = A.B.C.D那幺我们的ID number= A + 256*B + 256*256*C + 256*256*256*Dlow ID的产生是由于我们的ID计算结果小于16777216.即 ID number= A + 256*B + 256*256*C + 256*256*256*D < 16777216Kad的 id计算原则并不是象上面那样,他更关注我们是否open和freely 。但是kad里面是如何计算我们的id呢?计算方法ID number=256*256*256*A+256*256*B+256*C+D所以kad其实也有高低id的分别 。所以区域网路用户在使用的时候依旧无法达到区域网路用户完全穿透网路的效果,而且目前来看,还存在着kad模组引入,导致占用系统资源会变大以及会突然产生Memory Leak的问题,对于记忆体的控制,emule做的效果还是不好 。其实kad本身有一个nodes.dat档案,也叫做节点档案,这里面存放了我们在Kad网路中的邻居节点,我们都是通过这些节点来进入Kad网路的 。其实kad的网路倒更像是overnet和Kazaa网路,有兴趣的朋友大家可以对比看看 。Kad网路提供了帮助寻找节点以及记录节点的机制 。原理Kad拥有一个160bit的ID,每一个节点送出的讯息都必须包含此ID 。每一个节点都必须记录一个资料来保存已经存在的节点,资料的格式是 (IP address, UDP port, Node ID),节点所必须负责的範围是2的i次方及2的i+1次方,i的範围是0 < i <160,这个结构叫做k-bucket,该结构会形成一个tree的形状,每一次接收到新的信息时,各个节点都必须更新k-bucket内的资料,透过k-bucket结构我们可以保证所有的节点状态都是新的,而且一定会知道这个节点在哪里 。Kademlia网路提供四种Potocol(RPC)(1)PING 测试是否节点存在(2)STORE存储通知的资料(3)FIND_NODE 通知其他节点帮助寻找node(4)FIND_VALUE 通知其他节点帮助寻找Value而当每一个指令被接受到后,每一个节点都会到k-bucket上搜寻,通过这样的结构,kad提供一个方便快速且可以被保证在logN次数下找到所需的节点 。通俗的来讲就是在kad网路中我们每个emule用户端只负责处理一小部分搜寻和查找源的工作 。分配这些工作的时候,通过我们每个用户端的唯一的ID和搜寻档案的hash值之间的匹配来决定 。比如像我猜我猜我猜猜.rm这个档案由用户小王来负责(通过该档案的hash值来决定),那幺任何其他用户在下载这个档案的时候都会告诉其他用户,小王有这个档案,其他用户去下载这个档案的时候也会询问小王,小王也会告诉他们谁正在共享这个档案,这样kad找源的工作就完成了 。搜寻时候的方法也差不多,只不过是每个人负责一个关键字 。整个过程有点像在照线索循序问路而找到正确方向,而不是路上随便到处抓人在问路 。而每个地方里的网路相关信息,则会随着电脑及档案的加入而持续更新 。好处在于让你可以搜寻整个网路,而不只是在某一地区 。来讲,这个机制和算法是绝对领先而且非常优秀的 。相关方法如何找到用户小王则是通过将用户id异或的方式,两个id的二进位异或值决定他们之间的逻辑距离,如1100距离1101要比距离1001近 。那幺当一个用户加入kad后,首先通过一个已知的用户找到一批用户的id和ip地址和连线埠 。当该用户要寻找一个特定用户A的时候,该用户先询问几个已知的逻辑距离较A较近的用户,如B用户,C用户,D用户,B,C,D会告诉该用户他们知道的更加近的用户的id和ip地址和连线埠,同理类推,这个用户最终就能找到A 。所以寻找的次数会在logN数量级,这里N代表询问的人数 。其实也就是一种分散式杂凑的方法,基本上是对网路上某一特定时刻的档案进行快照(snapshot),然后将这些信息分散到整个网路里 。为了找到特定的档案,搜寻的要求先到达网路上的任何一台电脑上,然后这台电脑就会再将它转到另一台有更多档案信息的电脑 。第三台电脑可能就拥有档案本身——或者也可能再继续转到其他有正确信息的电脑 。採用这种方法,通常只需要跳转两到三次,便可以轻鬆查找到所需档案 。以上几个部分,便是对于kad作用原理以及算法的分析,可能好多人看了之后头大,那幺我们普通用户到底该注意些什幺呢? eMule诞生在2002年5月13日的黎明,一个叫Merkur的人对原始的eDonkey2000客户端感到不满,他坚信他能做的更好 。然后他就那幺去做了 。他在自己的周围聚集了很多的开发人员,eMule工程也由此诞生 。他们的目标是将eDonkey的精华保留下来,增加新的功能,并使图形界面更加友好 。他们无法想像此时的决定会带来什幺样的影响……今天,eMule是世界上最大最可靠的点对点档案共享客户端之一 。由于它奉行开发原始码的政策,众多的开发者得以对eMule工程有所贡献 。随着每一个版本的发布,eMule的开发者网路都变得更有效率 。含义eMule(电骡)来自一种叫做“骡子”的动物,提醒你一下,就是那种有点像驴的家伙 。eMule多长时间更新一次?eMule并不是有规律的更新和升级的,一般是一周到三周一次,但是不总是这样 。一些eMule具有的功能:客户端使用若干种网路来建立一个可靠的传输网路(eD2k,来源交换和Kad)Kad正处于开放测试阶段,eMule 0.42以后的版本中都包含了Kad功能 。eMule的伫列和信用系统确保每个人通过上传档案、回馈给整个网路的方式来获得自己想要的档案 。eMule是完全免费的,它也决不包含广告软体、间谍和流氓软体 。我们之所以创造eMule是为了快乐和知识,而不是为了金钱 。每个下载的档案都会自动检查是否损坏,以确保档案的正确性 。eMule的智慧型损坏控制系统有助于快速纠正在传输中损坏的部分 。自动优先权和来源管理系统使你可以一次下载许多档案而不必一直监视它们 。预览功能允许你在下载完成之前查看视频或者压缩档案的内容 。在预览视频时,我们建议您使用Video Lan Client 。eMule的Web服务功能和Web伺服器可以使您快速的访问网际网路 。你可以为你下载的档案创建目录,并且对它们进行组织和管理 。要想找到你所需要的档案,eMule提供了许多搜寻的方式,包括:伺服器搜寻(本地搜寻和全局搜寻),基于Web的搜寻(Jigle和FileDonkey)以及KAD(测试中) 。eMule允许你使用非常複杂的布尔操作符来进行查询,使你更加灵活的搜寻档案 。通过信息与好友系统,你可以向其它用户传送信息,然后把他们加为好友 。在你的好友列表中,你可以查看一个好友是否线上 。通过内置的IRC客户端,你可以一边下载,一边和全世界的eMule用户聊天 。