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.
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
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.
la source
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
la source
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.
la source
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.
la source