Bittorrent: Unterschied zwischen den Versionen

Aus Mikiwiki
Zur Navigation springen Zur Suche springen
(New page: ==Verwendung== I wanted to run torrents from my Linux server, rather than running them on my Windows laptop. Further, I wanted a system that needed very little intervention. To start th...)
 
Keine Bearbeitungszusammenfassung
 
(16 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Das [[Filesharing-Protokoll]] <b>Bittorrent</b> (auch: BitTorrent; von [[Bit]] und engl. torrent, "reissender Strom") ist ein kollaboratives [[Netzwerkprotokoll]], das sich besonders für die schnelle Verteilung grosser Datenmengen eignet. Es handelt sich um ein [[Peer-to-Peer]]-Verfahren, bei dem gleichberechtigte Partner (engl. peer) miteinander kommunizieren. Nicht ein Server verteilt also die Dateien, sondern die Teilnehmer tauschen die Dateien untereinander aus.


==Verwendung==
Technisch ist das Protokoll der OSI-Schicht 7 (der Anwendungsschicht) zuzuordnen und setzt auf das TCP/IP-Referenzmodell. Die Referenzimplementierung namens Bittorrent durch den Erfinder Bram Cohen erfolgte in der Programmiersprache Python. Mittlerweile steht eine Reihe alternativer Programme zur Verfügung, die das Bittorrent-Protokoll implementieren.


I wanted to run torrents from my Linux server, rather than running them on my Windows laptop. Further, I wanted a system that needed very little intervention.
Die US-amerikanische Firma namens Bittorrent hat im Februar 2007 ihre gleichnamige Website in einen Online-Shop umgewandelt, in dem sich viele Medieninhalte nur noch kostenpflichtig herunterladen lassen.


To start the torrent daemon, I run the following:
Die englische Wikipedia listet Anfang 2009 über 50 Bittorrent-Clients auf, darunter
  (/usr/bin/btlaunchmany.py /home/share/video/torrents/active/ --save_in /home/share/video/torrents/ --minport 6885 --max_upload_rate 10 \
* [[bittorrent]]
  > /home/share/video/torrents/torrent.log 2>&1 &) &
* [[rtorrent]]


To parse the torrent log, I use a small perl script, which runs as a daemon:
Einer der Hauptzwecke von Bittorrent ist die Verteilung von CD- oder DVD-[[Abbilddatei]]en von [[Linux-Distribution]]en.
<pre>
#!/usr/bin/perl


use Data::Dumper;
== Konzept ==
use Term::Screen;
use strict;


my $scr = Term::Screen->new();
Der Ausgangsrechner (auch: Seeder von engl. to seed "säen"), der im Besitz der vollständigen Datei ist, verteilt Stücke (engl. chunk "Brocken") davon an einzelne Peers. Anschliessend können die an der Datei interessierten Clients (der "Schwarm") die noch fehlenden Stücke bei den anderen Peers beziehen. Durch diese Verteilung des [[Herunterladen]]s auf viele Rechner bildet nicht mehr ein einzelner Rechner einen Flaschenhals für die [[Datenübertragunsgrate]]. Peers, die schliesslich alle Stücke und somit die ganze Datei erhalten haben, werden nun selbst zu Seedern und steigern so die verfügbare Gesamt-Datenübertragungsrate weiter.


my $first;
Damit das ganze klappt, wird eine Koordinierungsstelle benötigt, welche die beteiligten Peers registriert und ihnen mitteilt, wer welches Stück der gesuchten Datei anbietet. Diese zentrale Instanz heisst <b>Tracker</b>. Moderne Bittorrent-Clients können auch auf einen zentralen Tracker verzichten, indem sie die entsprechenden Daten als [[Hash]]-Tabelle auf die beteiligten Clients verteilen. Bekannte Tracker sind [http://thepiratebay.org/ The Pirate Bay] und [http://www.mininova.org/ Mininova].
my $entry = {};
while (my $line = <STDIN>)
{
  next unless ($line =~ m#^"(.*?)":\s+"(.*?)"\s+(\S+)\s(\S+)\s(.*?)"(.*?)"\n#);
  my %info;
  $info{file} = $1;
  $info{status} = $2;
  $info{percent} = $3;
  # unknown = $4;
  my $transfer_line = $5;
  # unknown = $6;


if ($6) { print "** $6\n"; }
Das Vorgehen zum Verteilen einer Datei über Bittorrent ist das folgende.
* Es wird eine <b>Torrent-Datei</b> (mit der [[Dateinamenserweiterung]] ".torrent") benötigt, welche Meta-Informationen enthält.
** Der Bittorrent-Client zerlegt die zu verteilende Datei zuerst in viele kleine Stücke und erzeugt einen [[SHA-1]]-Hash für jedes einzelne Stück. Eine Liste dieser Prüfsummen wird in die Torrent-Datei geschrieben, zusätzlich werden einige Informationen wie Dateigrösse und Dateiname hinzugefügt.
** Anschliessend wird ein weiterer SHA-1-Hash über diese Hash-Liste und die Metadaten erzeugt; mit Hilfe dieser zweiten Prüfsumme lässt sich die Torrent-Datei eindeutig identifizieren.
** Die Torrent-Datei benötigt ausserdem eine "Announce [[URL]]", die auf einen Torrent-Tracker verweist.
* Die Torrent-Datei wird über ein beliebiges Medium (z. B. E-Mail) verteilt. Um sie der Allgemeinheit zur Verfügung zu stellen, wird sie auf eine <b>Torrent-Suchmaschine</b> hochgeladen. Die meisten Tracker-Betreiber bieten neben ihrem Tracker auch Torrent-Suchmaschinen. Dabei gilt es zu beachten, dass Torrent-Dateien, die über den Tracker laufen nicht zwingend auch auf der Suchmaschine auftauchen und umgekehrt.
* Der ursprüngliche Besitzer der Datei lädt nun die erzeugte Torrent-Datei in seinen Bittorrent-Client.
** Der Client liest die Announce URL aus und meldet dem Tracker, dass er eine Datei mit einem bestimmten SHA-1-Hash tauschen möchte.
** Der Tracker merkt sich im Gegenzug die [[IP-Adresse]] und den [[Port]] des Clients.
* Inzwischen haben auch andere Bittorrent-Benutzer die Torrent-Datei heruntergeladen und sie ebenfalls in ihren Bittorrent-Client gelegt.
** Auch diese Clients melden dem Tracker, dass sie Interesse am Tausch der Datei mit diesem SHA-1-Hash haben.
** Der Tracker merkt sich auch von diesen Clients die IP-Adresse und den Port.
** Als Antwort liefert der Tracker eine Liste mit allen anderen Kombinationen aus IP-Adresse und Port, die er sich zuvor in Zusammenhang mit diesem SHA-1-Hash gemerkt hat.
* Nach einigen Minuten fragen die Bittorrent-Clients (einschlisslich desjenigen, der die ursprüngliche Datei anbietet) erneut nach einer List aller IP-Adressen, welche diese Datei haben bzw. haben wollen. Auf diese Weise macht der Tracker alle Clients miteinander bekannt, ohne von der ursprünglichen Datei mehr zu kennen, als ihren SHA-1-Hash.
* Der Bittorrent-Client, der die vollständige Datei besitzt, besitzt nun die einzelnen Stücke an die anderen Clients zu verteilen. Dabei achtet er darauf, dass er nach Möglichkeit verschiedene Stücke an die verschiedenen Clients ausliefert.
** Sobald einer der beteiligten Bittorrent-Clients ein einzelnes Stück der ursprünglichen Datei vollständig empfangen hat, beginnt auch er dieses Stück an die anderen Clients zu verteilen.


  my @transfer = split(/\s+/, $transfer_line);
Es genügt also theoretisch, dass der Seeder jedes Stück genau einmal an irgendeinen der anderen Teilnehmer verschickt, damit diese die Datei untereinander selbstständig austauschen können. In der Praxis reicht das jedoch meist nicht aus, da jeder Client jederzeit beendet werden oder die Dateistücke aus irgendeinem Grund nicht wieder hochladen kann. Bei Anwendung besonderer Verfahren ("Super Seed Mode", auch "Initial Seeding" genannt) genügt es zum effizienten Verbreiten der Datei, wenn der erste Seeder etwa 110 Prozent der Dateigrösse hochlädt. Dieser Aufwand lohnt aber nur dort, wo der Datenverkehr nach Volumen berechnet wird. Im normalen Modus muss der erste Seeder das Drei- bis Fünffache der Datei hochladen, um diese effektiv zu verbreiten.
  $info{rate} = $transfer[1];
  $info{total} = $transfer[2];


  if ($info{file} eq $first)
Bittorrent kann statt sehr schnell auch sehr langsam sein - nämlich dann, wenn die Torrent-Datei nur von sehr wenigen Seedern angeboten wird, welche die Dateistücke womöglich auch noch langsam liefern. Das hat natürlich nicht ursächlich mit der Bittorrent-Technik zu tun.
  {
    showEntries($entry, $scr);
  }
  $first ||= $info{file};


  my $file = $info{file};
{{Weblinks}}
  $entry->{$file} = \%info;
{{url_dewikipedia|BitTorrent_(Protokoll)|Bittorrent (Protokoll)}}
  #print $info{file}, "\n", join("\t", $info{status}, $info{percent}), "\n",
{{url_dewikipedia|BitTorrent_(Client)|Bittorrent (Client)}}
  #  join("\t", $info{rate}, $info{total}), "\n\n";
{{url|US|Brian Dessent|eng|http://dessent.net/btfaq/|Brian's Bittorrent FAQ and guide}}
}
{{url|US|Brian Dessent|eng|http://btfaq.com/serve/cache/1.html|Brian's Bittorrent FAQ and guide}}
{{url|US|Dimeadozen|eng|http://wiki.dimeadozen.org/index.php/DimeFAQ:How_to_Create_and_Upload_Torrents|How to create and upload torrents}}
{{url|US|Bittorrent Inc.|eng|http://www.bittorrent.com/|Bittorrent|icon=http://www.bittorrent.com/sites/default/files/bittorrent2_favicon.ico|sublink=<br>
* [http://www.bittorrent.com/btusers?csrc{{=}}splash Bittorrent Users] - Mit Dokumentation}}
{{url|US|Paul Walmsley|eng|http://mst3k.booyaka.com/bittorrent_guide.shtml|The MST3K Bittorrent guide}}
{{url|US|Nixcraft|eng|http://www.cyberciti.biz/nixcraft/vivek/blogger/2005/03/linux-command-line-bittorrent-client.php|Command line Bittorrent client}}
{{url|DE|Easy Linux|ger|http://www.easylinux.de/Artikel/ausgabe/2006/04/020-ktorrent/index.html|Filesharing mit Ktorrent}}
{{Fuss}}


sub showEntries
=== Herunterladen von Bittorrents ===
{
  my ($h, $s) = @_;


  $s->clrscr();
  open(OUT, "> /tmp/torrent-status") || die "can't open torrent-status: $!";
  while (my ($file, $e) = each %$h)
  {
    print OUT $e->{file}, "\n", join("\t", $e->{status}, $e->{percent}, $e->{rate}, $e->{total}), "\n\n";
  }
  close OUT;
}
</pre>
To start or stop torrents, I simply place the torrent file in a directory, or remove the torrent from the directory. The torrent daemon picks them up automagically. The directory (in the above example) is "/home/share/video/torrents/active/".
==Downloads==
* http://www.bit-torrents.6x.to/
* http://www.bit-torrents.6x.to/
* http://torrent.youceff.com/
* http://torrent.youceff.com/
Zeile 76: Zeile 62:
** [http://www.thetradersden.org/forums/faq.php?faq=new_faq_item (FAQ)]
** [http://www.thetradersden.org/forums/faq.php?faq=new_faq_item (FAQ)]


==Weblinks==
== Weblinks ==
* [http://de.wikipedia.org/wiki/BitTorrent BitTorrent] (Wikipedia.de)
 
* [http://dessent.net/btfaq/ Brian's BitTorrent FAQ and Guide]
{{Weblinks|titel=Alte Weblinks}}
* [http://btfaq.com/serve/cache/1.html Brian's BitTorrent FAQ and Guide]
{{wbm|ES|Andreu Bassols|eng|http://annys.eines.info/cgi-bin/man/man2html?1+btdownloadheadless|btdownloadheadless}}
* [http://wiki.dimeadozen.org/index.php/DimeFAQ:How_to_Create_and_Upload_Torrents How to create and upload torrents] (Dimeadozen.org)
{{wbm|US|The Linux Foundation|eng|http://applications.linux.com/applications/05/08/26/2018208.shtml?tid{{=}}27|Bittorrent for Linux}}
* [http://applications.linux.com/applications/05/08/26/2018208.shtml?tid=27 BitTorrent for Linux]
{{Fuss}}
* [http://www.bittorrent.com/guide.html BitTorrent Documentation : Guide]
 
* [http://mst3k.booyaka.com/bittorrent_guide.shtml The MST3K Bittorrent guide]
 
* [http://annys.eines.info/cgi-bin/man/man2html?1+btdownloadheadless btdownloadheadless]
{{cat|Bittorrent}}
* [http://www.cyberciti.biz/nixcraft/vivek/blogger/2005/03/linux-command-line-bittorrent-client.php Command line BitTorrent client]
{{cat|Filesharing-Protokoll}}
* [http://www.easylinux.de/Artikel/ausgabe/2006/04/020-ktorrent/index.html Filesharing mit Ktorrent (Tauschrausch)] (EasyLinux.de)
{{cat|Netzwerkprotokoll}}
* Azureus
{{cat|UNFERTIG}}
** [http://azureus.aelitis.com/wiki/index.php/NAT_problem NAT problem]

Aktuelle Version vom 7. Februar 2010, 15:01 Uhr

Das Filesharing-Protokoll Bittorrent (auch: BitTorrent; von Bit und engl. torrent, "reissender Strom") ist ein kollaboratives Netzwerkprotokoll, das sich besonders für die schnelle Verteilung grosser Datenmengen eignet. Es handelt sich um ein Peer-to-Peer-Verfahren, bei dem gleichberechtigte Partner (engl. peer) miteinander kommunizieren. Nicht ein Server verteilt also die Dateien, sondern die Teilnehmer tauschen die Dateien untereinander aus.

Technisch ist das Protokoll der OSI-Schicht 7 (der Anwendungsschicht) zuzuordnen und setzt auf das TCP/IP-Referenzmodell. Die Referenzimplementierung namens Bittorrent durch den Erfinder Bram Cohen erfolgte in der Programmiersprache Python. Mittlerweile steht eine Reihe alternativer Programme zur Verfügung, die das Bittorrent-Protokoll implementieren.

Die US-amerikanische Firma namens Bittorrent hat im Februar 2007 ihre gleichnamige Website in einen Online-Shop umgewandelt, in dem sich viele Medieninhalte nur noch kostenpflichtig herunterladen lassen.

Die englische Wikipedia listet Anfang 2009 über 50 Bittorrent-Clients auf, darunter

Einer der Hauptzwecke von Bittorrent ist die Verteilung von CD- oder DVD-Abbilddateien von Linux-Distributionen.

Konzept

Der Ausgangsrechner (auch: Seeder von engl. to seed "säen"), der im Besitz der vollständigen Datei ist, verteilt Stücke (engl. chunk "Brocken") davon an einzelne Peers. Anschliessend können die an der Datei interessierten Clients (der "Schwarm") die noch fehlenden Stücke bei den anderen Peers beziehen. Durch diese Verteilung des Herunterladens auf viele Rechner bildet nicht mehr ein einzelner Rechner einen Flaschenhals für die Datenübertragunsgrate. Peers, die schliesslich alle Stücke und somit die ganze Datei erhalten haben, werden nun selbst zu Seedern und steigern so die verfügbare Gesamt-Datenübertragungsrate weiter.

Damit das ganze klappt, wird eine Koordinierungsstelle benötigt, welche die beteiligten Peers registriert und ihnen mitteilt, wer welches Stück der gesuchten Datei anbietet. Diese zentrale Instanz heisst Tracker. Moderne Bittorrent-Clients können auch auf einen zentralen Tracker verzichten, indem sie die entsprechenden Daten als Hash-Tabelle auf die beteiligten Clients verteilen. Bekannte Tracker sind The Pirate Bay und Mininova.

Das Vorgehen zum Verteilen einer Datei über Bittorrent ist das folgende.

  • Es wird eine Torrent-Datei (mit der Dateinamenserweiterung ".torrent") benötigt, welche Meta-Informationen enthält.
    • Der Bittorrent-Client zerlegt die zu verteilende Datei zuerst in viele kleine Stücke und erzeugt einen SHA-1-Hash für jedes einzelne Stück. Eine Liste dieser Prüfsummen wird in die Torrent-Datei geschrieben, zusätzlich werden einige Informationen wie Dateigrösse und Dateiname hinzugefügt.
    • Anschliessend wird ein weiterer SHA-1-Hash über diese Hash-Liste und die Metadaten erzeugt; mit Hilfe dieser zweiten Prüfsumme lässt sich die Torrent-Datei eindeutig identifizieren.
    • Die Torrent-Datei benötigt ausserdem eine "Announce URL", die auf einen Torrent-Tracker verweist.
  • Die Torrent-Datei wird über ein beliebiges Medium (z. B. E-Mail) verteilt. Um sie der Allgemeinheit zur Verfügung zu stellen, wird sie auf eine Torrent-Suchmaschine hochgeladen. Die meisten Tracker-Betreiber bieten neben ihrem Tracker auch Torrent-Suchmaschinen. Dabei gilt es zu beachten, dass Torrent-Dateien, die über den Tracker laufen nicht zwingend auch auf der Suchmaschine auftauchen und umgekehrt.
  • Der ursprüngliche Besitzer der Datei lädt nun die erzeugte Torrent-Datei in seinen Bittorrent-Client.
    • Der Client liest die Announce URL aus und meldet dem Tracker, dass er eine Datei mit einem bestimmten SHA-1-Hash tauschen möchte.
    • Der Tracker merkt sich im Gegenzug die IP-Adresse und den Port des Clients.
  • Inzwischen haben auch andere Bittorrent-Benutzer die Torrent-Datei heruntergeladen und sie ebenfalls in ihren Bittorrent-Client gelegt.
    • Auch diese Clients melden dem Tracker, dass sie Interesse am Tausch der Datei mit diesem SHA-1-Hash haben.
    • Der Tracker merkt sich auch von diesen Clients die IP-Adresse und den Port.
    • Als Antwort liefert der Tracker eine Liste mit allen anderen Kombinationen aus IP-Adresse und Port, die er sich zuvor in Zusammenhang mit diesem SHA-1-Hash gemerkt hat.
  • Nach einigen Minuten fragen die Bittorrent-Clients (einschlisslich desjenigen, der die ursprüngliche Datei anbietet) erneut nach einer List aller IP-Adressen, welche diese Datei haben bzw. haben wollen. Auf diese Weise macht der Tracker alle Clients miteinander bekannt, ohne von der ursprünglichen Datei mehr zu kennen, als ihren SHA-1-Hash.
  • Der Bittorrent-Client, der die vollständige Datei besitzt, besitzt nun die einzelnen Stücke an die anderen Clients zu verteilen. Dabei achtet er darauf, dass er nach Möglichkeit verschiedene Stücke an die verschiedenen Clients ausliefert.
    • Sobald einer der beteiligten Bittorrent-Clients ein einzelnes Stück der ursprünglichen Datei vollständig empfangen hat, beginnt auch er dieses Stück an die anderen Clients zu verteilen.

Es genügt also theoretisch, dass der Seeder jedes Stück genau einmal an irgendeinen der anderen Teilnehmer verschickt, damit diese die Datei untereinander selbstständig austauschen können. In der Praxis reicht das jedoch meist nicht aus, da jeder Client jederzeit beendet werden oder die Dateistücke aus irgendeinem Grund nicht wieder hochladen kann. Bei Anwendung besonderer Verfahren ("Super Seed Mode", auch "Initial Seeding" genannt) genügt es zum effizienten Verbreiten der Datei, wenn der erste Seeder etwa 110 Prozent der Dateigrösse hochlädt. Dieser Aufwand lohnt aber nur dort, wo der Datenverkehr nach Volumen berechnet wird. Im normalen Modus muss der erste Seeder das Drei- bis Fünffache der Datei hochladen, um diese effektiv zu verbreiten.

Bittorrent kann statt sehr schnell auch sehr langsam sein - nämlich dann, wenn die Torrent-Datei nur von sehr wenigen Seedern angeboten wird, welche die Dateistücke womöglich auch noch langsam liefern. Das hat natürlich nicht ursächlich mit der Bittorrent-Technik zu tun.

Herausgeber Sprache Webseitentitel Anmerkungen
Wikipedia ger Bittorrent (Protokoll)wbm Enzyklopädischer Artikel
Wikipedia ger Bittorrent (Client)wbm Enzyklopädischer Artikel
Brian Dessent eng Brian's Bittorrent FAQ and guidewbm
Brian Dessent eng Brian's Bittorrent FAQ and guidewbm
Dimeadozen eng How to create and upload torrentswbm
Bittorrent Inc. eng Bittorrentwbm
Paul Walmsley eng The MST3K Bittorrent guidewbm
Nixcraft eng Command line Bittorrent clientwbm
Easy Linux ger Filesharing mit Ktorrentwbm

Herunterladen von Bittorrents

Weblinks

Herausgeber Sprache Webseitentitel Anmerkungen
Andreu Bassols eng btdownloadheadless
http://annys.eines.info/cgi-bin/man/man2html?1+btdownloadheadless
The Linux Foundation eng Bittorrent for Linux
http://applications.linux.com/applications/05/08/26/2018208.shtml?tid=27