Table de hachage distribuée

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir DHT.

Une table de hachage distribuée (ou DHT pour Distributed Hash Table), est une technologie permettant l'identification et l'obtention, dans un système réparti - comme certains réseaux P2P - d'une information. L'ensemble de la table de hachage est constituée virtuellement par tous ses constituants répartis sur tous les éléments du réseau, qui en possèdent chacun une partie.

Les tables de hachage distribuées sont utilisées notamment dans les protocoles Chord, P2P CAN, Tapestry, Kademlia (utilisé par eMule), Ares Galaxy, YaCy, mais aussi dans de nombreux clients récents pour le protocole BitTorrent comme Azureus, Bitcomet, KTorrent, Transmission ou encore µTorrent. Le premier client BitTorrent à utiliser une DHT était Azureus, suivi du client officiel BitTorrent qui créa une version différente. La version du client officiel fut alors appelée Mainline DHT. Dorénavant la plupart des clients supportent la version Mainline DHT.

Distributed hash tables

Principe[modifier | modifier le code]

Supposons un grand nombre d'utilisateurs (5 millions) ayant lancé leur logiciel de partage de fichiers en pair à pair (Peer-to-Peer, P2P) sur leur ordinateur. Chacun partage quelques fichiers (audio, images, vidéo, multimédia, etc.) Un utilisateur (Luc) possède, par exemple, l'album (fictif) Les idées saines[1] de Serge Dassault (disponible sous licence Creative Commons).

Supposons qu'un autre utilisateur (Pierre) souhaite télécharger cet album. Comment son logiciel de P2P peut-il trouver l'ordinateur de Luc ? Le logiciel de Pierre pourrait éventuellement demander aux 5 millions d'ordinateurs si par hasard ils possèdent cet album. Le logiciel de Luc répondrait alors : « Je le possède et je peux commencer à le transférer. » Il serait cependant bien lent de demander aux 5 millions d'ordinateurs s'ils ont cet album, car il y aurait en permanence des millions de questions du type « Je cherche tel album, l'as-tu ? », entraînant des millions de réponses : « Non, désolé ! ».

Un grand annuaire archivant les noms des fichiers partagés par tous les utilisateurs résoudrait la question : il suffirait de demander à ce « grand annuaire » (= la table de hachage) l'album de musique Les idées saines de Serge Dassault pour obtenir la réponse : « il est disponible sur l'ordinateur de Luc. (et celui de Mathieu, de Paul, etc.) » C'est ainsi que fonctionnait la première génération de réseaux P2P. Il y avait un serveur central qui servait de « grand annuaire. » (exemples : Napster, Audiogalaxy, Edonkey, Kazaa) Cette solution est de moins en moins utilisée en raison de sa fragilité : que faire lorsque le serveur central tombe en panne ? prend feu ? est saisi par la police ? Le réseau ne fonctionne alors plus, on ne peut plus faire aucune recherche sur les fichiers partagés.

Les programmeurs de logiciels P2P ont alors eu une idée : il faudrait que le « grand annuaire » ne soit pas sur un seul ordinateur, mais sur des centaines. Et ils se sont dit « on n'a qu'à faire notre logiciel de telle façon que chaque utilisateur soit responsable d'un petit bout du grand annuaire. » Chacun des 5 millions d'utilisateurs est responsable d'une petite partie: on dit que c'est une table de hachage distribuée.

Par exemple, l'utilisateur Jean-Claude va être responsable de tous les fichiers qui commencent par A, Toto va être responsable de tous les fichiers qui commencent par B, etc... Lorsqu'un nouvel utilisateur se connecte au réseau, la première chose que le logiciel va faire est de dire quels fichiers il peut partager. S'il possède par exemple le film Big Buck Bunny, il va dire à l'utilisateur Toto (qui est responsable des fichiers qui commencent par B) : « j'ai le film Big Buck Bunny. Si des gens le veulent, il est disponible chez moi. » Les recherches deviennent donc très rapides. Si on cherche Big Buck Bunny, on va directement demander à la personne responsable de la lettre « B ».

La réalité est un peu plus complexe : il ne faut pas qu'une seule personne soit responsable des mots qui commencent par "B", car si elle éteint son ordinateur on perd une partie de l'annuaire. Il faut donc introduire une certaine redondance dans l'annuaire, et donc plusieurs ordinateurs sont simultanément responsables des mêmes listes. De plus, vu qu’il y a des centaines de millions de fichiers partagés, le principe de division de l'annuaire n'est pas basé sur les lettres de l'alphabet mais sur une table de hachage des mots des titres des fichiers.

Enfin, chaque ordinateur n'a pas besoin de connaître tous les ordinateurs qui archivent des mots. Il connaîtra typiquement une centaine d'ordinateurs. Si l'utilisateur fait une recherche sur Big Buck Bunny et ne connaît pas l'ordinateur qui archive les fichiers commençant par B, alors :

  • il demandera à l'ordinateur le plus proche (par exemple l'ordinateur qui archive les fichiers commençant par C) : « Connais-tu l'ordinateur s'occupant des mots commençant par B ? »
  • celui-ci répondra « Parmi mes voisins, je connais les ordinateurs qui s'occupent des B, et même je connais des ordinateurs qui s'occupent des fichiers commençant par BA, BI, BO, BU, donc tu ferais bien de demander à celui qui connaît les fichiers commençant par BI s'il a par hasard le fichier que tu cherches. »
  • on interroge le responsable des « BI » et il dira : « Oui, je connais les ordinateurs qui ont le film que tu veux » ou alors, s'il ne les connaît pas, il répondra « Je ne connais pas ton fichier, par contre je connais un ordinateur qui s'occupe des fichiers commençant par BIG, donc demande-lui. »

Notes et références[modifier | modifier le code]

Annexes[modifier | modifier le code]

Voir aussi[modifier | modifier le code]