ED2k链接

eD2k链接（eD2k links (ed2k://) ）是一种超链接，用于指示在eDonkey网络上存储的文件。包括eDonkey2000、eMule、MLDonkey、aMule等在内的许多使用了eDonkey文件共享协议的客户端软件，都可以用eD2k链接来管理网络上的文件。

浏览器可以识别eD2k链接，并递交到eMule、eDonkey2000或其他的eD2k软件中进行传输。eD2k链接是最早被引入P2P文件网络的链接之一。Magnet链接现在也与eD2k链接类似，但Magnet链接不仅限于eD2k Hash，而是可以使用其他的Hash，诸如SHA或MD5等。

这些Hash码，主要用于确保相同的文件在网络上具有的相同的唯一标识，即使这些文件储存在不同的地方或拥有不同的名字。它通过使用该文件的Hash函数（散列函数）来计算其校验和。

eD2k链接和很多URI协议一样，可以被网络浏览器配置为自动关联处理。安装某些eD2k软件时，“ed2k://”协议可能被自动注册。于是在浏览器中点击文件的eD2k链接时，就能自动打开eD2k软件并进行此文件的下载。

 链接格式 
eD2k链接的大致格式形如：

ed2k://|<类型>|<其他信息>|/

使用“|”分隔开各个区域。

注释：
 ed2k://：协议处理方法。指明该协议是eD2k协议。
 <类型>：链接类型。有三种：file（文件）、server（服务器）、serverlist（服务器列表）。
 <其他信息>：具体的其他信息。

 文件链接 
 典型的、基础的eD2k文件链接只包含必要的三样信息：文件名、文件大小、文件的eD2k Hash。形如：ed2k://|file|<文件名>|<文件大小>|<文件Hash>|/以下是大小为2868871字节（约2.7MB）的官方eMule v0.49c zip压缩包的eD2k链接的例子：ed2k://|file|eMule0.49c.zip|2868871|0F88EEFA9D8AD3F43DABAC9982D2450C|/ eD2k链接也可以包含一个或多个来源的IP地址与端口，形如：ed2k://|file|<文件名>|<文件大小>|<文件Hash>|/|sources,<IP:端口>|/例如：ed2k://|file|eMule0.49c.zip|2868871|0F88EEFA9D8AD3F43DABAC9982D2450C|/|sources,202.89.123.6:4662|/ 在eMule中，eD2k链接也可以包含根Hash（Root Hash）值。根Hash提供了一个可靠的值用于AICH（高级智能损坏处理），在传输的文件有损坏或错误时进行纠正恢复。包含根Hash的eD2k链接形如：ed2k://|file|<文件名>|<文件大小>|<文件Hash>|h=<根Hash>|/例如：ed2k://|file|eMule0.49c.zip|2868871|0F88EEFA9D8AD3F43DABAC9982D2450C|h=SQ7LUTYUSMDBP2TVE2M7T6VUBLU324KF|/ 完整的Hashset可以确保文件的正确，也可帮助发布新的与罕见的文件。包含Hashset的eD2k链接形如：ed2k://|file|<文件名>|<文件大小>|<文件Hash>|p=<Hash Set>|/ 带主机的eD2k链接形如：ed2k://|file|<文件名>|<文件大小>|<文件Hash>|/|sources,<主机名:端口>|/ eMule也可兼容带HTTP来源的eD2k链接，形如：ed2k://|file|<文件名>|<文件大小>|<文件Hash>|s=<文件的HTTP地址>|/ 服务器链接 

eDonkey服务器的eD2k链接和文件的eD2k链接类似，它可以指示一个eDonkey服务器地址，格式形如：ed2k://|server|<IP>|<端口>|/例如：ed2k://|server|207.44.222.51|4242|/ 服务器列表链接 

服务器列表链接，用于从一个固定的HTTP地址添加server.met服务器列表文件。格式形如：ed2k://|serverlist|<HTTP地址>|/<HTTP地址>：server.met文件的HTTP地址。

 Kad节点列表链接 

Kad节点列表链接，用于从一个固定的HTTP地址添加nodes.dat Kad节点文件。格式形如：ed2k://|nodeslist|<HTTP地址>|/<HTTP地址>：nodes.dat文件的HTTP地址。

 好友链接 

好友链接，根据用户Hash来添加好友。格式形如：ed2k://|friend|<用户名>|<用户Hash>|/官方eMule不支持eD2k好友链接添加好友功能，仅Xtreme及Xtreme的Mods（如ScarAngel、Mephisto等）、CN Mod等部分eMule Mods支持此功能。

 eD2k Hash 

eD2k Hash 算法是一种MD4算法的变体。其函数是一个MD4 Hash列表（MD4 Hash List）的MD4根Hash，但与MD4 Hash的结果不同:

文件数据被分割成多个9500KB的chunks块（9728000字节或大约9.28MB）和剩余的一个chunk。每个chunk都要计算128-bit MD4 校验和'''。如果文件长度正好是9500KB的整倍数，剩余的大小为0的chunk依然存在于Hash列表的末尾。将这些chunk的MD4校验和按顺序联合起来，并使用MD4计算Hash，可得到eD2k Hash。对于仅由一个chunk组成的文件（即文件大小小于9500KB），MD4和eD2k Hash是完全相同的。根据eMule源代码，method CKnownFile::CreateFromFile。

这种方法可以直接将Hash列表与原eD2k Hash进行验证，而无需使用文件块来验证。

 参见 
MD4
散列函数
校验和
Magnet链接
URI
eDonkey网络

 注釋 

 参考资料 

 外部链接  
 emule forum guides  How to remove the ed2k link protocol association in windows.
 aMule wiki: ed2k link .
 emule project  Ed2k link formats supported by emule client.
 ED2K tools - ED2K_Hash   Tool to create ED2K hashes.
 Phantom P2P  eD2k Links Provider

Category:EDonkey网络