AA_puzzle_sxc_ilco_1067592.jpg

© ilco,sxc.hu

Stück für Stück

Filesharing mit Bittorrent

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 wichtigsten Begriffe fasst der Kasten Bittorrent-Glossar zusammen.

Bittorrent-Glossar

Tracker, Chunks, Leecher und Seeder – Bittorrent-Nutzer verwenden ihre eigene Sprache. Was sich hinter den Begriffen verbirgt, verrät dieses kleine Glossar. Für weitergehende Informationen lohnt sich ein Blick auf die deutsche Bittorrent-FAQ [3].

  • Tracker: Es handelt sich um spezielle Server, welche die Torrents, die Dateien sowie die Clients und die Verbindungen verwalten. Tracker dienen zur Kommunikation zwischen den Seedern (diejenigen, die Datei schon vollständig haben) und Leechern (Teilnehmern, welche die Datei suchen). Der Bittorrent-Client meldet sich regelmäßig mit Informationen über den eigenen Zustand und erhält im Gegenzug vom Tracker eine Liste von Teilnehmern, welche die Datei komplett oder in Teilen haben beziehungsweise daran interessiert sind. Ein Tracker ist nicht direkt in den Datentransfer eingebunden, da er keine Kopie der Datei enthält. Die Tracker stehen nicht miteinander in Verbindung. So gibt es kein gemeinsames Netzwerk, sondern jeweils ein eigenes für jeden Torrent.
  • Chunk: Ein Teilstück der Datei (9 MByte); hat ein Bittorrent-Client ein solches Stück fertig heruntergeladen und anhand der Prüfsumme verifiziert, meldet er sich beim Tracker mit dieser Information zurück. Das Teilstück steht nun anderen Downloadern zur Verfügung. In welcher Reihenfolge die Chunks auf die eigene Platte wandern, spielt übrigens keine Rolle.
  • Prüfsumme: Auch Checksum genannt, eine Art Fingerabdruck, der mit einem bestimmten Algorithmus errechnet wird und dabei hilft, Dateien eindeutig zu identifizieren. Dank der Prüfsumme können die Clients die Integrität der Daten gewährleisten: Nach dem Download eines Chunks rechnen sie dessen Prüfsumme aus und vergleichen sie mit dem Original. Weichen die beiden Checksum-Werte voneinander an, verwirft der Client das Teilstück und startet einen neuen Download von einer anderen Quelle.
  • Seeder: Dies sind die Clients (Peers), die bereits die komplette Datei fertig heruntergeladen haben. Sie verteilen nur noch an andere Clients (englisch "to seed" = "säen"). Clients können von mehreren Seedern gleichzeitig herunterladen. Vor dem Download einer Datei über Bittorrent lohnt es sich, nach der Anzahl der Seeds zu schauen: Gibt es für einen Download keine Seeds, ist es sehr wahrscheinlich, dass die Datei nicht vollständig heruntergeladen werden kann.
  • Leecher: Clients (Peers), die noch nicht den gesamten Torrent-Inhalt heruntergeladen haben, nennt man Leecher (englisch "leech" = "Blutegel"). Oft wird der Begriff auch abwertend benutzt und bezeichnet dann Clients, die nur "saugen", ohne selbst Teile der Datei zur Verfügung zu stellen. Als Leecher werden auch Anwender beschimpft, die direkt nach dem erfolgreichen Download die Datei entfernen, ohne sie noch eine Weile für die Gemeinschaft zur Verfügung zu stellen.
  • Peer: Ein Client, der mit einem anderen Client verbunden ist. Peer heißt auf Deutsch "Gleichgestellter" oder "Ebenbürtiger"; die Bittorrent-Benutzer laden gegenseitig voneinander herunter, daher spricht man auch von einem Peer-to-Peer-Netzwerk.
  • Swarm (Schwarm): Dies ist die Menge aller Clients, die an demselben Torrent interessiert sind. Jeder Schwarm verteilt nur die Dateien, die der Ersteller der Torrent-Datei eingetragen hat.
  • Torrent: Diese Dateien tragen meistens die Endung .torrent und enthalten die IP-Adresse oder den Hostnamen des Trackers, den Dateinamen, die Größe und eine Liste der Prüfsummen für die einzelnen Chunks. Die Torrents selbst sind meistens nur wenige KByte groß und stehen auf den Projektseiten zum Download zur Verfügung. Nach dem Download der Torrent-Datei öffnet der Bittorrent-Client diese, um mit dem Herunterladen der eigentlichen Datei zu beginnen.
  • Ratio: Das Verhältnis von Upload zu Download; eine Ratio von 1.0 (die englische Notation für die Zahl 1,0) bedeutet, dass ein Client genauso viel hoch- wie heruntergeladen hat. Ist die Ratio dauerhaft zu niedrig, kann es sein, dass der Client weniger Bandbreite von den anderen erhält.

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.

Einem Freund empfehlen