标题：KAD
简介
Kademlia的简称，一种基于P2P理念的新型网络拓扑结构，主要的目标是做到不需要服务器和改善可量测性。  KAD 结构图官方网站在2004年2月27日正式发布的 eMule v0.42b中，Kad开始正式内嵌成为eMule的一个功能模块，这个版本的主要新增功能就是支持Kademlia network（简称Kad）。
eMule以前版本连接的是传统 eD2k network，该网络的特点是用户运行eMule时，首先连结到一个服务器，通过该服务器用户连结到其它Clients进行下载。对于Kad用户不需要连结服务器，而是直接连结到Clients。因此，Kad也被称之为Serverless network（无服务器网络）。Kad具有传统eD2k所不具备的优势，虽然还处于开发阶段，但从长远角度看，Kad将更具发展潜力。
eMule v0.42b版本同时支持传统eD2k以及Kad。安装后用户可以从连结选项 中自行选择使用或不使用Kad，也可以两者同时使用。现有ED链接对两种network完全通用。进行文件搜索时，需要选择 Kad (对应Kademlia) 或 server (对应eD2k)。这一版本目前还存在一定的问题，主要是系统资源占用量较老版本有所加大，另外存在一定程度的Memory Leak(内存泄漏)。
详细解释
基本上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同样也属于开源的自由软件。它的程序和源代码可以在官方网站http: //www.emule-project.net上下载。
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*D
low ID的产生是由于我们的ID计算结果小于16777216.
即 ID number= A + 256*B + 256*256*C + 256*256*256*D < 16777216 
Kad的 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用户聊天。