# ED2k-URI-Schema

Das eD2k-URI-Schema ist ein Hyperlink-Typ, der benutzt wird, um, ähnlich wie Magnet-Links, auf Dateien innerhalb des eDonkey2000- oder Kademlia-Filesharing-Netzes zu verweisen.

## Allgemein

Viele Programme, so wie eMule, MLDonkey und der ursprüngliche eDonkey2000-Client von MetaMachine, können genutzt werden, um Dateien im eDonkey-Netzwerk zu finden, hoch- und herunterzuladen. Dabei stehen die Dateien auf den Computern anderer Netzwerkteilnehmer zur Verfügung, die diese dann an Interessenten hochladen. Dateien werden dabei über ihren eD2k-Hash eindeutig identifiziert. Da die Hashsumme identisch bleibt, auch wenn eine Datei umbenannt wird, ist diese Identifizierung viel zuverlässiger als beispielsweise eine Identifizierung anhand des Namens.
eD2k-Links gehörten zu den ersten Inhaltslinks für Dateien in P2P-Netzwerken. Heutzutage werden jedoch meist die moderneren, weil nicht auf einen Hashtyp limitierten und daher universell einsetzbaren Magnet-Links verwendet. So können diese zum Beispiel auch SHA-1- und MD5-Hashes enthalten, was es möglich macht, die gleiche Datei auch in anderen Netzwerken, etwa Gnutella2, zu lokalisieren.
Wie andere URIs auch können sich Programme im Betriebssystem und/oder Webbrowser registrieren, um bei einem Klick auf einen derartigen Link automatisch aufgerufen zu werden und die verlinkte Datei herunterzuladen.

## Linkformat

Es gibt zwei Haupttypen von eD2k-Links. Ist das erste Schlüsselwort file, wird auf eine Datei verwiesen, ist es dagegen server, enthält der Link den Verweis auf die IP eines eDonkey2000-Servers. Neuere eMule-Versionen unterstützen auch andere Schlüsselwörter wie etwa search für automatisierte Suchanfragen.

### File

Ein typischer eD2k-Link enthält sowohl den benötigten eD2k-MD4-Hash als auch einen Dateinamen und die Dateigröße. Als Beispiel kann der Installer von Shareaza v2.5.3.0 (6,35 MiB) dienen:
ed2k://|file|Shareaza_2.5.3.0_Win32.exe|6653348|7fb2bc10e0422a0e4f7e8613bd522c89|/
Zusätzlich können durch Anhängen des Sources-Tags feste Quellen für die Datei angegeben werden:
ed2k://|file|Shareaza_2.5.3.0_Win32.exe|6653348|7fb2bc10e0422a0e4f7e8613bd522c89|/|sources,252.191.193.62:6443|/
Es ist auch möglich, den AICH-Hash durch das Anhängen eines Tokens in der Form |h=H52BHJ5K2L90WXDPQQDH2RJDDAKRUWST| (wobei in diesem Beispiel H52BHJ5K2L90WXDPQQDH2RJDDAKRUWST der AICH-Hash entspricht) anzugeben, wie es zum Beispiel eMule beim Generieren von ed2k URIs tut.

### Server

Ein Server-Link enthält die IP-Adresse eines eDonkey2000-Servers, der beim Verwenden des Links dem Server-Cache des verwendeten eDonkey-Clients hinzugefügt wird, sofern dieser dies unterstützt.
Ein typischer Server-eD2k-Link folgt dem folgenden Schema:
ed2k://|server|IP|PORT|/
* IP → eD2k-Server-IP
* PORT → der Port des eD2k-Servers, auf welchem dieser eD2k-Verbindungen akzeptiert
Beispiel:
ed2k://|server|207.44.222.51|4242|/

### Search

Der Such-URI-Typ wurde mit eMule 0.50a eingeführt. Er besteht aus dem Schlüsselwort search und einem Suchbegriff:
ed2k://|search|Suchbegriff|/
Die erste Implementierung einer Browsererweiterung, die von diesem Linkschema Gebrauch macht, erfolgte für Mozilla Firefox.

## eD2k-Hash-Algorithmus

Der eD2k-Hash, welcher im eDonkey-Netzwerk und daher auch in ed2k-Links zur Dateiidentifizierung und -verifikation genutzt wird, ist der MD4-Hash einer MD4-Hashliste. Er wird wie folgt generiert:
Im ersten Schritt wird die Datei in Teile (sog. chunks) von 9.500 KiB (9728000 Byte, also annähernd 9,28 MiB) eingeteilt, wobei der letzte Teil den Rest umfasst und daher kleiner als 9.500 KiB ist. Im Fall, dass die Dateigröße genau ein Vielfaches von 9.500 KiB ist, hat das Reststück eine Größe von 0 Byte. Im zweiten Schritt wird von jedem Stück eine 128-bit-MD4-Prüfsumme berechnet. Gibt es mehr als ein Chunk, werden daraufhin alle diese Hashsummen aneinander gehängt und aus dem resultierenden String wird mit erneuter Hilfe der MD4-Hashfunktion der finale Hash berechnet. Ist die Datei jedoch kleiner als 9.500 KiB, wird die Hash des einzigen Chunks der Datei ohne weitere Modifikationen als Dateihash verwendet.
Als wichtig ist also hervorzuheben, dass die eD2k-Hashsumme in den meisten Fällen nicht mit dem einfachen MD4-Hash identisch ist. Auch bedeutet dies, dass einfach verifiziert werden kann, ob eine Chunk-Hash-Liste zu einer Datei gehört, denn der Dateihash lässt sich aus den einzelnen Chunk-Hashes berechnen. Der größte Nachteil dieses Hashsystems ist dabei, dass Einzelchunks 9.500 KiB an Größe haben, also immer nur relativ große Teile der Datei nach dem Herunterladen verifiziert werden können, was im Fehlerfall den erneuten Download von 9,28 MiB an Daten nötig macht. Dies machte die Entwicklung von Sub-Chunk-Verifizierungssystemen wie ICH und AICH, notwendig.