大名鼎鼎的非商业开源软件,全球网友们自由共享资源的工具,“电骡”——eMule已经诞生了10年,至此十周年纪念之际,来自欧洲的物理学家,计算机科学家,同时也是海盗党成员,eMule mod的作者,为我们回顾了p2p文件共享软件领域的发展历史,并阐述了他们的观点和他们目前的开发方向。
早期如Napster(始于1999年)这样的主流文件共享应用程序完全是中心化运作的。Napster依靠一台服务器保存每个用户所共享的文 件,向用户提供完全集中式的文件搜索功能,甚至用户之间要开始文件传输也需要通过服务器。这种过分集中的弊端是显而易见的:当RIAA强制关闭了 Napster服务器之后,Napster很快便销声匿迹。
幸运的是,此时不那么中心化的下一代文件共享网络已经开始崭露头角。一方面来说,当时已经出现了完全去中心化的文件共享网络,例如 Gnutella。这类应用多采用泛洪查询的方式搜索网络中的其它客户端,换句话说就是挨个向每一个找到的客户端发送请求,直到找到足够多的结果、或者搜 索超时才会停止。不过这种网络拓扑虽受益于彻底剥离服务器,却也遇到了网络规模难以估量的麻烦。简而言之,用户是无法充分有效地搜索整个网络的。另一方 面,基于服务器的eDonkey2000(译者注:也就是为我们所熟知的“电驴”) (始于2000年9月6日)走上了历史舞台。eDonkey2000与Napster的最大不同之处就是每个人都可以建立自己的eD2k服务器。这种多个 服务器同时存在的局面虽然意味着不再会因为某台服务器的关闭而祸及整个网络,但其缺陷也一目了然:用户只能局限于某一台服务器搜索和共享文件。该系统与 BitTorrent颇有几分相似:索引服务器都是系统中的核心机制,需要通过服务器来查找其它节点。不过,BitTorrent(始于2001年)在这 条依赖于索引服务器的道路上显然走得更远:索引服务器可以控制允许哪些人加入这个群体、每个客户端可以获取多少个节点,等等等 等……eDonkey2000(eD2k)网络的设计目标则截然不同——他们致力于实现一个完全去中心化并且可估量的网络。依据这种理 念,eDonkey2000于2002年5月启动了一个名为Flock的新项目。经过beta测试后,该项目更名为Overnet,并最终于2004年8 月完成了与原始eDonkey2000客户端的融合。
2002年,另一个面貌崭新且发展迅猛的客户端也踏入了eD2k网络(eD2k代表eDonkey2000网络中基于服务器的部分)。这一年的 5月13日(也就是距今整整10年前),一个可接入eD2k网络的开源客户端、也就是我们的寿星eMule正式诞生了。到2004年6月时,整个eD2k 网络的规模总计约200万用户,其中eDonkey2000的Overnet网络用户只有约80万。由此可见eMule是eD2k网络中无与匹敌的客户 端,并在接下来的岁月里开始与BitTorrent并肩霸占了文件共享领域。
BitTorrent与eMule这两种网络都逐渐转向了更加去中心化的结构。为了让每一个用户都能检索到所有服务器上的文件,eMule添加 了关键字搜索功能,可通过UDP报文对所有服务器进行查询;此外还添加了来源交换功能,可通过TCP在客户端之间交换关于某个文件的来源信息。 BitTorrent也吸纳了后一种功能,实现了节点交换特性。2004年上半年,eMule引入了Kademlia网络。这是一种去中心化、基于DHT的键值存储表,能够查找文件来源以及执行关键字搜索。这使得eD2k服务器结束了它的历史使命。BitTorrent再次跟随着eMule的脚步前进,于2005年也实现了自己的DHT。
在文件共享领域引入DHT无疑是踏出了革命性的一步。说DHT意义重大不仅仅是因为用户有了文件的哈希值就能够下载文件(当然,还需要几个已知 节点来引导进这个网络),更重要的是它实现了一个完全去中心化并且可估量的网络。传统的去中心化网络(如Gnutella)采用泛洪查询方式查找信息时, 需要发送O(n)条请求;而DHT查找相同规模的信息只需要发送O(log2(n))条请求。当网络的规模扩大一倍之后,查找整个网络所需的请求数目一般 来说也只需要多1条,不论网络的实际规模到何等天文数字也是如此。下面我们举例说明这种结构的好处:假设有个拥有200万用户的网络,你期望在这个网络中 找到关于某个文件的信息,而且很不幸的是这个文件并不存在于这个网络中(也就是说,在这个网络中无人共享此文件)。如果走泛洪查询的路子,我们就必须挨个 问到网络中的每一个用户,之后才能知道这个文件并不存在。当然,实际这样的搜索过程通常会进入超时,但我们只能估计(并不能确定)这个文件并不存在。而借 助神奇的DHT,你只需要向21个节点(log2(2000000))进行查询,就能确知这个文件并不存在于整个网络中。而且这只是数学上最差的搜索情 况。一般来说实际所需的查询数目将会远远低于这个最大值,因为在你的查找路径上也许只需要3到4次请求(这是目前eMule的Kademlia实际搜索的 经验数据)就可以找到最接近于你所需要的文件的节点。
我们认为BitTorrent所应当引进的下一个功能就是真正基于DHT的关键字搜索功能。Tribler这款客户端已经在这个方向上进行了一 些尝试。不过,他们的种子被散播到了一些其它的知名客户端,导致搜索结果难以估量。大家都知道,海盗湾在只支持磁力链接后,其种子库的总大小只有约 90MB。不妨设想这90MB完全实现分布式存储后的情况:在一个百万规模的网络中,每个节点只需保存数百kB的分布式数据,就足以保障每个种子都在网络 中有数以千计的副本。这样,即使有非常多的节点并不在线,也足以确保用户找到所有的种子。不幸的是,之前所有去中心化的共享搜索功能都不可避免地遇到同一 个棘手问题:垃圾信息。在这一点上我们eMule开发人员应当学习Torrent的社区化——像海盗湾这样的网站可以担负起甄别的责任,为用户提供可信的 搜索结果。如果他们(海盗湾)能够继续承担甄别种子质量的责任,那么不妨通过公钥加密来对种子签署认证,这样就可以实现不受任何垃圾信息侵袭、而又完全去 中心化的搜索。如果一个用户充分信任某个种子站点,他完全可以将该站点的公钥添加到Torrent客户端中,这样客户端就可以检查搜索到的每个种子的数字 签名,并过滤掉所有的虚假结果。如果未来能够按照这种完全去中心化的方式发展,那么一个像海盗湾这等规模的种子站点将只需要一台普配的笔记本便足矣。这台 “服务器”只需每隔几小时接入互联网,采用其私钥为种子签署认证。不妨想想在这种情况下,想要跟踪这样一个“种子站点”将是多么困难的事儿。于是几无可能 轻易关掉种子站点了。
我们现在正从事开发一款客户端,将会提供上述搜索种子的功能。目前该软件还处于封闭alpha测试阶段,即将进入beta公测。
关于本文作者:
David Xanatos是奥地利盗版党(也译作:海盗党)的建党成员之一,现居于维也纳,白天任职于某大学教授物理,晚上则开发各种文件共享应用软件。David Xanatos因他的得意作品NeoMule而广为人知。
Ekliptor是位计算机科学家,来自慕尼黑。他曾开发过多款eMule Mod,目前在大学中致力研究eMule的Kademlia系统所存在的缺陷以及解决办法。
他们二人目前合作的项目名为“Neoloader”。这款客户端能够从BitTorrent、eMule以及各种一键下载链接(如RapidShare)中下载文件。
原文:《eMule: A Decade of File-Sharing Innovations》
译文:《eMule:见证文件共享万象更新的十年》作者:Ejack