web-dev-qa-db-fra.com

Comment fonctionne la DHT dans les torrents?

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

68

Avec les torrents sans tracker/DHT, les adresses IP des pairs sont stockées dans le DHT en utilisant l'infohash BitTorrent comme clé. Étant donné que tout ce qu'un tracker fait, fondamentalement, est de répondre aux requêtes put/get, cette fonctionnalité correspond exactement à l'interface fournie par un DHT (table de hachage distribuée): elle vous permet de rechercher et de stocker des adresses IP dans le DHT par infohash.

Ainsi, une requête "get" rechercherait un infohash BT et retournerait un ensemble d'adresses IP. Un "put" stocke une adresse IP pour un infohash donné. Cela correspond à la demande "d'annonce" que vous feriez autrement au traqueur pour recevoir un dictionnaire d'adresses IP homologues.

Dans un 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 distribuées de manière aléatoire entre les pairs participants. Le protocole DHT ( Kademlia pour 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.

59
cce

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

17
bdonlan

Ce qui se passe avec bittorrent et un DHT, c'est qu'au début, bittorrent utilise des informations intégrées dans le fichier torrent pour accéder à un tracker ou à l'un des nœuds du DHT. Puis, une fois qu'il a trouvé un nœud, il peut continuer à en trouver d'autres et continuer à utiliser le DHT sans avoir besoin d'un tracker centralisé pour le maintenir.

Les informations d'origine amorcent l'utilisation ultérieure du DHT.

12
DJ Capelis

Les nœuds DHT ont des identifiants uniques, appelés Node ID. Node Les identifiants sont choisis au hasard dans le même espace de 160 bits que les hachages d'informations BitTorrent. La proximité est mesuré en comparant Node ID tables de routage, plus le Node est proche, plus détaillé, résultant en une

Ce qui les rend alors plus optimaux que son prédécesseur "Kademlia" qui utilisait de simples entiers non signés: distance (A, B) = | A xor B | Les petites valeurs sont plus proches. XOR. En plus de ne pas être sécurisé, sa logique était défectueuse.

Si votre client prend en charge DHT, il y a 8 octets réservés dans lesquels contient 0x09 suivi d'une charge utile de 2 octets avec le port UDP et le nœud DHT. Si la prise de contact réussit, ce qui précède continuera.

1
AndreasRZA