eBook-EM(电驴)完全攻略第1页共24页[原创]eMule.电骡.电驴.我的使用心得(附:eBook-EM完全攻略)软件下载:]eMule0.46CVeryCDBuild0729为了P2P的明天,请自觉抵制吸血驴!大家好!最近发现不少人在使用eMule时,遇到了不少问题,于是想到写一篇eMule(俗称:电骡、电驴,以下简称EM,详见注解一)教程,希望朋友们能从中找到答案;同时呢,也为了宣传EM的“我为人人,人人为我”的精神,其实,当代的中国人,缺少的不正是这种的精神!注解一:emule到底是什么?随着二代技术的普及,一个问题诞生了,自私的人们在利用P2P软件的时候大多只愿“获取”,而不愿“共享”,P2P的发展遇到了意识的发展瓶颈。不过,一头“骡”很快改变了游戏规则,它就是后来鼎鼎大名的eDonkey。这标志着第三代p2p技术的兴起,eDonkey采用了以“分散式杂凑表”(distributedhashtables)为诉求的Neonet技术,改变了P2P网络上的搜索方式,理论上可以更有效率的搜索更多的电脑,以及更容易找出少见的文件。这种技术已经使eDonkey基本快要追上了P2P服务龙头业界的另一个老大Kazaa了.eDonkey由JedMcCaleb在2000年创立。他最重要的是可以同时从许多人那里下载同一个文件,并且采用了“多源文件传输协议”(MFTP,theMultisourceFileTransferProtocol)。电骡的索引服务器并不集中在一起的,而是各人私有的,遍布全世界,每一个人都可以运行电骡服务器,同时共享的文件索引为被称为“ed2k-quicklink”的连接,文件前缀“ED2K://”。同时,在协议中,定义了一系列传输、压缩和打包的标准,甚至还定义了一套积分的标准,你上传的数据量越大,积分越高,下载的速度也越快。而且每个文件都有有md5-hash的超级链接标示,这使得该文件独一无二,并且在整个网络上都可以追踪得到。EDonkey可以通过检索分段从多个用户那里下载文件,最终将下载的文件片断拼成整个文件。而且,只要你得到了一个文件片断,系统就会把这个片断共享给大家,尽管通过选项的设置你可以对上传速度做一些控制,但你无法关闭它。在eDonkey出现后,其改良品种eMule(电骡)也出现了。可以说emule是eDonkey的升级版,是eDonkeyeBook-EM(电驴)完全攻略第2页共24页的一个Mod,就象osp就是quake3的mod一样,它的独到之处在于开源,它的基本原理和运作方式,也都是基于eDonkey,eMule基于eDonkey网络协议,因此能够直接登录eDonkey的各类服务器。eMule同时也提供了很多eDonkey所没有的功能,比如可以自动搜索网络中的服务器、保留搜索结果、与连接用户交换服务器地址和文件、优先下载便于预览的文件头尾部分等等,这些都使得eMule使用起来更加便利,也让它得到了电骡的美誉。总之,他们继承了第二代P2P无中心、纯分布式系统的特点,但他们它不再是简单的点到点通信,而是更高效、更复杂的网络通信;再加上eDonkey和eMule引入的强制共享机制,在一定程度上避免了前几代P2P纯个人服务器管理带来的随意性和低效率。[/quote]那么,我的语文水平并不高,不过,在以下的文字中,我会尽可能的把问题说清楚,说得不对,就请高手们,多多指正了!或许,我一开始说,EM的精神,许多朋友会觉得一头雾水:不就是个下载软件么,怎么跟“我为人人,人人为我”这样的字句说在一起了,原因就在于EM是一款P2P(详见注解二)软件。P2P这样的下载方式,正好同一般的下载方式(如HTTP、FTP)相反,它是下载的人越多,速度越快,而一般的下载方式,是人越多,速度越慢。到这里,就要请朋友们,先看一下注解一和二了。比如:咱们用EM下载一个软件,同时有10人在下载,速度是A,而同时有100人在下载,就是更高的A+,所以说,速度的根本在于把此文件共享出来的用户的数量(包括已下载完的用户和正在下载的用户)。我们谁也不愿意看到EM重蹈覆辙,像以前的BT那样,下载是一哄而上,然后一哄而散的。即使你不听我的劝告,那属于第三代P2P的EM,也不会让你舒舒服服的把文件下完。EM有强大的信用系统,如果你只下载不上传,那么你的积分就会越来越少,速度理所当然的也就越来越慢,当你的积分耗尽,你自然也就不能下载;反之,如果你的上传下载比例大于2,也就是说你上传的量比你下载的量的2倍还多,那么你平时的下载速度将比一般用户快得多。这就是EM强大的信用系统,这是当今社会的人类素质所决定而存在的。[color=blue]所以,我才这样强调这个精神“我为人人,人人为我”,当然我不希望有人把它改为“人人为我,我为人人”![/color]注解二:[quote][color=red]P2P到底是什么?[/color]Peer-to-peer的缩写,指的是点对点的意思,最早是在美国由18岁的ShawnFanning开发出一个叫Napster的软件时,引入得概念,它不仅仅是一种软件架构,也是一种社会模式的体现,网络上流行的P2P软件的架构手段主要有两种:集中式和分布式。集中式:便是利用服务器作为媒介使各个分散的节点(用户)能互相联系,生成各种服务响应。分布式:每个节点即做服务器又做客户端,这种方式非常灵活,一个孤立的节点只要连上另一个节点便可以进行传输。Napster可以说是第一代p2p软件。后来由于Napster陷入诉讼危机(相关版权问题),便出现了Gnutella,它吸取了Napster的失败教训,将P2P的理念更推进一步:它不存在中枢目录服务器,用户只要安装了该软件,立即变成一台能够提供完整目录和文件服务的服务器,并会自动搜寻其它同类服务器,从而联成一台由无数PC组成的网络超级服务器。传统网络的Server和Client在它的面前被重新定义。Gnutella作为第二代p2p软件,他们可以说是最早的p2p技术。然后FastTrack(即Kazaa的底层技术)迅速掘起取代其地位。成为p2p老大。[/quote]相比于其他P2P软件,EM有什么优势呢?作为第三代P2P的EM,可以说是eDonkey的增强版,我认为其中最主要的区别就是,EM是在eDonkeyeBook-EM(电驴)完全攻略第3页共24页使用ED2K的基础上,再引入了Kad技术(详见注解三)。当然,比起BT,EM的优势就更大,这里就不多说了。注解三:[quote][color=red]到底什么是kad?[/color]关于kad网络,这一个多月来我发现有好多刚刚接触emule的朋友不太明白,总是搞不清楚这是个什么东西,虽然本区以前也曾经有人写过一些关于kad的文章,但是可能新来的朋友不会去翻了,那么我就结合自己对kad的一点认识,来重新谈一下kad吧?其中有好多不对的地方也请诸位朋友不要笑话我,请一一指出在。小王这里多谢了!Kad是Kademlia的简称,eMule的官方网站在2004年2月27日正式发布的eMulev0.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也被称之为Serverlessnetwork(无服务器网络)。虽然目前一直处于开发阶段(alphastage)。但毫无疑问,它无可比拟的优势,将会使它成为p2p的明天。可能很多朋友会关注,kad网络没有高低id的计算原则,是否对于低id来言就畅通无阻了呢?我们大家知道在ed2k网络里面,我们的id是通过ip进行如下的算法计算得出的设我们的IP=A.B.C.D那么我们的IDnumber=A+256*B+256*256*C+256*256*256*DlowID的产生是由于我们的ID计算结果小于16777216.即IDnumber=A+256*B+256*256*C+256*256*256*D16777216Kad的id计算原则并不是象上面那样,他更关注我们是否open和freely。但是kad里面是如何计算我们的id呢?事实上它的计算方法是这样IDnumber=256*256*256*A+256*256*B+256*C+D所以kad其实也有高低id的分别。所以内网用户在使用的时候依旧无法达到内网用户完全穿透网络的效eBook-EM(电驴)完全攻略第4页共24页果,而且目前来看,还存在着kad模块引入,导致占用系统资源会变大以及会突然产生MemoryLeak的问题,对于内存的控制,目前emule做的效果还是不好(这种低级错误在新的EM中出现的概率是极小的)。其实kad本身有一个nodes.dat文件,也叫做节点文件,这里面存放了我们在Kad网络中的邻居节点,我们都是通过这些节点来进入Kad网络的。其实kad的网络倒更像是overnet和Kazaa网络,有兴趣的朋友大家可以对比看看。Kad网络提供了帮助寻找节点以及记录节点的机制。下面我们来说说这个机制的原理:Kad拥有一个160bit的ID,每一个节点送出的讯息都必须包含此ID。每一个节点都必须记录一个资料来保存已经存在的节点,资料的格式是(IPaddress,UDPport,NodeID),节点所必须负责的范围是2的i次方及2的i+1次方,i的范围是0i160,这个结构叫做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值来决定),那么任何其他用户在下载这个文件的時候都会告诉其他用