# Schéma d'URI ed2k

En informatique, les liens eD2k (ed2k://) sont des hyperliens utilisés pour désigner des fichiers stockés sur des ordinateurs connectés au réseau P2P de partage de fichiers eDonkey.

## Général

De nombreux programmes, tels que eMule, MLDonkey et le client original eDonkey2000 de MetaMachine, qui a introduit le type de lien, ainsi que d'autres utilisant le protocole de partage de fichiers eDonkey, peuvent être utilisés pour gérer les fichiers stockés dans le réseau de partage de fichiers.
Les liens eD2k permettent d'identifier un fichier à partir d'un lien dans un navigateur web et de le télécharger ensuite par un client comme eMule, Shareaza ou tout autre logiciel compatible. Cette fonction de liaison a été l'un des premiers URI à être introduit dans le partage de fichiers pair-à-pair, et a eu un effet considérable sur le développement du réseau eDonkey, car elle a permis à des sites de liens externes de fournir un contenu vérifié au sein du réseau. Aujourd'hui, les liens Magnet ont remplacé les liens eD2k dans la pratique. Ils jouent un rôle similaire, mais ne se limitent pas au hachage eD2k et peuvent contenir d'autres hachages tels que SHA-1 ou MD5 par exemple, ce qui permet d'utiliser ces liens pour pointer vers des fichiers dans plusieurs réseaux (ainsi que dans BitTorrent) à la fois.
Les liens eD2k incluent des hachages de fichiers, car ces hachages peuvent être utilisés comme identifiant unique pour les fichiers au sein du réseau. Ainsi, même si le fichier lié porte un nom différent sur deux ordinateurs du réseau, le fichier peut être trouvé sur chacun d'eux et des morceaux de fichier peuvent être obtenus à partir des deux sources. Pour ce faire, une fonction de hachage est utilisée sur le fichier pour calculer sa somme de contrôle, qui dépend uniquement du contenu du fichier, et non de son nom.
Comme pour les autres protocoles URI, les navigateurs web peuvent être configurés pour gérer automatiquement les URI ed2k. Après l'installation d'un client eD2k, le protocole eD2k est éventuellement enregistré de sorte qu'en cliquant dessus dans le navigateur, le téléchargement démarre automatiquement ou l'utilisateur est invité à indiquer s'il souhaite commencer le téléchargement.

## Format de lien de fichier

Les liens vers des fichiers sont précédés du jeton "file", qui indique qu'il s'agit d'un lien vers un fichier, par opposition à un lien vers un server, un serverlist, une nodelist ou un friend link. Le lien de fichier typique d'eD2k inclut également le nom et la taille du fichier. Un exemple (un lien vers la bande-annonce de 15 Mo de Purist Edit) est fourni ci-dessous :
Les liens eD2k peuvent également inclure une référence à l'adresse IP et au port de clients spécifiques connus pour partager le fichier lié. Pour ce faire, il suffit d'ajouter une liste de sources après la partie principale du lien, comme indiqué dans l'exemple suivant :
Sur eMule, le lien contient souvent un top hash AICH |h=H52BRVWPBBTAED5NXQDH2RJDDAKRUWST| pour aider à récupérer le fichier en cas de corruption pendant le transfert.

### Algorithme de hachage eD2k

La fonction de hachage eD2k est un root hash d'une liste de hachages MD4. Elle donne un résultat différent de l'utilisation simple de l'algorithme MD4.
Les données du fichier sont divisées en morceaux entiers de 9500 KiB (9728000 octets) plus un morceau résiduel, et une somme de contrôle MD4 de 128 bits est calculée pour chacun d'entre eux. Si le fichier est supérieur à 9500 KiB (ce qui signifie qu'il y a plus d'un morceau), le hachage eD2k est calculé en concaténant les sommes de contrôle MD4 des morceaux dans l'ordre et en hachant à nouveau le résultat à l'aide de MD4. Dans le cas contraire, le hachage MD4 du seul morceau du fichier est utilisé sans autre modification.
Cette méthode de hachage permet au destinataire de vérifier qu'une liste de hachage correspond au hachage d'un fichier eD2k original, sans qu'il soit nécessaire d'avoir le fichier sur le disque.
Dans le passé, il y a eu une certaine ambiguïté pour les fichiers dont la taille est un multiple de la taille du morceau (9500 KiB). Les anciennes versions de certains outils de hachage eD2k calculaient des hachages de fichiers avec un bloc supplémentaire de 0 octet à la fin. Cela est dû à une ambiguïté du terme "morceau restant", qui peut être interprété comme étant soit le dernier morceau, soit un morceau non complet à la fin. Suivant cette dernière interprétation, certaines implémentations ont ajouté un bloc de zéro octet au cas où le dernier bloc d'un fichier serait complet. Cette pratique est toutefois déconseillée et la première interprétation est aujourd'hui utilisée comme norme pour éviter que certains fichiers aient des hachages différents en fonction de l'implémentation de l'algorithme utilisé pour calculer leur hachage.

### AICH

L'AICH (Advanced Intelligent Corruption Handling) est une extension eMule. Il subdivise le bloc de 9500 KiB en blocs de 180 KiB et construit un arbre de Merkle à partir des hachages SHA1 des 53 blocs, de sorte que le hachage de la racine de chaque bloc est appelé hachage du bloc. Les hachages des blocs alimentent ensuite un arbre de Merkle, dont le hachage racine est le hachage racine réel de l'AICH. La taille réduite des blocs permet aux clients eMule d'identifier plus précisément les lieux de corruption.

## Liens vers les serveurs

Un lien vers un serveur est une référence à un serveur eDonkey2000 ; cliquer sur un tel lien l'ajoute généralement à la liste des serveurs. Les liens de serveur sont indiqués par le jeton de server au début du lien et ont le format suivant :
* IP - IP du serveur auquel se connecter.
* PORT - Port où le serveur écoute les connexions eD2k entrantes.
Exemple :