Le réseau eDonkey et eMule


Comment ca marche ?

Vue d’ensemble

eMule est un programme de partage de fichiers entre particuliers. Il permet donc de transférer des fichiers d’un particulier vers un autre. Pour cela, il utilise une architecture basée sur des clients et sur des serveurs.

Seuls les clients recoivent ou emettent des fichiers ; les serveurs ont pour unique rôle de mettre les clients en relation pour qu’ils puissent s’échanger des fichiers.

Le client eMule est le programme eMule que vous utilisez. Chaque utilisateur désigne des répertoires contenant des fichiers à partager dans l’onglet "Shared" de son client. Ces fichiers sont alors mis à la disposition de tous et peuvent être téléchargés par d’autres clients eMule.

Ce schéma montre les échanges de fichiers entre les clients eMule. Les fragments de fichiers peuvent être échangés entre les clients, même si le client qui émet le fichier ne possède pas le fichier complet.

De cette façon, les fichiers se diffusent plus vite puisqu’un client n’a pas besoin d’attendre d’avoir le fichier complet pour pouvoir transférer la partie du fichier qu’il possède à un autre client.

Il montre aussi un problème : comment faire pour que les clients trouvent d’autres clients, pour leurs envoyer ou pour récuperer des fichiers, parmis tous les ordinateurs du réseau internet ?

C’est la qu’interviennent les serveurs : chaque client doit être connecté à un serveur et chaque serveur est connectés à plusieurs clients eDonkey. Chaque serveur référence les fichiers de chaque client qui lui est connecté.

Chaque client, pour trouver un autre client qui puisse lui envoyer le fichier qu’il cherche, va faire appel au serveur. Le serveur communique alors au client qui en fait la demande, chez quel client il va trouver le fichier qu’il recherche.

Ceci permet au client qui a obtenu cette réponse du serveur de contacter le client indiquer par le serveur, et de lui demander de lui envoyer le fichier qui l’interesse. De cette facon, les clients peuvent se trouver sur le réseau internet et s’échanger leurs fichiers.

Un client n’est pas limité à l’échange de fichiers avec les clients connectés au serveur auquel il est lui même connecté : chaque client peut charger des fichiers sur un client connectés à un autre serveur.

Pour cela, le client eMule contact tous les serveurs contenus dans la liste de l’onglet "Servers" pour leurs demander, comme il le fait pour le serveur auquel il est connecté, les coordonnées d’autres clients capables de lui fournir les fichiers qu’il cherche.

Le schéma qui suit ne représente que les communication réalisées par un client, mais il faut imaginer que tous les clients font la même chose, et qu’il existe bien plus de 5 serveurs et de 10 clients.

On comprend ainsi que votre client pourra trouver un autre client pouvant lui transférer le fichier qu’il recherche seulement si le serveur auquel est connecté ce client est dans votre liste de serveur.

Il est donc très important d’avoir une bonne liste de serveur. eMule possède d’ailleurs un moyen de maintenir cette liste de serveurs. Il procède ainsi : chaque serveur, quand il démarre, envois ces coordonnées aux serveurs qu’il connait, et recupère la liste des serveurs connus de ces serveurs.

Chaque serveurs possède donc une liste de serveurs, et cette liste va être transmise à chaque client quand il se connecte au serveur. De cette façon, les coordonnées des serveurs peuvent changer sans que cela empêche les clients eMule d’utiliser ces serveurs.

Les échanges, avec les détails que je connais

Les clients et les serveurs eMule ont des noms, mais ces noms ne sont pas utilisés pour le fonctionnement d’eMule (c’est pour cette raison qu’ils ne sont pas nécessairement uniques). eMule utilise directement comme coordonnées l’adresse IP du client et l’adresse IP et le numero de port du serveur.

Voici une brève et largement incomplète description du fonctionnement des echanges sur le reseau, de facon a ce que tout le monde puisse comprendre la suite : Toutes les communications sur internet utilisent les adresses IP et les ports. Chaque ordinateur relié à internet a une adresse IP unique qui permet de lui faire parvenir des données, et ceci, depuis n’importe quel ordinateur relié lui meme a internet.

Un programme, quand il emet des données sur le reseau internet vers un autre ordinateur du reseau, indique l’adresse IP de l’ordinateur de destination, son adresse IP (adresse IP de l’expediteur), et aussi le numero de port de destination et le numero de port vers lequel l’ordinateur de destination pourra repondre.

Ce numéro de port permet de determiner à quel programme sont destinée les données qui arrivent sur un ordinateur. Ceci permet de faire fonctionner en meme temps plusieurs programme utilisant le reseau sur le meme ordinateur.

Quand vous ouvrez une page web par exemple, votre navigateur internet contact l’ordinateur contenant cette page en précisant dans les donnés envoyées que le port de destination est le port 80. Il lui envoi egalement le numero d’un port sur lequel il faudra repondre (par exemple, le 1674).

Ce numéro de port est attribué par le système d’exploitation, et peut varier entre 1024 et 65536. Le fait que le port 80 soit utilisé permet à l’ordinateur contacter de déterminer que les données qu’il recoit sont a destination d’un certain programme : le serveur http. Le serveur http va alors repondre a l’ordinateur qui l’a contacté en lui envoyant des données.

Votre ordinateur sait que ces données sont destinées à votre navigateur internet parce qu’elles précisent qu’elles sont envoyées sur le port qui avait été donné plus tot par votre ordinateur (le 1674 dans cet exemple).

Il existe de plus différents protocoles (UDP, TCP,...) ajouttés à celui là, chacun etant plus ou moins adapté à une utilisation. TCP est un protocole qui nécessite l’établissement d’une connexion. UDP ne nécessite pas de connexion, mais contrairement à TCP, les données ne parviennent pas obligatoirement à leur destinataire.

Elle peuvent être perdues en route, durant le voyage sur le reseau. UDP est également un protocole plus léger que TCP : il utilise moins de bande passante.

Connexion au serveur

Chaque serveur utilise un port défini par l’administrateur. Par défaut, c’est le port numéro 4661. Quand un client se connecte à un serveur, il etablie une connexion vers le serveur TCP 4661.

Une fois la connexion établie, le serveur va se connecter au client en TCP, sur le port utilisé par le client eMule (4662 par defaut) afin de verifier que cette connexion est possible. Le serveur ferme la connexion TCP 4662 dés qu’elle a été établie, et ne l’utilise plus par la suite.

Le serveur envoi ensuite, grace à la connexion TCP 4661, la liste de serveurs qu’il connait.

Demande de sources de téléchargement

eDonkey est capable de transferer les fichiers en plusieurs fois, et ceci, même à partir de fichiers non complet qui sont en cours de téléchargement, et à partir de différent clients. eDonkey, pour trouver les clients qui ont le fichier en cours de chargement, va contacter regulierement tous les serveurs de sa liste.

Ces demandes de sources se font en utilisant la connexion TCP 4661 initiée par le client si le client interroge le serveur sur lequel il est connecté, et en UDP 4665 avec les autres serveurs.

Recherche de fichiers

"Search" dans le client eMule, permet de rechercher un fichier grâce à son nom, en interrogeant le serveur sur lequel on est connecté.

La recherche se fait en utilisant la connexion TCP 4661 initiée par le client. "Extend search" permet de faire des recherches sur les autres serveurs. La recherche se fait alors en UDP 4665.

Transferts de données entre clients

Quand un client à obtenu d’un serveur l’adresse IP d’un autre client possédant le fichier qu’il télécharge, il se connecte à cet autre client en TCP sur le port 4662.

Chaque client est mis dans la liste d’attente de l’autre. Les transferts pourront alors se faire aussi bien vers un client que vers l’autre.

Les échanges entre serveurs

Les serveurs communiquent très peu entre eux. Leurs échanges se limitent à la transmission de leur liste de serveurs, et ceci en UDP sur le port 4665.

Les ID

eDonkey attribue un ID. C’est un nombre qui correspond à votre adresse IP modifiée, ou, si le nombre est très petit, à un numéro d’ID faible sur le serveur.

Pour que les échanges puissent se faire entre les clients eDonkey2000, il faut que les clients puissent se connecter entre eux en TCP 4662. C’est pour cette raison que le serveur vérifie que la connexion est possible avec le client en TCP 4662.

Si la connexion est possible, le serveur attribue un ID fort au client (l’ID correspond alors à l’adresse IP modifiée).

Si la connexion n’est pas possible, le serveur attribue un ID faible. Le numero est alors beaucoup plus petit et est attribué ainsi : le serveur numerote les client à ID faible en commençant à 1. Il augmente ce nombre à chaque nouveau client à ID faible.

Si vous obtenez un ID de 235 par exemple, c’est que vous êtes le 235ème client à ID faible sur le serveur.

Si votre client a un ID faible, les autres clients ne pourront pas se connecter à votre client en suivant le principe decrit plus haut. Il faudra qu’il demande au serveur sur lequel vous êtes connectés, via une communication en UDP 4665, de transmettre à votre client sa demande de connection.

Le serveur auquel vous êtes connecté vous transmet cette demande en utilisant la connexion TCP 4661 initiée par votre client et c’est ensuite votre client qui se connecte à celui qui fait a fait la demande en TCP 4662.

Les clients à ID faible provoquent par conséquent un trafic sur les serveurs supérieur à celui engendré par les clients à ID fort, et contribuent ainsi à la saturation des serveurs.

Les clients à ID faible posent un autre probleme : deux clients à ID faible ne peuvent pas s’echanger de fichier.