Zusammenfassung
Wie kann ein neuer Kunde einem Schwarm beitreten, ohne dass er einen Tracker oder das Wissen mindestens eines Mitglieds des Schwarms besitzt, mit dem er Peers austauschen kann?
Das kannst du nicht. Es ist unmöglich.*
* (Es sei denn, ein Knoten auf Ihrer lokales Netzwerk ist zufällig schon ein Knoten im DHT. In diesem Fall könnten Sie einen Broadcast-Mechanismus wie Avahi verwenden, um diesen Peer zu "entdecken" und von ihm zu booten. Aber wie war das? Sie Bootstrap selbst? Schließlich werden Sie in eine Situation geraten, in der Sie eine Verbindung zum öffentlichen Internet herstellen müssen. Und das öffentliche Internet ist nur für Unicast gedacht, nicht für Multicast.
Verweise
Bittorrent DHT wird über ein Protokoll implementiert, das als Kademlia Dies ist ein Spezialfall des theoretischen Konzepts von a Verteilte Hashtabelle .
Exposition
Wenn Sie sich mit dem Kademlia-Protokoll dem Netzwerk anschließen, durchlaufen Sie a Bootstrapping Verfahren, das unbedingt erfordert, dass Sie wissen, im Voraus , die IP-Adresse und den Port von mindestens einem Knoten, der bereits am DHT-Netzwerk teilnimmt. Der Tracker, mit dem Sie sich beispielsweise verbinden, kann selbst ein DHT-Knoten sein. Sobald Sie mit einem DHT-Knoten verbunden sind, laden Sie Informationen vom DHT herunter, die Ihnen Konnektivitätsinformationen für mehr Knoten bereitstellen. Navigieren Sie dann zu dieser "Diagramm" -Struktur, um Verbindungen zu immer mehr Knoten zu erhalten, die beide bereitstellen können Konnektivität zu anderen Knoten und Nutzdaten (Teile des Downloads).
Ich denke, Ihre eigentliche Frage ist fett gedruckt: Wie kann man einem Kademlia DHT-Netzwerk beitreten, ohne es zu wissen? irgendein andere Mitglieder - basiert auf einer falschen Annahme.
Die einfache Antwort auf Ihre Frage in Fettdruck lautet: du nicht . Wenn Sie überhaupt keine Informationen über einen Host kennen, der DHT-Metadaten enthalten könnte, stecken Sie fest - Sie können nicht einmal loslegen. Ich meine, klar, Sie könnten brutal versuchen, eine IP im öffentlichen Internet mit einem offenen Port zu entdecken, der DHT-Informationen sendet. Wahrscheinlicher ist Ihr BT-Client jedoch auf eine bestimmte statische IP- oder DNS-Adresse festgelegt, die in einen stabilen DHT-Knoten aufgelöst wird, der nur die DHT-Metadaten bereitstellt.
Grundsätzlich ist die DHT nur so dezentral wie der Verbindungsmechanismus, und weil der Verbindungsmechanismus ziemlich spröde ist (es gibt keine Möglichkeit, über das gesamte Internet zu "senden"! Sie müssen also Unicast Kademlia DHT ist es nicht Ja wirklich dezentral. Nicht im engsten Sinne des Wortes.
Stellen Sie sich dieses Szenario vor: Jemand, der möchte, dass P2P gestoppt wird, geht aus und bereitet einen Angriff auf vor alles Häufig verwendete stabile DHT-Knoten, die für das Bootstrapping verwendet werden. Sobald sie ihren Angriff inszeniert haben, springen sie auf alles Knoten auf einmal. Wham ; Jeder einzelne Bootstrapping-DHT-Knoten ist auf einen Schlag ausgefallen. Was jetzt? Sie haben keine Verbindung mehr zu zentralisierte Tracker Hier können Sie traditionelle Listen von Kollegen herunterladen. Nun, wenn sie auch die Tracker angreifen, dann sind Sie wirklich Ja wirklich einen Bach hinauf. Mit anderen Worten, Kademlia und das gesamte BT-Netzwerk sind durch die Beschränkungen des Internets selbst eingeschränkt, da es eine begrenzte (und relativ kleine) Anzahl von Computern gibt, die Sie erfolgreich angreifen oder offline schalten müssten, um & gt; 90 zu verhindern % der Benutzer können keine Verbindung zum Netzwerk herstellen.
Sobald die "pseudozentralisierten" Bootstrapping-Knoten alle verschwunden sind, werden die inneren Knoten des DHT, die nicht mehr booten, da Niemand außerhalb des DHT kennt die inneren Knoten , sind nutzlos; Sie können keine neuen Knoten in die DHT bringen. Wenn sich also jeder interne Knoten im Laufe der Zeit vom DHT abmeldet, entweder weil Leute ihren Computer herunterfahren, wegen Updates neu starten usw., würde das Netzwerk zusammenbrechen.
Um dies zu umgehen, könnte jemand einen gepatchten BitTorrent-Client mit einer neuen Liste festgelegter stabiler DHT-Knoten oder DNS-Adressen bereitstellen und der P2P-Community lautstark die Verwendung dieser neuen Liste ankündigen. Dies würde jedoch zu einer "Whats-a-Mole" -Situation werden, in der der Angreifer (der Node-eater) diese Listen schrittweise selbst herunterladen und die tapferen neuen Bootstrapping-Knoten anvisieren und dann auch offline schalten würde.
Kurze Antwort: Es wird aus der Torrent-Datei abgerufen.
Bei einem BitTorrent-Client erzeugt Eine trackerlose .torrent-Datei (dh, wenn jemand bereit ist, etwas Neues über BitTorrent freizugeben), fügt einen "Nodes" -Schlüssel hinzu (Schlüssel wie in "Schlüssel / Wert-Paar"; wie eine Abschnittsüberschrift, kein Kryptoschlüssel). in die Torrent-Datei, die die K nächsten DHT-Knoten enthält, die diesem Client bekannt sind.
http://www.bittorrent.org/beps/bep%5F0005.html#torrent-file-extensions
Wenn Sie also Ihrem BitTorrent-Client die .torrent-Datei eines trackerlosen Torrents zuführen, den Sie herunterladen möchten, verwendet er den Wert dieses "Knoten" -Schlüssels aus der .torrent-Datei, um seine ersten DHT-Knoten zu finden.
quelle
du kannst nicht! man muss mindestens eine ip von einem der schwärme kennen, das ist die schwäche eines p2p netzwerks. Sie können blind Broadcasts senden, um die erste IP-Adresse zu ermitteln. In einem großen Netzwerk treten jedoch Stauprobleme auf, wenn alle dies tun. Sie können einen Cache verwenden, dies ist jedoch nur für große Schwärme möglich (größerer Peer-Adress-Cache). Sie müssen immer einen Tracker anschließen, um nur die erste IP abzufragen.
Verteilt In DHT bedeutet dies, dass Clients nicht die gesamte Liste mit der MD5-Summe des Namens der gemeinsam genutzten Dateien zusammen mit entsprechenden Peers enthalten müssen. Die Liste der Hashs besteht aus gleich großen Teilen und wird mit Redundanz über den gesamten Schwarm verteilt. Wenn eine Peer-Verbindung getrennt wird, gibt es irgendwo eine andere mit demselben Teil der Hashliste. Die Peers teilen sich die Adresse mit dem guten Inhaber des Hashlistenteils.
torrent-freak hat einen Post zu diesem Thema verfasst
quelle
Es fragt danach.
Bittorrent-Clients, die das unterstützen DHT Führen Sie zwei separate Peer-to-Peer-Anwendungen aus.
Der erste führt das Filesharing durch: A Schwarm In bittorrent ist lingo eine Gruppe von Peers, die ein Bittorrent-Objekt (z. B. eine Datei- oder Verzeichnisstruktur) gemeinsam nutzen. Jedes bittorente Objekt verfügt über einige Metadaten, die in einer Torrent-Datei gespeichert werden. (Dazu gehören Objektgröße, Name des Ordners, möglicherweise Trackerinformationen oder Knoten. Ect.) Der Hash der Metadaten, die zum Herunterladen dieses Bittorrent-Objekts erforderlich sind, wird als Infohash bezeichnet.
Das DHT ist im Grunde eine zweite P2P-Anwendung, die Tracker ersetzen soll: Es speichert Paare von (Infohash, Schwarm) und aktualisiert den Schwarm, wenn er Ankündigungsnachrichten empfängt. Ein neuer Client muss über Kenntnisse eines "Knotens" (Bittorrent-Jargon für einen Kollegen des DHT) verfügen, um seine DHT-Informationen zu booten. Hier gelten die Argumente von @allquixotic. Da die MDHT derzeit aus über 7 Millionen Kollegen besteht, ist ein anhaltender Denial-of-Service-Angriff unwahrscheinlich.
Es kann dann die DHT in Bezug auf einen Infohash abfragen und muss keinen Tracker verwenden oder einen Peer kennen, der Teil des Schwarms ist. Wenn einer der Peers, den er kontaktiert, unterstützt Austausch von Metadaten es muss nur der infohash die .torrent-datei aus dem schwarm holen können.
quelle
Die meisten p2p-Netzwerk-Clients werden von einer Liste von Seed-Peers gebootet, mit denen sie sich anfänglich verbinden. Sobald sie sich mit einem Boot-Peer verbinden, wird der Rest verteilt heruntergeladen. Es stellt eine Verbindung zum Bootstrap-Peer her und lädt die DHT-Liste der Peers herunter. Anschließend wird zu jedem dieser Peers gewechselt und das Gleiche ausgeführt usw. usw.
Zum Beispiel:
Hier ist eine Liste von Bootstrap-Knoten:
https://github.com/dontcontactme/p2pspider/blob/master/lib/dhtspider.js#L10
Hier verbindet sich der Client mit ihnen, um die Peer-Liste zu hydrieren:
https://github.com/dontcontactme/p2pspider/blob/master/lib/dhtspider.js#L60
Dies funktioniert ähnlich wie ein Tracker, außer dass so ziemlich jeder ein Bootstrap-Knoten sein kann, so dass es fast unmöglich ist, ihn herunterzufahren.
Bitcoin Core Wallet funktioniert genauso. Damit können Sie die Bootstrap-Seed-Peers ändern, wenn aus irgendeinem Grund die Standard-Peers heruntergefahren werden.
quelle