Bittorrent hat in den acht Jahren seines Bestehens einen enormen Zuwachs erhalten. Das Protokoll überzeugt durch Schlichtheit und Effizienz. Dabei ist Bittorrent bei weitem nicht dem Tausch illegaler Dateien vorbehalten.
Angefangen hat es alles im Jahr 2001 mit einer in Python geschriebenen Bittorrent-Referenzimplementierung von Bram Cohen [1]. Seit dieser Zeit haben sich zu dem eher langsamen Original-Client zahlreiche weitere Alternativen aller Geschmacksrichtungen gesellt. Die englische Wikipedia listet Anfang 2009 über 50 Bittorrent-Clients auf [2] und erhebt dabei noch lange keinen Anspruch auf Vollständigkeit. (Den schnellen Konsolen-Client Rtorrent und ein dazu passenden Webfrontend stellen wir Ihnen im folgenden Artikel vor.) Doch wie funktioniert dieses Bittorrent-Protokoll überhaupt, wo liegen die Stärken und Schwächen des Verfahrens?
Das Prinzip
Bei Bittorrent handelt es sich um ein so genanntes Peer-to-Peer-Verfahren (P2P), bei dem gleichberechtigte Partner (engl.: “peer”) miteinander kommunizieren. Nicht ein Server verteilt also die Dateien, sondern die einzelnen Teilnehmer tauschen die Daten untereinander aus.
Dazu verteilt der Ausgangsrechner, der im Besitz der gesamten Datei ist – der Seeder (engl. “seed”: säen) – Stücke des zu tauschenden Files (engl. “chunk”: Brocken) auf einzelne Peers. Anschließend können die an der Datei interessierten Clients (der “Schwarm”) die noch fehlenden Chunks bei den anderen Peers beziehen. Durch diese Verteilung des Downloads auf viele Maschinen bildet nicht mehr ein einzelner Server einen Flaschenhals für die Download-Rate. Peers, die schließlich die komplette Datei erhalten haben, avancieren nun selbst zu Seedern und steigern so die verfügbare Gesamt-Downloadrate im Netz weiter.
Damit das ganze klappt, benötigt man eine Koordinierungsstelle, welche die beteiligten Peers registriert und ihnen mitteilt, wer welches Scheibchen der gesuchten Datei vorrätig hält. Diese zentrale Instanz bezeichnet man als Tracker. Modernere Bittorrent-Implementationen können auch auf einen zentralen Tracker verzichten, indem sie die entsprechenden Daten als Hash-Tabelle auf die beteiligten Clients verteilen.
Die Torrent-Datei
Möchten Sie eine Datei über Bittorrent verteilen, so gilt es dazu als erstes eine Datei mit Meta-Informationen zu erstellen, die so genannte Torrent-Datei, die man an der Dateierweiterung .torrent erkennt. Das müssen Sie nicht etwa händisch erledigen, sondern beauftragen Ihren Bittorrent-Client mit dieser Aufgabe.
Der Client zerlegt die zu verteilende Datei zunächst in viele kleine Stückchen und generiert einen SHA1-Hash [3] für jeden einzelnen Part. Eine Liste dieser Prüfsummen schreibt er in die Torrent-Datei und fügt noch einige zusätzliche Informationen hinzu, wie etwa Dateigröße und Dateiname. Anschließend erzeugt er noch einen weiteren SHA1-Hash über die Hash-Liste und die Metadaten. Mithilfe dieser Prüfsumme lässt sich die Torrent-Datei später im Netzwerk eindeutig identifizieren.
Des weiteren braucht die Torrent-Datei noch eine “Announce URL”. Die sieht aus wie eine normale Webadresse und ist auch eine: Sie verweist auf einen Torrent-Tracker. Diese “schwarzen Bretter” des Torrent-Protokolls sammeln Informationen darüber, wer sich für welche Datei interessiert, leiten diese Anfragen weiter und machen so die einzelnen Peers miteinander bekannt – mehr dazu im Abschnitt “Clients und Tracker”.
Die Torrent-Datei verteilen Sie nun über ein beliebiges Medium, etwa via E-Mail. Möchten Sie sie der Allgemeinheit zur Verfügung stellen, laden Sie die Datei auf eine Torrent-Suchmaschine hoch. Die meisten großen Tracker-Betreiber wie The Pirate Bay ([4],[5]) oder Mininova [6] bieten neben ihrem Tracker auch noch Suchmaschinen an. Dabei gilt es unbedingt zu beachten, dass Torrents, die über den Tracker laufen, nicht zwangsläufig auch auf der Suchmaschine auftauchen, und umgekehrt.
Clients und Tracker
Der ursprüngliche Besitzer der Datei lädt nun die erzeugte Torrent-Datei in seinen Bittorrent-Client. Dieser liest die Announce-URL aus und meldet dem Tracker, dass er eine Datei mit einer bestimmten SHA1-Prüfsumme tauschen möchte. Der Tracker merkt sich im Gegenzug die IP-Adresse und den Port des Clients.
In der Zwischenzeit haben auch andere Benutzer die Torrent-Datei heruntergeladen und sie ebenfalls in ihre Clients gelegt. Auch diese Clients melden dem Tracker, dass sie Interesse am Tausch der Datei mit dieser SHA1-Kennung haben. Der Tracker merkt sich auch von diesen Clients IP-Adresse und Port und liefert als Antwort eine Liste mit allen anderen IP/Port-Kombinationen, die er sich vorher im Zusammenhang mit diesem Hash gemerkt hat.
Nach ein paar Minuten fragen die Clients – inklusive desjenigen, der die ursprüngliche Datei anbietet – wieder nach einer Liste aller IP-Adressen, die diese Datei haben beziehungsweise haben wollen. Auf diese Weise schafft es der Tracker, alle Clients mit einander bekannt zu machen, ohne von der eigentlichen Datei mehr zu wissen als ihren SHA1-Hash. Der Ursprungs-Client, auf dem die gesamte Datei liegt, beginnt nun die einzelnen Stücke des Files an die anderen Clients zu verteilen. Dabei achtet er darauf, dass er nach Möglichkeit verschiedene Stückchen an verschiedene Clients ausliefert.
Hier kommt die P2P-Technik ins Spiel: Sobald einer der beteiligten Clients ein einzelnes Stück der Datei hat, beginnt er dieses an die anderen Peers zu verteilen. Es genügt also theoretisch, dass der Seeder jedes Stück genau einmal an irgendeinen der anderen Teilnehmer schickt, um diese in die Lage zu versetzen, die Datei selbstständig untereinander auszutauschen. In der Praxis reicht das jedoch meist nicht aus, da stets die Möglichkeit besteht, dass einer der Clients offline geht oder die Dateistückchen aus anderen Gründen nicht wieder hochladen kann.
Bei Anwendung spezieller Verfahren (“Super Seed Mode” [7], auch “Initial Seeding” genannt) genügt es zum effizienten Verbreiten einer Datei, wenn der Seeder ungefähr 110 Prozent der Dateigröße hochlädt. Dieser Aufwand lohnt aber nur dort, wo der Datenverkehr nach Volumen berechnet wird. Im normalen Modus muss der erste Seeder 300 bis 500 Prozent der Ausgangsdatei hochladen, um diese effektiv im Netzwerk zu verbreiten.
Die Kritik
Oft hört man den Vorwurf, Bittorrent sei langsam. Und tatsächlich: Lädt man zum Beispiel eine Linux-Distribution über Bittorrent herunter, gestaltet sich der Download häufig langwieriger als über einen FTP- oder HTTP-Mirror. Das liegt meist daran, dass die Torrent-Datei gerade bei etwas älteren Distributionen nur bei sehr wenigen Seedern vorrätig liegt.
Dieses Problem tritt in der Praxis zwar häufig auf, hat jedoch nicht eigentlich mit der Technik des Bittorrent-Protokolls zu tun und ließe sich sehr einfach lösen: Dazu müsste lediglich jeder Server, der die Daten sonst über HTTP/FTP verteilt, daneben auch Bittorrent nutzt. So gäbe es wesentlich mehr Seeder, was das Problem der Lastverteilung lösen würde. Auch die Benutzer würden sich freuen, müssten sie doch nicht mehr umständlich aus einer langen Liste von Servern den richtigen aussuchen, sondern bräuchten nur noch eine Torrent-Datei zu benutzen.
Glossar
-
SHA1
-
Secure Hash Algorithm. Methode zur Berechnung einer eindeutigen Prüfsumme für beliebige Daten. Die 1995 veröffentlichte erste Variante SHA1 gilt als nicht mehr völlig sicher.
[1] Bram Cohens Homepage: http://bitconjurer.org
[2] Bittorrent-Clients (Wikipedia): http://en.wikipedia.org/wiki/BitTorrent_client
[3] SHA (Wikipedia): http://de.wikipedia.org/wiki/Secure_Hash_Algorithm
[4] The Pirate Bay: http://thepiratebay.org
[5] The Pirate Bay (Wikipedia): http://de.wikipedia.org/wiki/The_Pirate_Bay
[6] Mininova: http://www.mininova.org
[7] Super-seeding (Wikipedia): http://en.wikipedia.org/wiki/Super-seeding





