通俗的讲,Kad是一种无办事器收集,将信息分离在各个结点中,而ED2K是办事器。
到底什么是kad?
关于kad收集,那一个多月来我发现有好多刚刚接触emule的伴侣不太大白,老是搞不清晰那是个什么工具,固然本区以前也曾经有人写过一些关于kad 的文章,但是可能新来的伴侣不会去翻了,那么我就连系本身对kad的一点认识,来从头谈一下kad吧?此中有好多不合错误的处所也请诸位伴侣不要笑话我,请逐个指出在。
小王那里多谢了!
Kad是Kademlia的简称,eMule的官方网站在2004年2月27日正式发布的 eMule v0。42b中,Kad起头正式内嵌成为eMule的一个功用模块,能够说从那个版本起头eMule便起头撑持Kad收集了。
Kad的呈现,完毕了之前edonkey时代,在ed圈里只存在着ED2K一种收集的形式,它通过新的协议创始并构成了本身的kad收集,使之和ED2K收集不相上下,并且它还完全撑持两种收集,能够在两种收集之间通用。
Kad同样也属于开源的自在软件。它的法式和源代码能够在官方网站 上下载。
Kad收集拓扑的更大特点在于它完全不需要办事器,我们都晓得传统的ed2k收集需要办事器撑持做为直达和存储hash列表信息,kad能够欠亨过办事器同样完成ed2k收集的一切功用,你独一要做的就是连线上彀,然后翻开kad。
Kad需要UDP端口的撑持,之后Emule会主动根据客户端的要求,来判断它能否自在连线,然后同样也会分配给你一个id,那个过程和我们ed2k的高id和低id查抄很像,不外那个id所代表的意义差别于ed2k收集,它代表一个能否“freely”的形态。
Kad和ed2k收集有着完全差别的不雅念但是不异的目标: 都是搜刮和寻找文件的源。 Kad收集的次要的目的是做到不需要办事器和改善可量测性。相关于传统的ed2k办事器只能处置必然数量的利用者(我们在办事器列表也都看到了,每个办事器都有更大人数限造),并且若是办事器比力大毗连人数过多,还会严峻的的拖垮收集。
而Kad可以自我组织,而且自我调理更佳的利用者数量以及他们的毗连效果。因而, 它更能使收集的丧失到达最小。因为具备了以上所论述的功用,Kad也被称之为Serverless network(无办事器收集)。固然目前不断处于开发阶段(alpha stage) 。
但毫无疑问,它无可相比的优势,将会使它成为p2p的明天。
可能良多伴侣会存眷, 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
但是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
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值来决定),那么任何其他用户鄙人载那个文件的?r候城市告诉其他用户,小王有那个文件,其他用户去下载那个文件的?r候也会询问小王,小王也会告诉他们谁正在共享那个文件,如许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的时候翻开kad,你会发现有两个明显的特点
(1)你的下载速度会加快
(2)你的下载文件的源会增加
以上两条关于lowid和经常下载源在国外的文件用户,效果就更为凸起,出格关于在ed2k收集中只要几个源或者没有源的文件,在kad收集中,一般都能找到源,所以说你利用了emule下载文件,根本上不会呈现没有源的请况,无论多长时间,不同只是源的几个数问题,因为kad收集都是主动设置装备摆设的,所以你丝毫不消分心,那么索性我们就翻开它,何乐而不为呢?
别的关于我们搜刮的时候,若是接纳kad收集搜刮,大都情况下找到的文件源会远远多于ed2k的全局搜刮,关于各人都是一个明智的选择。
固然,目前kad还处在试验阶段,但是他的兴起是迟早的工作,我从kad一起头推出就不断在利用,起头的时候用的人不多,效果不明显。但是目前来讲,再我发帖前,我还做过测试如今kad的利用人数已经突飞猛进,我随意找了一期我猜我猜我猜猜来做测试,发现kad找到源的比例已经占了总源比例的30%,以至更多,时间越长效果越明显。
所以,在那里呼吁各人都翻开kad,让我们的速度再迈上一个台阶。早日驱逐kad全国的到来!