使用电骡KAD,请慎用“断头档”

电骡的KAD网络提供了一种无服务器的P2P连接方案(KAD网络的介绍请移步这里),新安装电骡(Emule)的用户,往往会因为KAD网络连接失败或者来源太少而感到困扰。

网上有许多文章介绍了通过下载一个公共的“断头档”(“永远”无法下载完成的档案)来通过来源交换使KAD网络节点数增加的方法,这些方法确实可以使新用户快速进入Kademlia大家庭(前提是新用户能连接到一个KAD网络中的源,这个源可以来自ed2k服务器或者本地文件),然而,这个方法是否对下载有实际的帮助呢?下面请看实际实验结果。

下面的实验数据由本人亲自实验得出:

连接服务器 no1.eserver.emule.org.cn 高ID

电骡版本: Emule v0.49c [Mephisto v2.2]

下载列表中状态为“下载中”的文件(公共关键字:minisd):

在下载断头档和停止下载断头档两种情况下,并分别保持连接12小时之后,搜索关键词“minisd”的结果数:

虽然这个测试很不严谨,KAD找源的结果也很不稳定,但是仍然具有一定的意义。这是为什么呢?下面我来简单介绍一下:

KAD网络的搜索原理是,

通过把资源信息与键进行映射,资源即可进行定位,哈希表是典型的用来映射的手段。由于以前的STORE消息,存储节点将会有对应STORE所存储的相关资源的信息。定位资源时,如果一个节点存有相应的资源的值的时候,它就返回该资源,搜索便结束了,除了该点以外,定位资源与定位离键最近的节点的过程相似。 考虑到节点未必都在线的情况,资源的值被存在多个节点上(节点中的K个),并且,为了提供冗余,还有可能在更多的节点上储存值。储存值的节点将定期搜索网络中与储存值所对应的键接近的K个节点并且把值复制到这些节点上,这些节点可作为那些下线的节点的补充。另外,对于那些普遍流行的内容,可能有更多的请求需求,通过让那些访问值的节点 把值存储在附件的一些节点上(不在K个最近节点的范围之类)来减少存储值的那些节点的负载,这种新的存储技术就是缓存技术。通过这种技术,依赖于请求的数量,资源的值被存储在离键越来越远的那些节点上,这使得那些流行的搜索可以更快地找到资源的储存者。由于返回值的节点的NODE_ID远离值所对应的关键字,网络中的“热点”区域存在的可能性也降低了。依据与键的距离,缓存的那些节点在一段时间以后将会删除所存储的缓存值。DHT的某些实现(如Kad)即不提供冗余(复制)节点也不提供缓存,这主要是为了能够快速减少系统中的陈旧信息。在这种网络中,提供文件的那些节点将会周期性地更新网络上的信息(通过NODE_LOOKUP消息和STORE消息)。当存有某个文件的所有节点都下线了,关于该文件的相关的值(源和关键字)的更新也就停止了,该文件的相关信息也就从网络上完全消失了。

(引自http://zh.wikipedia.org/zh-cn/Kademlia

也就是说,如果你连接到的与你的搜索关键词相近的节点越多,KAD搜索就越快,结果也越多。

然而,断头档本身作为一个搜索关键词,与它相近的节点会被包括到KAD节点列表中。于是,各种各样的节点充斥到本地KAD非常有限的节点列表里,其中许多节点是“不优化”的,对下载现有资源和搜索需要的相关资源是没有任何帮助的。

KAD本身是一个依据“节点相关性”自动优化的系统,一个ID能连接到的节点永远只是偌大网络中很小的一部分。下载文件=>向KAD搜索、直到找到需要的源,这是一个自动优化的过程,使用“断头档”进行干预,是一种得不偿失的行为。

另一方面,从拥有部分内容“已知节点”无法搜索到需要内容的缓存的情况,既可能是由于网络运营商的限制,也与大量eMule用户(尤其是迅雷、快车,以及限速非常厉害的其他客户端用户)缺乏分流供源的意识密不可分。

最后总结一下,也是我的建议:分流供源,留档分享,是让eMule下载速度提高的最直接、最有效的途径;“断头档”虽然增加了KAD连接数,却严重降低了KAD节点的“质量”,其实是得不偿失的。

参考资料:
1、Kademlia – 维基百科,自由的百科全书

25 thoughts on “使用电骡KAD,请慎用“断头档””

  1. 多年后重返 eD2k 网络,今天前来查查“断头档”究竟是什么黑科技,看完文章仔细一看居然是 Felix 博客 :D!网络真小系列……

  2. 没有 服务器 no1.eserver.emule.org.cn !
    是不是我的ipfliter太严厉了一些? Razorback系列也没有了

  3. 我也觉得没什么用,最不济更新一下kad.dat文件就可以了。

        1. thc?呵呵,我换了mod,想找断头档,于是google到这里来了……竟然会在这里遇到你

  4. 其实吧断头档一般我就开一会,用来获得peers,然后就pause了。一般断头档会很容易弄到几千个source,不断的连接和查询会耗掉很多资源和带宽。

    1. 刚刚使用骡子,KAD缺节点时,确实可以这样;但是如果大家都不用断头档了, 这个的作用也就不存在了,故我没有推荐这种用法:)

Leave a Reply

Your email address will not be published. Required fields are marked *

QR Code Business Card