Zum ersten Mal habe ich eine Magnetverbindung verwendet . Ich war neugierig, wie es funktioniert, habe die technischen Daten nachgeschlagen und keine Antworten gefunden. Das Wiki sagt xt
"genaues Thema" und wird vom Format ( btih
in diesem Fall) mit einem SHA1-Hash gefolgt . Ich habe gesehen, dass base32 erwähnt wurde, da ich wusste, dass es 5 Bit pro Zeichen und 32 Zeichen sind. Ich fand, dass es genau 160 Bit enthält, was genau der Größe des SHA1 entspricht.
Es gibt keinen Platz für eine IP-Adresse oder etwas anderes, es ist nur ein SHA1. Wie findet der BitTorrent-Client die eigentliche Datei? Ich habe URL Snooper aktiviert, um zu sehen, ob es eine Seite besucht (mit TCP) oder eine Suche oder ähnliches durchführt, aber nichts ist passiert. Ich habe keine Ahnung, wie der Kunde Peers findet. Wie funktioniert das?
Wovon ist der Hash? Ist es ein Hash eines Arrays aller Datei-Hashes zusammen? Vielleicht ist es ein Hash der tatsächlich benötigten Torrent-Datei (bestimmte Informationen entfernen)?
In einer VM habe ich versucht, eine Magnetverbindung mit uTorrent (das frisch installiert wurde) herzustellen, und es ist gelungen, Peers zu finden. Woher kam der erste Peer? Es war frisch und es gab keine anderen Ströme.
quelle
Antworten:
Eine BitTorrent-Magnetverbindung identifiziert einen Torrent unter Verwendung von 1 a SHA-1 oder abgeschnittenem SHA-256-Hashwert, der als "Infohash" bekannt ist. Dies ist derselbe Wert, den Peers (Clients) verwenden, um Torrents bei der Kommunikation mit Trackern oder anderen Peers zu identifizieren. Eine herkömmliche Torrent-Datei enthält eine Datenstruktur mit zwei Schlüsseln der obersten Ebene:
announce
Identifizieren der für den Download zu verwendenden Tracker undinfo
der Dateinamen und Hashes für den Torrent. Der "Infohash" ist der Hash der codierteninfo
Daten.Einige Magnet-Links enthalten Tracker oder Web-Seeds, aber oft nicht. Ihr Kunde weiß möglicherweise nichts über den Torrent außer seinem Infohash. Das erste, was es braucht, ist, andere Peers zu finden, die den Torrent herunterladen. Dies geschieht über ein separates Peer-to-Peer-Netzwerk 2, das eine "Distributed Hash Table" (DHT) betreibt. Ein DHT ist ein großer verteilter Index, der Torrents (identifiziert durch Infohashes) Listen von Peers (identifiziert durch IP-Adresse und Ports) zuordnet, die an einem Schwarm für diesen Torrent teilnehmen (Hochladen / Herunterladen von Daten oder Metadaten).
Wenn ein Client zum ersten Mal dem DHT-Netzwerk beitritt, generiert er eine zufällige 160-Bit-ID aus demselben Bereich wie Infohashes. Anschließend wird die Verbindung zum DHT-Netzwerk mithilfe von fest codierten Adressen von Clients, die vom Cliententwickler gesteuert werden, oder von DHT-unterstützenden Clients, die zuvor in einem Torrent-Schwarm angetroffen wurden, gebootet. Wenn sie will in einem Schwarm für einen bestimmten Strom teilnehmen, sucht es die DHT - Netzwerk für mehrere andere Kunden , deren IDs sind so nah 3 wie möglich an der infohash. Es benachrichtigt diese Kunden, dass sie am Schwarm teilnehmen möchten, und fragt sie nach den Verbindungsinformationen aller Peers, von denen sie bereits wissen, wer am Schwarm teilnimmt.
Wenn Peers einen bestimmten Torrent hochladen / herunterladen, versuchen sie, sich gegenseitig über alle anderen Peers zu informieren, von denen sie wissen, dass sie am selben Torrent-Schwarm teilnehmen. Auf diese Weise werden Peers schnell voneinander informiert, ohne dass ein Tracker oder DHT ständigen Anforderungen ausgesetzt ist. Sobald Sie einige Peers aus dem DHT kennengelernt haben, kann Ihr Client diese Peers nach den Verbindungsinformationen von noch mehr Peers im Torrent-Schwarm fragen, bis Sie alle Peers haben, die Sie benötigen.
Schließlich können wir diese Peers nach den
info
Metadaten des Torrents fragen , die die Dateinamen und die Hash-Liste enthalten. Nachdem wir diese Informationen heruntergeladen und anhand der bekannten Informationen überprüft haben, ob sie korrekt sindinfohash
, befinden wir uns praktisch an der gleichen Position wie ein Client, der mit einer regulären.torrent
Datei begonnen und eine Liste der Peers vom enthaltenen Tracker erhalten hat.Der Download kann beginnen.
1 Der Infohash ist normalerweise hexadezimal codiert, aber einige alte Clients verwendeten stattdessen Basis 32. v1 (
urn:btih:
) verwendet den SHA-1-Digest direkt, während v2 (urn:bimh:
) ein Multihash- Präfix hinzufügt , um den Hash-Algorithmus und die Digest-Länge zu identifizieren.2 Es gibt zwei primäre DHT-Netzwerke: das einfachere "Haupt" -DHT und ein komplizierteres Protokoll, das von Azureus verwendet wird.
3 Der Abstand wird mit XOR gemessen.
Weiterführende Literatur
quelle
dht.transmission.com
einfach ein Tracker? Ich verstehe es so, dass es die Liste der Peers pro Info-Hash verfolgen muss - genau das macht ein Tracker.ws=
verweist der Parameter auf eine BEP-19-Web-Seed-URL der tatsächlichen Daten und derxs=
Parameter auf eine URL mit der.torrent
Datei selbst. Ich denke, das ist ein bisschen unvereinbar mit anderen Verwendungen desmagnet:
Schemas, aber so ist es. Ich vergesse, ob Kundenas=
etwas verwenden ... vielleicht nur alsxs=
Ersatz für IIRC, aber nicht allgemein unterstützt.Peer Discovery und Resource Discovery (in Ihrem Fall Dateien) sind zwei verschiedene Dinge.
Ich bin mit JXTA besser vertraut, aber alle Peer-to-Peer-Netzwerke arbeiten nach denselben Grundprinzipien.
Das erste, was passieren muss, ist die Peer-Entdeckung.
Peer Discovery
Die meisten P2P-Netzwerke sind "Seed" -Netzwerke: Beim ersten Start stellt ein Peer eine Verbindung zu einer bekannten (fest codierten) Adresse her, um eine Liste der ausgeführten Peers abzurufen. Dies kann ein direktes Seeding sein, wie das Herstellen einer Verbindung zu,
dht.transmissionbt.com
wie in einem anderen Beitrag erwähnt, oder ein indirektes Seeding, wie dies normalerweise bei JXTA der Fall ist, bei dem der Peer eine Verbindung zu einer Adresse herstellt, die nur eine Klartextliste der Netzwerkadressen anderer Peers liefert.Sobald die Verbindung mit den ersten (wenigen) Peers hergestellt wurde, führt der verbindende Peer eine Ermittlung anderer Peers durch (durch Senden von Anforderungen) und verwaltet eine Tabelle mit diesen. Da die Anzahl der anderen Peers sehr groß sein kann, verwaltet der verbindende Peer nur einen Teil einer verteilten Hash-Tabelle (DHT) der Peers. Der Algorithmus zum Bestimmen, welcher Teil der Tabelle der verbindende Peer verwalten soll, hängt vom Netzwerk ab. BitTorrent verwendet Kademlia mit 160-Bit-Kennungen / Schlüsseln.
Ressourcenerkennung
Sobald einige Peers vom verbindenden Peer entdeckt wurden, sendet dieser einige Anfragen zur Erkennung von Ressourcen an ihn. Magnet-Links identifizieren diese Ressourcen und sind so aufgebaut, dass sie eine "Signatur" für eine Ressource darstellen und garantieren, dass sie den angeforderten Inhalt unter allen Peers eindeutig identifizieren. Der verbindende Peer sendet dann eine Erkennungsanforderung für die Magnetverbindung / -ressource an Peers in seiner Umgebung. Das DHT ist so aufgebaut, dass es hilft, zu bestimmen, welche Peers zuerst nach der Ressource gefragt werden sollen (lesen Sie mehr über Kademlia in Wikipedia). Wenn der angeforderte Peer die angeforderte Ressource nicht enthält, "leitet" er die Abfrage normalerweise an zusätzliche Peers weiter, die von seinem eigenen DHT abgerufen wurden.
Die Anzahl der "Sprünge", an die die Abfrage weitergeleitet werden kann, ist normalerweise begrenzt. 4 ist eine übliche Nummer bei JXTA-Netzwerken.
Wenn ein Peer die Ressource hält, antwortet er mit seinen vollständigen Details. Der verbindende Peer kann sich dann mit dem Peer verbinden, der die Ressource hält (direkt oder über ein Relais - ich werde hier nicht auf Details eingehen) und mit dem Abrufen beginnen.
Ressourcen / Dienste in P2P-Netzwerken sind nicht direkt an Netzwerkadressen gebunden: Sie sind verteilt, und das ist das Schöne an diesen hoch skalierbaren Netzwerken.
quelle
Ich war neugierig auf die gleiche Frage. Beim Lesen des Codes für die Übertragung fand ich Folgendes in
libtrnasmission/tr-dht.c
:Es versucht das 6 Mal und wartet 40 (!) Sekunden zwischen den Versuchen. Ich denke, Sie können es testen, indem Sie die Konfigurationsdateien (
~/.config/transmission
unter Unix) löschen und die gesamte Kommunikation blockierendht.transmissionbt.com
und sehen, was passiert (warten Sie mindestens 240 Sekunden).Es scheint also, dass der Client zunächst einen Bootstrap-Knoten eingebaut hat. Sobald es in das Netzwerk gelangt ist, benötigt es diesen Bootstrap-Knoten natürlich nicht mehr.
quelle
Ich habe endlich eine Spezifikation gefunden. Zum ersten Mal hat Google nicht geholfen . (Wiki verlinkt auf bittorrent.com, die die Hauptseite ist. Ich habe auf den Entwickler-Link geklickt und den bittorrent.org-Tab auf der rechten Seite bemerkt. Von dort aus war es einfach. Es ist schwierig, Links zu finden, wenn Sie keine Ahnung haben, wie sie beschriftet sind, und viele klickt weg).
Es scheint, als hätten alle Torrents ein Netzwerk von Peers. Sie finden Peers von Trackern und behalten sie zwischen den Sitzungen. Das Netzwerk ermöglicht es Ihnen, Peers und andere Dinge zu finden. Ich habe nicht gelesen, wie es mit Magnet-Links verwendet wird, aber es scheint undefiniert zu sein, wie ein neuer Kunde Peers findet. Möglicherweise sind einige eingebunden, oder sie verwenden ihren Heimserver oder bekannte Tracker, die in den Client eingebettet sind, um den ersten Peer im Netzwerk zu erhalten.
quelle
Als ich anfing, Ihre Frage zu beantworten, wusste ich nicht, dass Sie gefragt haben, wie das Magnetschema funktioniert. Ich dachte nur, Sie wollten wissen, wie die für das Bittorrent-Protokoll relevanten Teile generiert wurden.
Der im Magnet-Uri aufgeführte Hash ist der in base32 codierte Info-Hash des Torrents. Der Info-Hash ist der sha1-Hash des bencodierten Info-Blocks des Torrents.
Dieser Python-Code zeigt, wie er berechnet werden kann.
Ich habe eine (sehr naive) C # -Implementierung geschrieben, um dies zu testen, da ich keinen Bencoder zur Hand hatte und dieser den Erwartungen des Kunden entspricht.
Soweit ich weiß, enthält dieser Hash keine Informationen zum Auffinden des Trackers. Der Client muss dies auf andere Weise herausfinden (die angegebene Ankündigungs-URL). Dies ist genau das, was einen Torrent auf dem Tracker von einem anderen unterscheidet.
Alles, was mit dem Bittorrent-Protokoll zu tun hat, dreht sich immer noch um den Tracker. Es ist immer noch das primäre Kommunikationsmittel zwischen den Schwärmen. Das Magnet-Uri-Schema wurde nicht speziell für die Verwendung durch Bittorrent entwickelt. Es wird von allen P2P-Protokollen als alternative Form der Kommunikation verwendet. Bittorrent-Clients haben Magnet-Links als weitere Möglichkeit zur Identifizierung von Torrents akzeptiert, sodass Sie keine Torrent-Dateien mehr herunterladen müssen. Der Magnet uri muss noch den
tr
Acker angeben , um ihn zu lokalisieren, damit der Client teilnehmen kann. Es kann Informationen zu anderen Protokollen enthalten, ist jedoch für das Bittorrent-Protokoll irrelevant. Das Bittorrent-Protokoll funktioniert letztendlich nicht ohne die Tracker.quelle
Die Liste der Peers wird wahrscheinlich aus dem Torrent gefüllt, der den Client aktualisiert (z. B. gibt es einen Torrent für Utorrent, der ihn aktualisiert). Solange alle denselben Client verwenden, sollte dies gut sein, da Sie keine andere Wahl haben, als das Upgrade gemeinsam zu nutzen.
quelle