Wie funktioniert DHT in Torrents?

79

Ich codiere eine P2P-Implementierung, die ich dezentralisieren möchte, habe jedoch Probleme zu verstehen, wie DHT in Protokollen wie Bittorrent funktioniert. Woher weiß der Kunde, wo sich die Peers befinden, wenn kein Tracker vorhanden ist? Sind Peers in der eigentlichen Torrent-Datei gespeichert?

Christopher Tarquini
quelle

Antworten:

73

Bei trackerlosen / DHT-Torrents werden Peer-IP-Adressen im DHT gespeichert, wobei der BitTorrent-Infohash als Schlüssel verwendet wird. Da ein Tracker im Grunde genommen nur auf Put / Get-Anfragen reagiert, entspricht diese Funktionalität genau der Schnittstelle, die eine DHT (Distributed Hash Table) bietet: Sie können IP-Adressen per Infohash im DHT suchen und speichern.

Eine "get" -Anforderung würde also einen BT-Infohash nachschlagen und einen Satz von IP-Adressen zurückgeben. Ein "Put" speichert eine IP-Adresse für einen bestimmten Infohash. Dies entspricht der "Ansage" -Anforderung, die Sie andernfalls an den Tracker richten würden, um ein Wörterbuch mit Peer-IP-Adressen zu erhalten.

In einem DHT werden Peers zufällig zugewiesen, um Werte zu speichern, die zu einem kleinen Bruchteil des Schlüsselraums gehören. Das Hashing stellt sicher, dass die Schlüssel zufällig auf die teilnehmenden Peers verteilt werden. Das DHT-Protokoll ( Kademlia for BitTorrent) stellt sicher, dass Put / Get-Anforderungen effizient an die Peers weitergeleitet werden, die für die Verwaltung der IP-Adresslisten eines bestimmten Schlüssels verantwortlich sind.

cce
quelle
2
Woher bekommt es die Portnummer für jede IP?
Janus Troelsen
2
Der Port ist zusammen mit der IP-Adresse des Peers enthalten: bittorrent.org/beps/bep_0005.html#contact-encoding
cce
2
Sind Werte des Schlüsselraums jemals verloren gegangen / abgelaufen?
Schulwitz
3
Ja, Werte können aufgrund von Ablauf (TTLs) oder Abwanderung verloren gehen (wenn Peers kommen und gehen, nehmen sie möglicherweise Teile des Schlüsselbereichs mit, wenn nicht genügend Replikate für diese Werte vorhanden sind). Um einen Wert für lange Zeiträume beizubehalten, müssten ständig PUT-Anforderungen ausgegeben werden. Da in BitTorrent-Schwärmen Peers ständig beitreten und gehen, ist dies weniger problematisch, und langlebige Peers können sich regelmäßig erneut beim DHT melden.
cce
3
Ihre Antwort ist besser, wenn Sie Ihre Kommentare einfließen lassen.
Strg-Alt-Delor
12

Was mit Bittorrent und einem DHT passiert, ist, dass Bittorrent zu Beginn Informationen verwendet, die in die Torrent-Datei eingebettet sind, um entweder zu einem Tracker oder einem von mehreren Knoten des DHT zu gelangen. Sobald ein Knoten gefunden wurde, kann er weiterhin andere finden und das DHT weiterhin verwenden, ohne dass ein zentraler Tracker für die Wartung erforderlich ist.

Die ursprünglichen Informationen booten die spätere Verwendung des DHT.

DJ Capelis
quelle
1

DHT-Knoten haben eindeutige Kennungen, die als Knoten-ID bezeichnet werden. Knoten-IDs werden zufällig aus demselben 160-Bit-Speicherplatz wie BitTorrent-Info-Hashes ausgewählt. Die Nähe wird durch Vergleichen der Routing-Tabellen der Knoten-ID gemessen. Je näher der Knoten ist, desto detaillierter wird das Ergebnis

Was macht sie dann optimaler als ihre Vorgängerin "Kademlia", die einfache vorzeichenlose ganze Zahlen verwendete: distance (A, B) = | A xor B | Kleinere Werte sind näher. XOR. Abgesehen davon, dass es nicht sicher war, war seine Logik fehlerhaft.

Wenn Ihr Client DHT unterstützt, sind 8 Bytes reserviert, die 0x09 enthalten, gefolgt von einer 2-Byte-Nutzlast mit dem UDP-Port und dem DHT-Knoten. Wenn der Handshake erfolgreich ist, wird der oben genannte Vorgang fortgesetzt.

AndreasRZA
quelle