Comment fonctionne DHT dans les torrents?

Je suis en train de coder une implémentation p2p que je voudrais décentraliser, mais j’ai du mal à comprendre comment DHT fonctionne dans des protocoles comme le bittorrent. Comment le client sait-il où sont les pairs s’il n’y a pas de tracker? Les pairs sont-ils stockés dans le fichier torrent réel?

Avec les torrents sans tracker / DHT, les adresses IP homologues sont stockées dans le DHT en utilisant l’infohash BitTorrent comme clé. Étant donné que tout tracker répond, fondamentalement, à des requêtes put / get, cette fonctionnalité correspond exactement à l’interface fournie par une table de hachage dissortingbuée (DHT): elle permet de rechercher et de stocker les adresses IP dans DHT par infohash.

Ainsi, une requête “get” recherchera un BT infohash et retournera un ensemble d’adresses IP. Un “put” stocke une adresse IP pour un infohash donné. Cela correspond à la requête “announce” que vous feriez autrement au tracker pour recevoir un dictionnaire d’adresses IP homologues.

Dans une DHT, les pairs sont assignés au hasard pour stocker des valeurs appartenant à une petite fraction de l’espace clé; le hachage garantit que les clés sont dissortingbuées aléatoirement entre les pairs participants. Le protocole DHT ( Kademlia for BitTorrent) garantit que les requêtes put / get sont acheminées efficacement vers les pairs responsables de la gestion des listes d’adresses IP d’une clé donnée.

La théorie générale peut être trouvée dans l’article de Wikipedia sur Kademlia . La spécification de protocole spécifique utilisée dans bittorrent est ici: http://wiki.theory.org/BitTorrentDraftDHTProtocol

Ce qui se passe avec bittorrent et un DHT, c’est qu’au début, bittorrent utilise les informations incorporées dans le fichier torrent pour accéder à un tracker ou à un ensemble de nœuds de la DHT. Ensuite, une fois qu’il trouve un nœud, il peut continuer à en trouver d’autres et continuer à utiliser le DHT sans avoir besoin d’un système de suivi centralisé pour le maintenir.

L’information d’origine amorce l’utilisation ultérieure de la DHT.

Les nœuds DHT ont des identifiants uniques, appelés ID de nœud. Les identifiants de nœuds sont choisis au hasard dans le même espace de 160 bits que les info-hachages BitTorrent. La proximité est mesurée en comparant les tables de routage des ID de nœuds, plus le nœud est proche, plus le

Ce qui les rend alors plus optimales que son prédécesseur “Kademlia” qui utilisait des entiers simples non signés: distance (A, B) = | A x ou B | Les plus petites valeurs sont plus proches. XOR. En plus de ne pas être en sécurité, sa logique était imparfaite.

Si votre client prend en charge DHT, il y a 8 octets réservés qui contiennent 0x09 suivi d’une charge utile de 2 octets avec le noeud UDP Port et DHT. Si la poignée de main réussit, le processus ci-dessus se poursuivra.