Ich habe über Kademlia gelesen und die Grundkonzepte davon verstanden. Die Grundkonzepte von BitTorrent sind auch einfach zu verstehen. Aber beides zusammen ergibt überhaupt keinen Sinn.
Soweit ich das online herausgefunden habe, wird der Datei-Hash der Zieldatei verwendet, um eine Ziel-ID zu generieren, die im DHT nachgeschlagen werden soll. Diese Suche soll dann Peers finden, die der Ziel-ID nahe kommen. Okay, das ergibt Sinn. Aber das ist überhaupt nicht der Fall. Wie kommt es, dass der Peer, dessen ID der Ziel-ID nahe kommt, irgendetwas über Seeder oder andere Peers im Netzwerk weiß?
Jeder Versuch, die Relevanz zu untersuchen, hat zu derselben Erklärung geführt, dass der DHT-Algorithmus seine Kademlianess verwendet, um zu einem Peer zu gelangen, dessen Peer-ID nahe an der Ziel-ID liegt. Dies beantwortet jedoch nicht die Frage.
Antwort1
So wie ich es verstehe, kennt der 'Peer mit der Ziel-ID' Seeder oder andere Peers, weil diese Peers genau dasselbe Verfahren verwendet haben, umspeichernInformationen über sich selbst an diesem Ort. Der Peer mit dieser ID ist einfach ein Ort, dem alle anderen Peers zustimmen, um Daten zu speichern/abzurufen, die sich auf irgendetwas beziehen.
DHT ist eine „Distributed Hash Table“, bei der die „Hash-tabelle" bezeichnet eine Datenstruktur, die {Schlüssel⇒Wert}-Zuordnungen speichert (auch Dict, assoziatives Array, Lookup-Tabelle usw. genannt). Ein Programm, das eine Hashtabelle verwendet, kannsetze (Schlüssel, Wert)und die Hashtabelle speichert die {Schlüssel⇒Wert}-Information an der Adresse X; dann kann ein anderer Teil des Programmsget(Schlüssel)und die Hashtabelle ruft den Wert von Adresse X ab.
Wenn eine typische Hashtabelle innerhalb eines Programms verwendet wird, würde sie ein ähnliches Verfahren verwenden, um einen Speicherort für einen bestimmten Suchschlüssel zu generieren, wenn dieser gespeichert wird (der Hash), und dasselbe tun, wenn er abgerufen werden muss. Datenbanken, Dateisysteme, Git usw. tun dasselbe auf verschiedenen Ebenen; z. B. Gits .git/objects/.
DHT ist dasselbe, nur auf Netzwerkebene (der „verteilte“ Teil). Obwohl BitTorrents DHT einige BT-spezifische Dinge kennt, speichert es im Grunde immer noch nur Daten, die BitTorrent-Clients an einem vereinbarten Ort speichern müssen. Wie die Kad-Spezifikation sagt:
Um ein <Schlüssel, Wert>-Paar zu speichern, sucht ein Teilnehmer...
Das bedeutet, dass es im Allgemeinen in ein Filesharing-Protokoll wie folgt integriert werden kann:
Der Quellknoten S (der die Datei hat) berechnet die ID und sendet einen „Store“-Vorgang über das DHT-Netzwerk, wobei die Informationen {Schlüssel: Datei-ID ⇒ Wert: „verfügbar bei Knoten S“} gespeichert werden, die an den Knoten X gesendet werden, der für den Schlüssel (Datei-ID) am nächsten ist.
Die Information {Schlüssel: Datei-ID ⇒ Wert: „verfügbar bei Knoten S“} wird dann bei Knoten X gespeichert.
Ein anderer Peer-/Client-Knoten C erfährt die ID der Datei und sendet eine „Abruf“-Operation über das DHT-Netzwerk, die den Wert „verfügbar bei Knoten S“ von Knoten X abruft.
DerBitTorrent DHTwird auf ähnliche Weise wie in diesem Beispiel implementiert, es wird nur die Operation „Speichern“ aufgerufen announce_peer
und der Wert wird nicht vollständig überschrieben, sondern die Daten des Ansagers werden lediglich der bereits gespeicherten Liste der Peers hinzugefügt.