En termes simples, comment un client BitTorrent découvre-t-il initialement des pairs utilisant DHT?


45

J'ai déjà lu cette réponse du SuperUser et cet article de Wikipedia, mais les deux sont trop techniques pour que je puisse vraiment comprendre.

Je comprends l’idée d’un tracker: les clients se connectent à un serveur central qui tient à jour une liste de pairs dans un essaim.

Je comprends aussi l’idée d’échange entre pairs: les clients qui se trouvent déjà dans un essaim s’envoient la liste complète de leurs pairs. Si de nouveaux pairs sont découverts, ils sont ajoutés à la liste.

Ma question est, comment fonctionne DHT? Autrement dit, comment un nouveau client peut-il rejoindre un essaim sans un pisteur ou la connaissance d’au moins un membre de l’essaim avec lequel échanger des pairs?

(Remarque: les explications simples sont préférables.)

Réponses:


48

Sommaire

Comment un nouveau client peut-il rejoindre un essaim sans un pisteur ou la connaissance d'au moins un membre de l'essaim avec lequel échanger des pairs?

Tu ne peux pas. C'est impossible.*

* (À moins qu'un nœud de votre réseau local ne soit déjà un nœud dans la DHT. Dans ce cas, vous pouvez utiliser un mécanisme de diffusion, tel que Avahi, pour "découvrir" cet homologue et l'amorcer à partir de celui-ci. Mais comment ils se bootstrap? Finalement, vous tomberez sur une situation où vous devez vous connecter à l'Internet. Et l'Internet est unicast, et non multicast, de sorte que vous êtes coincé avec l' aide de listes pré-déterminé de pairs.)


Les références

Bittorrent DHT est implémenté via un protocole appelé Kademlia , qui est un cas particulier du concept théorique d’une table de hachage distribuée .


Exposition

Avec le protocole Kademlia, lorsque vous rejoignez le réseau, vous suivez une procédure d’ amorçage , qui requiert obligatoirement que vous connaissiez au préalable l’adresse IP et le port d’au moins un nœud participant déjà au réseau DHT. Le suivi auquel vous vous connectez, par exemple, peut être lui-même un nœud DHT. Une fois que vous êtes connecté à un nœud DHT, vous procédez au téléchargement des informations à partir du DHT, qui vous fournit les informations de connectivité pour plusieurs nœuds, puis vous naviguez dans cette structure de "graphe" pour obtenir des connexions vers de plus en plus de nœuds, qui peuvent fournir les deux. connectivité à d'autres nœuds et données utiles (morceaux du téléchargement).

Je pense que votre question en gras - celle de savoir comment rejoindre un réseau Kademlia DHT sans connaître d’ autres membres - est basée sur une fausse hypothèse.

La réponse simple à votre question en gras est que vous ne le faites pas . Si vous ne connaissez AUCUNE information sur un seul hôte susceptible de contenir des métadonnées DHT, vous êtes bloqué - vous ne pouvez même pas vous lancer. Je veux dire, bien sûr, vous pourriez tenter par la force brute de découvrir une adresse IP sur l’Internet public avec un port ouvert permettant de diffuser des informations DHT. Mais plus probablement, votre client BT est codé en dur sur une adresse IP ou DNS statique spécifique, qui se résout en un nœud DHT stable, qui fournit uniquement les métadonnées DHT.

Fondamentalement, la DHT est seulement aussi décentralisé que le mécanisme de liaison, et parce que le mécanisme de liaison est assez fragile (il n'y a aucun moyen de « diffusion » sur tout l'Internet! Donc vous devez unicast à un hôte pré-attribuée individuel pour obtenir la DHT Kademlia DHT n’est pas vraiment décentralisée. Pas dans le sens le plus strict du mot.

Imaginez ce scénario: quelqu'un qui souhaite que P2P s'arrête s'éteint et prépare une attaque sur tous les nœuds DHT stables couramment utilisés qui sont utilisés pour le démarrage. Une fois leur attaque mise en scène, ils la lancent sur tous les nœuds en même temps. Wham ; chaque nœud d'amorçage DHT est en panne d'un coup. Maintenant quoi? Vous devez vous connecter à des suivis centralisés pour télécharger des listes traditionnelles de pairs à partir de ceux-ci. Eh bien, s’ils attaquent aussi les traqueurs, alors vous êtes vraiment, vraimentune crique. En d'autres termes, Kademlia et l'ensemble du réseau BT sont contraints par les limitations d'Internet lui-même, en ce sens qu'il existe un nombre fini (et relativement petit) d'ordinateurs qu'il vous faudrait attaquer ou mettre hors ligne avec succès pour éviter> 90% des utilisateurs de se connecter au réseau.

Une fois que tous les nœuds d'amorçage "pseudo-centralisés" ont disparu, les nœuds intérieurs de la DHT, qui ne démarrent pas parce que personne à l'extérieur de la DHT ne connaît les nœuds intérieurs , sont inutiles; ils ne peuvent pas amener de nouveaux nœuds dans la DHT. Ainsi, à mesure que chaque nœud intérieur se déconnecte de la DHT au fil du temps, en raison de l’arrêt des ordinateurs, de la réinitialisation des mises à jour, etc., le réseau s’effondrait.

Bien entendu, pour contourner ce problème, quelqu'un pourrait déployer un client BitTorrent corrigé avec une nouvelle liste de nœuds DHT stables prédéterminés ou d'adresses DNS, et annoncer à haute voix à la communauté P2P d'utiliser cette nouvelle liste à la place. Mais cela deviendrait une situation de type "whack-a-mole" où l'agresseur (le mangeur de nœuds) téléchargerait ces listes progressivement, ciblerait les nouveaux nœuds de démarrage courageux, puis les mettrait hors ligne également.


La façon dont vous décrivez DHT ressemble à l'échange entre pairs.
Celeritas

La chose distribuée à propos de DHT est que la charge de données réelle - c'est-à-dire la liste des adresses IP et des ports où les fichiers peuvent être téléchargés - est distribuée. Dans un échange entre homologues, toute la liste est stockée sur un ordinateur, généralement le suivi, et téléchargée de la même manière sur un téléchargement de fichier. Je pourrais le mentionner dans ma réponse, mais toute la question (et les réponses) concerne uniquement la découverte initiale ou l’adhésion au réseau DHT, et non pas ce qui se passe après votre adhésion.
Allquixotic

1
Toucher tous les nœuds d'amorçage empêcherait les nouveaux utilisateurs de démarrer, mais pas nécessairement les utilisateurs existants qui passent en mode hors connexion, puis reviennent. J'ai l'impression que plusieurs clients se souviennent de leur ensemble de nœuds actifs et les utilisent pour se reconnecter, plutôt que de démarrer à chaque fois.
Clacke

Avec des projets tels que masscan ( github.com/robertdavidgraham/masscan ), il devrait être possible de découvrir des nœuds DHT sans répertoire centralisé
newlog

19

Réponse courte: Cela provient du fichier .torrent.

Lorsqu'un client BitTorrent génère un fichier .torrent sans tracker (c'est-à-dire lorsqu'un utilisateur s'apprête à partager quelque chose de nouveau via BitTorrent), il ajoute une clé "nœuds" (clé comme dans "paire clé / valeur"; comme un en-tête de section, pas une clé de chiffrement) au fichier .torrent qui contient les K nœuds DHT les plus proches connus de ce client.

http://www.bittorrent.org/beps/bep%5F0005.html#torrent-file-extensions

Un dictionnaire de torrent sans suiveur n'a pas de clé "annonce". Au lieu de cela, un torrent sans suiveur a une clé "nœuds". Cette clé doit être définie sur les K nœuds les plus proches dans la table de routage du client qui génère le torrent. Alternativement, la clé pourrait être définie sur un bon noeud connu, tel que celui exploité par la personne générant le torrent. Veuillez ne pas ajouter automatiquement "router.bittorrent.com" aux fichiers torrent ni ajouter automatiquement ce nœud aux tables de routage des clients.

Ainsi, lorsque vous alimentez votre client BitTorrent avec le fichier .torrent d'un torrent sans suiveur que vous souhaitez télécharger, il utilise la valeur de cette clé "nœuds" du fichier .torrent pour rechercher ses premiers nœuds DHT.


3
C'est une bonne information explicative. Je pense que votre réponse explique ce que les clients BitTorrent actuels font pour gérer les limitations théoriques et les problèmes identifiés dans ma réponse. Espérons que nos deux réponses sont votées, car elles expliquent différents aspects de la réponse.
Allquixotic

3
Est-ce pour cela que la "fusion de nouveaux fichiers torrent avec téléchargement torrent" chez de nombreux clients donne vie à un torrent mort?
Jesvin Jose

2
@aitchnyu oui, mais le fichier torrent peut aussi avoir des trackers supplémentaires / différents.
Longneck

2
Il semble qu'aucun client BitTorrent n'inclue réellement les informations sur les nœuds. J'ai testé Transmission, Vuze, Deluge, Mainline et autres.
Aeyoun

1

vous ne pouvez pas! vous devez connaître au moins une adresse IP de l'un des essaims, c'est la faiblesse d'un réseau P2P. Vous pouvez diffuser aveuglément pour trouver la première adresse IP, mais dans un grand réseau, si tout le monde le fait, nous aurons un problème de congestion. Vous pouvez utiliser un cache, mais cela n’est possible que pour de grands essaims (cache d’adresses homologues plus grand). Vous devez toujours connecter un tracker pour demander uniquement la première adresse IP.

Distribué dans DHT signifie que les clients ne doivent pas contenir toute la liste contenant la somme md5 du nom du fichier partagé, avec les pairs correspondants. La liste de hachage est formée de formes égales et réparties de manière redondante dans l’essaim. Si un pair se déconnecte, il y en a un autre avec la même partie de la hashlist. Les pairs partagent l'adresse du bon détenteur de la partie hashlist.

torrent-freak a écrit un post sur ce sujet


0

Comment un nouveau client peut-il rejoindre un essaim sans un pisteur ou la connaissance d'au moins un membre de l'essaim avec lequel échanger des pairs?

Il le demande.

Les clients Bittorrent qui prennent en charge le DHT exécutent deux applications peer-to-peer distinctes.

Le premier effectue le partage de fichiers: Un essaim dans Bittorrent Lingo est un groupe de pairs partageant un objet Bittorrent (par exemple, une structure de fichiers ou de répertoires). Chaque objet bittorent a des métadonnées qui sont enregistrées dans un fichier .torrent. (Il comprend la taille de l'objet, le nom du dossier, éventuellement des informations de suivi ou des nœuds. Ect.) Le hachage des métadonnées requises pour télécharger cet objet bittorrent est appelé infohash.

La DHT est essentiellement une seconde application P2P visant à remplacer les traqueurs: elle stocke des paires (infohash, swarm) et met à jour l'essaim s'il reçoit des messages d'annonce. Un nouveau client doit connaître un "nœud" (jargon bittorrent pour un pair du DHT) pour amorcer ses informations sur le DHT. Ici, les arguments donnés par @allquixotic s'appliquent. La MDHT étant actuellement composée de plus de 7 millions de pairs, une attaque par déni de service continu semble peu probable.

Il peut alors interroger la DHT sur un infohash et ne doit pas utiliser de suivi ou connaître un homologue faisant partie de l'essaim auparavant. Si l'un des pairs qu'il contacte prend en charge le partage de métadonnées, il n'a besoin que de l'infohash pour récupérer le fichier .torrent de l'essaim.


0

La plupart des clients réseau P2P sont démarrés à partir d'une liste de pairs source auxquels ils se sont initialement connectés ... une fois qu'ils se sont connectés à un pair démarré, le reste est téléchargé de manière distribuée. Il se connecte à l'homologue d'amorçage et télécharge sa liste d'homologues DHT, puis va à chacun d'eux et fait la même chose, etc., etc.

Par exemple:

Voici une liste de nœuds d'amorçage:

https://github.com/dontcontactme/p2pspider/blob/master/lib/dhtspider.js#L10

Voici où le client se connecte pour hydrater la liste des pairs:

https://github.com/dontcontactme/p2pspider/blob/master/lib/dhtspider.js#L60

Ceci est similaire au fonctionnement d'un suivi, sauf que quiconque peut être un nœud d'amorçage, il est donc presque impossible de le fermer.

Le portefeuille de base Bitcoin fonctionne de la même manière. Il vous permet de changer les homologues d'amorçage de démarrage si, pour une raison quelconque, ceux par défaut sont arrêtés.


Les liens sont morts
zella
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.