web-dev-qa-db-fra.com

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

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

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

Je comprends aussi l’idée d’échange entre pairs: les clients qui sont 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? C’est-à-dire comment un nouveau client peut-il rejoindre un essaim sans le suivi ou la connaissance d’au moins un membre de l’essaim avec lequel échanger des pairs?

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

46
Steve V.

Résumé

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?

Vous ne pouvez pas. C'est impossible.*

* (sauf si un noeud de votre réseau local est déjà un noeud de 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 d'eux. Mais comment ils se sont-ils amorcés eux-mêmes? Finalement, vous arriverez dans une situation où vous avez besoin pour vous connecter à Internet public. L’Internet public est unicast seulement, pas multicast, vous devez donc utiliser des listes de pairs prédéterminées.)


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 exécutez une procédure d’amorçage , qui requiert obligatoirement que vous sachiez que, dans advance, 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 des informations de connectivité pour plusieurs nœuds, puis vous naviguez dans cette structure de "graphe" pour obtenir des connexions à un nombre croissant de nœuds, qui peuvent 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 aucun autre membre - est basée sur une fausse hypothèse.

La réponse simple à votre question en gras est, vous ne le faites pas . Si vous ne connaissez AUCUNE information sur un hôte, même 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 aussi décentralisée que le mécanisme de jonction, et parce que le mécanisme de jonction est assez fragile (il n’ya aucun moyen de "diffuser" sur tout l’Internet! Vous devez donc unicastKademlia DHT n’est pas vraimentdécentralisée. Pas dans le sens le plus strict de la Parole.

Imaginez ce scénario: quelqu'un qui veut que P2P s'arrête s'éteint et prépare une attaque sur tousnoeuds DHT stables couramment utilisés qui sont utilisés pour démarrer. Une fois leur attaque mise en scène, ils la lancent sur tousnœ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 à trackers centraliséspour télécharger des listes traditionnelles de pairs à partir de ceux-ci. Eh bien, s’ils attaquent aussi les traqueurs, alors vous êtes vraiment, vraimentdans un ruisseau. 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 les nœuds d'amorçage "pseudo-centralisés" ont tous disparu, les nœuds intérieurs de la DHT, qui ne le sont pas, car personne à l'extérieur de la DHT ne connaît les nœuds intérieurs, inutile; 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, du redémarrage pour les 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 et les mettrait hors ligne également.

48
allquixotic

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é "noeuds" (key as in "key paire/valeur "; comme un en-tête de section, pas une clé de cryptage) vers le 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.

20
Spiff

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.

Distributed 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

1
z8po

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 swarmin 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 initialiser 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 à partir de l'essaim.

0
tameit

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

Cela ressemble à la façon dont un suivi fonctionne, sauf que quasiment tout le monde peut être un nœud de démarrage, 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.

0
chovy