eD2K 之外的全新网络
ed3k 是 eMule Qt 自有的文件共享网络。它保留了 eD2K 二十年来行之有效的设计——以哈希标识文件、用 Kademlia 网络查找文件、可选的服务器与上传队列——并重建了已经老化的部分:通信格式、传输层,以及节点证明自身身份的方式。
eMule Qt 同时运行这两个网络。网络信息对话框和服务器窗口的我的信息面板中,在 eD2K 和 Kad 部分的下方会显示 ed3k 网络部分,方便你逐项对照。

思路相同,名称更新
ed3k 部分的大多数项目都能在 eD2K 中找到对应项。其中最重要的一项:eD2K 所说的高 ID、Kad 所说的开放,在 ed3k 中称为路由节点。
| eD2K / Kad | ed3k | 含义 |
|---|---|---|
| 高 ID / Kad 开放 | 路由节点:是 | 其他节点可以直接连接到你。路由节点保存 Kad 记录,并为被防火墙阻挡的节点提供帮助。 |
| 低 ID / Kad 被防火墙阻挡 | 路由节点:否(即叶节点) | 你位于 NAT 之后。其他节点仍可通过中继和打洞连接到你。 |
| Kad UDP 状态 | IPv4 / IPv6 | 每个协议族单独测试:开放、锥形 NAT或对称 NAT。 |
| Kad 伙伴 | 中继 | 向你转发连接请求的路由节点。叶节点至少保持两个。 |
| 已服务的伙伴 | 已服务的伙伴 | 你的路由节点为其中继的叶节点。 |
| eD2K 服务器 | 索引节点 | 为所有内容建立索引的普通 ed3k 节点。没有单独的服务器软件或协议。 |
| 用户哈希 + Kad ID | 节点 ID | 一个 ID 通用于所有场景,即节点自身签名密钥的哈希。 |
| 客户端 ID | — | 无需使用。其他节点会告知你它们看到的你的地址。 |
| TCP 端口 + UDP 端口 | UDP 端口 | 一个端口通用于所有场景,端口号与你的 eD2K TCP 端口相同。 |
| 混淆(可选) | 连接:已混淆 | 始终开启,没有明文模式。 |
| Kad 已索引 | 已索引 | 你的节点为网络保存的记录及其大小。 |
状态一行的颜色与 eD2K 一致:以路由节点身份连接时为绿色,以叶节点身份连接时为橙色。
相比 eD2K 的主要改进
- 设计即加密。所有数据包都通过混淆的 QUIC 传输,Kad 和文件传输皆是如此。任何内容都不会以明文发送,流量也很难被识别特征。
- 低 ID 不再是二等公民。可达性测试、中继和 UDP 打洞都是核心协议的一部分,因此两个被防火墙阻挡的节点之间始终可以互相传输。
- IPv4 与 IPv6 同在一个网络。两者地位平等,并分别检测可达性。
- 只需一个端口。只需转发一个 UDP 端口,而不是一个 TCP 端口加一个 UDP 端口。
- 真正的身份。每个节点都有一把 Ed25519 密钥,节点 ID 即该密钥的哈希。任何人都无法冒用其他节点的 ID。
- 坏数据即时发现。文件通过 BLAKE3 哈希标识,并以 256 KiB 的块校验,因此损坏的块在到达时就能被发现,并能确定其发送者,而不必等到 9.28 MB 的分块稍后校验失败。
- 更难被攻击。Kad 位置与节点的 IP 地址绑定,并限制每个地址段内的节点数量,以防范伪造节点泛滥。关键字记录由发布者签名,可实现高效的垃圾信息过滤。
- 人人都能运行服务器。索引节点只是多了一项能力的普通节点。
- 消息更精简。使用带 zstd 压缩的 Protocol Buffers,取代 eD2K 手工打包的标签。
- 留有成长空间。通过扩展,可将文件集、种子、Usenet 帖子和文件托管链接作为同一文件的来源,还支持聊天室等功能,且不会影响旧节点。
与 eD2K 协同,而非对立
共享的文件同样带有其 eD2K 哈希,因此 eMule 节点和 ed3k 节点可以为同一个下载提供服务。eMule Qt 将你的 eD2K TCP 端口号用于 ed3k,并由你的 ed3k 节点 ID 派生出 eD2K 用户哈希,因此来自服务器、Kad 或来源交换的每一条 eD2K 来源记录,都已经向其他 eMule Qt 客户端表明你支持 ed3k 以及如何找到你。经典 eMule 客户端则毫无察觉。
.:开启方法
ed3k 节点默认开启。可通过选项 → ed3k →“启用 ed3k 节点”将其关闭或重新开启。这个网络还很年轻:如果条件允许,请让节点全天候运行——每多一个路由节点,所有人都会更快。该协议是开放的、属于公有领域的 GitHub 规范,目前仍为草案,可能会有变动。