Aus LinuxUser 03/2009

P2P-Filesharing mit Bittorrent

© sxc.hu

Stück für Stück

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.

LinuxUser 03/2009 KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland

Hinterlasse einen Kommentar

  E-Mail Benachrichtigung  
Benachrichtige mich zu: