URL: http://bolug.uni-bonn.de/wissen/schugt_gnutella/index.html
bolug :: wissen :: gnutella

GNUtella

funktionsweise eines p2p netzwerkes
 
» Über diesen Text
» Was ist GNUtella?
» Wie ist GNUtella entstanden?
» Wie funktioniert GNUtella?
» Analyse des Protokolls
» Was wird GNUtella verändern?
» Weitere Informationen
» Anmerkungen des Übersetzers

Über diesen Text

Dieser Text ist eine Übersetzung eines von Fokko Beekhof auf Niederländisch geschriebenen, einführenden Textes über GNUtella. Er wurde übersetzt von Josef 'Jupp' Schugt. Es wurde darauf verzichtet, die Namen der in den Abbildungen genannten Rechner zu übersetzen. Die Rechtschreibung folgt den aktuellen Regeln.

Was ist GNUtella?

Kennen Sie Napster? GNUtella ist ganz ähnlich. Die zu Grunde liegende Idee ist genauso wie bei Napster, dass die Nutzer einander die Suche nach Dateien und deren Download ermöglichen.

Der große Unterschied besteht darin, dass kein zentraler Server benötigt wird. Daher gibt es auch keine zentrale Instanz, die den Server verwaltet und die von Instanzen angeklagt werden kann, die das Verhalten des Benutzers missbilligen. Der zweite Unterschied besteht darin, dass Sie alle Arten von Dateien downloaden und mit anderen teilen können - also nicht nur MP3s wie bei Napster.

Es gibt auch Unterschiede, die GNUtella im Vergleich zu Napster weniger günstig abschneiden lassen. Es steht Ihnen kein zentraler Server zur Verfügung. Daher können Sie sich nicht so einfach einloggen. Wo wollen Sie sich überhaupt einloggen? Es ist bei GNUtella hierfür viel mehr Netzverkehr nötig als bei Napster. Warum dies so ist lesen Sie in den Abschnitten Wie funktioniert GNUtella? und Analyse des Protokolls.

Wie ist GNUtella entstanden?

Wer winamp kennt, der kennt wahrscheinlich auch die Firma Nullsoft. Falls nicht: Nullsoft ist die Firma, von der winamp stammt. Nullsoft stellte die ersten Versionen von GNUtella mit einigen Erläuterungen auf ihrer Website bereit. Sei teilte dort außerdem die Absicht mit, den Quellcode unter der GPL (GNU Public Lisence) freizugeben, sobald die erste Version fertiggestellt sei. Einige Stunden später war dies alles wieder verschwunden und das Projekt offiziell eingestellt.

Was war passiert? Das ist leicht zu durchschauen: Winamp ist Eigentum des amerikanischen Internetproviders America Online (AOL). America Online seinerseits ist unlängst von Time Warner übernommen worden. Time Warner wiederum ist die Mutterfirma diverser Plattenlabels. Plattenlabels, die nicht besonders erfreut darüber waren, dass ein Programm freigegeben wurde, mit dem verderbliche MP3s ganz einfach verbreitet werden konnten. Höhern Ortes wurde schnell der Entschluss gefasst, den Stecker zu ziehn.

Wer im Internet einige Stunden etwas auf einer so bekannten Site wie der von Winamp zum Download bereitstellt, der kann sicher sein, dass es einige hundert Mal gedownloadet wird. Was Sie gedownloadet haben ist keine verlustbehaftete Kopie wie dies bei beispielsweise bei einem Tonband der Fall wäre. Eine derartige Kopie ist mit dem Orginal vollkommen identisch. Die gedownloadeten Kopien des Programms wurden dann auch schnell einem Reverse-Engineering [1] unterworfen. Die Spezifikationen erschienen im Netz und die ersten Klones tauchten nur wenig später auf.

Wie vernünftig war der Beschluss, den Stecker zu ziehen? GNUtella gibt es dennoch. AOL/Time Warner bleibt bei der gesamten Entwicklung außen vor. Mögliche Einnahmen durch Werbung entgehen AOL/Time Warner ebenfalls. Eigentlich kann die Situation für AOL/Time Warnern nicht ungünstiger sein.

Wie funktioniert GNUtella?

GNUtella funktioniert in gewisser Weise wie ein Netzwerk. Stellen Sie sich alle Rechner, die GNUtella ausführen, als Netzwerkknoten vor. Die TCP/IP-Verbindungen zwischen diesen Knoten stellen die Netzwerkleitungen dar. Die Datenpakete, die über diese Leitungen übertragen werden, sind dann die gewohnten Datenpakete eines virtuellen Netzwerks [2].

Es gibt prinzipiell zwei Arten von Paketen: Anfragepakete und Antwortpakete.

Wollen Sie eine Anfrage stellen, dann erzeugen Sie ein Anfragepaket, nennen es aaa und schicken es an jeden, zu dem Sie eine Verbindung erhalten haben. Wenn Sie ein Anfragepaket erhalten, dann enthält dieses den Namen des Pakets und die Angabe, von wem Sie es erhalten haben. Wenn Sie den Namen bereits kennen, dann verwerfen Sie das Paket. Andernfalls leiten Sie es, ausgenommen desjenigen, von dem Sie es erhalten haben, an jeden weiter, den Sie kennen. Sie schicken eventuell eine Antwort zurück an denjenigen, von dem Sie die Anfrage erhalten haben.

Wenn Sie später eine Antwort erhalten, dann sehen Sie nach, welchen Namen dieses Paket hat. Eine Antwort hat den gleichen Namen wie die Anfrage. Daher sehen Sie nach, ob Sie den Namen kennen. Wenn ja, dann wissen Sie auch, von wem Sie die Anfrage erhalten haben. Ausschließlich dorthin schicken Sie die Antwort. Kennen Sie den Namen der Antwort nicht, dann verwerfen Sie das Paket. Diese Art, Pakete zu routen, heißt viral propagation (virulente Ausbreitung), siehe Abbildungen.

Abbildung 1

Abbildung 1. vuur sendet eine Anfrage mit dem Namen aaa an alle anderen, die er kennt. Denken Sie daran, dass aaa der Name der Anfrage ist, nicht jedoch das, wonach vuur sucht. Ein Fragezeichen (?) kennzeichnet ein Anfragepaket.

Abbildung 2

Abbildung 2. mies, roos, muis und vlam leiten die Anfrage an die Knoten weiter, mit denen sie verbunden sind. mies hat das, wonach vuur sucht und schickt daher eine Antwort. Ein Ausrufungszeichen (!) kennzeichnet ein Antwortpaket.

Abbildung 3

Abbildung 3. boom leitet die Anfrage an mus weiter. aap hat eine Antwort und leitet diese an mies, das ist der Knoten, von dem er die Anfrage aaa erhalten hat, weiter. muur leitet die Anfrage an pim weiter. pim kennt die Anfrage aaa bereits und verwirft das Paket. pim schickt seine Anfrage auch an muur aber auch muur kennt die Anfrage aaa bereits und verwirft das von pim empfangene Paket. vuur weiß mittlerweile, dass mies das hat, was vuur sucht.

Abbildung 4

mies weiß, dass die Antwort von aap an den Knoten gerichtet sein muss, von dem mies die Anfrage aaa erhalten hat, nämlich vuur. mus schickt seine Antwort an boom, von dem mus die Anfrage aaa erhalten hat.

Abbildung 5

Abbildung 5. vuur weiß, dass auch aap hat, wonach vuur sucht. boom erhält eine Antwort aaa von mus und soll diese direkt an roos weiterleiten, die diese wiederum an vuur weitergeben soll.

Das Downloaden funktioniert ganz einfach: In jedem Antwortpaket ist die die Netzwerkadresse des Rechners enthalten, der die Antwort bereitstellt. Öffnen Sie dorthin eine Verbindung per HTTP-Protokoll [3] und laden Sie die Datei herunter. Das HTTP-Protokoll ist das Protokoll, über das der gesamte WWW-Verkehr abgewickelt wird. Sollte sich der Rechner, von dem Sie etwas haben wollen, hinter einem Firewall befinden, dann können Sie keine Verbindung mit ihm aufnehmen. Glücklicherweise gibt es noch eine anderes Verfahren: Schicken Sie ein spezielles Paket, das die Anfrage enthält. Wenn der Rechner, für den es bestimmt ist, dieses Paket erhält, dann soll er versuchen, eine Verbindung mit Ihnen aufzubauen. So etwas nennt man eine PUSH-Anfrage. Für den Fall, dass Sie sich ebenfalls hinter einer Firewall befinden und daher auch nicht erreicht werden können, gibt es leider keine Lösung.

Aus diesen Antwortpaketen können Sie gleichzeitig Informationen über andere Rechner ableiten, die ebenfalls mit dem virtuellen Netzwerk verbunden sind. Wenn Sie sich das nächsten Mal einloggen, dann können Sie versuchen, anstelle zu einem zentralen Server zu diesen eine Verbindung aufzubauen.

Analyse des Protokolls

Wer sich die Abbildungen genau angesehen hat, der sollte ohne große Rechnerei einsehen, dass recht viele Pakete im GNUtella-Netzwerk herumgeschickt werden könnten. Um dafür zu sorgen, dass Pakete nicht endlos leben, haben sie eine TTL (Time To Live, Lebensdauer). Ganz wie bei TCP/IP ist dies ein Zähler, der um 1 verringert wird, wenn das Paket weitergeleitet wird [4]. Erreicht dieser Wert 0, dann wird das Paket verworfen.

Nehmen wir nun die Standardwerte von GNUtella an. Das bedeutet, dass ein neues Paket eine TTL von 7 zugewiesen bekommt und jedes ausgeführte Programm versucht, mindestens 4 Verbindungen offen zu halten.

Frage: Wenn Sie jetzt suchen, wieviel Pakete werden dann insgesamt höchstens versendet?

Schritt 1: Sie senden eine Anfrage an die 4 Rechner, mit denen Sie verbunden sind.

Schritt 2: Diese Rechner verringern die TTL um 1. Danach schicken Sie das Paket an die Rechner, mit denen sie verbunden sind, mit Ausnahme Ihres Rechners. Jeder Rechner verschickt also 3 Pakete.

Scrhitt 3-8: In diesen Schritten geschieht, abgesehen von den nachfolgenden genannten Punkten, das gleiche wie in Schritt 2: Es werden immer mehr Rechner und die TTL wird jeweils um 1 verringert.

Wieviel Pakete ergibt dies? Es sind 4 + 4*3 + 4*3^2 + 4*3^3 + ... + 4*3^7 = 4 + 12 + 36 + 108 + 324 + 972 + 2916 + 8748 = 13120. Oder, allgemeiner: Sei T der mittlere Wert der TTL und V die mittlere Anzahl an Verbindungen, dann ergibt sich die Zahl der versendeten Datenpakete zu

\sum_{i=0}^T V (V-1)^i

Dabei haben wir die Anzahl der Antworten, im Höchstfall 1 pro Rechner, der das Paket emfangen hat, noch gar nicht berücksichtigt. Dies ist noch einmal die gleiche Anzahl. Nehmen Sie also die Formel mit 2 mal.

Stellen sie sich jetzt vor, dass Sie fündig werden und der Rechner, der antwortet, sich hinter einem Firewall befindet. Die einzige Lösung besteht dann darin, eine PUSH-Anfrage zu stellen: Noch einmal so viele Pakete.

Wenn sie dies gegen den Datenverkehr des Downloads aufrechnen, dann sehen Sie, dass der von Ihnen verursachte Datenverkehr überproportional groß ist.

Ein Systemverwalter sieht es nicht gern, dass 80 % des Netzverkehrs auf den Austausch von große, unnötige Dateien entfallen. Es ist nicht so, dass bei Napster besonders darauf geachtet wurde, etwas gegen den Datenverkehr zu unternehmen. Um Napster zu schließen muss man nur den Datenverkehr zu den Napster-Servern blockieren. Wie aber funktioniert dies bei GNUtella? Es gibt keine zentralen Server, die die GEMA [5] schließen lassen oder vom Netzverkehr ausschließen könnte. Das verwendete Protokoll ist identisch mit dem Protokoll, mit dem Webseiten übertragen werden; eine Sperrung ist daher nicht durchführbar. Durch Verwendung eines Firewalls erzwingen Sie die Versendung von PUSH-Anfragen. GNUtella kann dann nichts mehr von Rechnern downloaden, die sich hinter einem Firewall befinden. Um Downloads mit GNUtella unmöglich zu machen, ist es notwendig, jeden im Internet hinter einen Firewall zu stecken. Das ist nicht praktikabel.

Was wird GNUtella verändern?

Darüber kann ein Futurologe sicher schöne Dinge erzählen. Auf jeden Fall ist hiermit ein Programm entstanden, mit dem der von Plattengesellschaften und Softwarehäusern unerwünschte direkte Austausch von Dateien zwischen Personen auf eine fast nicht aufhaltbare Art möglich ist.

Was dies langfristig für Folgen hat ist - jedenfalls für mich [6] - nicht vorstellbar. Kurzfristig kamm man von der Annahme ausgehen, dass die grenzenlose Verbreitung von nicht per se legalen Daten wieder einen großen Schritt in Richtung auf eine alltägliche Praxis gegangen ist.

Weitere Informationen

Es gibt verschiedene Sites, bei denen Sie mehr über GNUtella erfahren von denen Sie GNUtella-Klones downloaden können. Versuchen Sie es mit:

Es gibt auch FreeNet. FreeNet ist noch komplizierter als GNUtella. FreeNet verbreitet zum Beispiel auch viel verlangte Daten über ein virtuelles Netzwerk.

FreeNet ist aus einem Teil einer Studie von Ian Clarke, einem schottischen AI-Studenten (Artificial Intelligence) [7] entstanden.

Informationen zu FreeNet finden Sie unter

Die Übersetzung und Publikation dieses Textes erfolgte mit Einverständnis des Autors.


Anmerkungen des Übersetzers

[1] Reverse-Engineering
Als Reverse-Engineering bezeichnet man Verfahren, deren Ziel es ist, die in einem ausführbaren Programm verwendeten Methoden zu erkennen. Auch wenn dies zunächst nach einem prinzipiell illegalen Ansinnen klingt: § 69 d UrhG erlaubt gewisse Methoden des Reverse-Engineering ausdrücklich. Das Gesetz über Urheberrechte und verwandte Schutzrechte (Urheberrechtsgesetzt) ist auch online zu finden.
[2] Virtuelles Netzwerk
Ein virtuelles Netzwerk besteht aus einer Menge von Rechnern, die zu einer logischen Einheit zusammengefasst sind. Diese Rechner können zu verschiedenen physischen Netzwerken gehören und über die ganze Welt verteilt sein. Die bekannteste Art des virtuellen Netzwerks stellen so genannte VPNs (Virtual Private Networks, virtuelle private Netzwerke) dar. Auch das Internet kann als ein virtuelles Netzwerk aufgefasst werden.
[3] HTTP-Protokoll
Das HTTP-Protokoll (Hypertext Transfer Protocol) ist in RFC 1945 (Versionen 0.9 und 1.0 - HTTP/1.0) und in RFC 2616 (Version 1.1 - HTTP/1.1) beschrieben. Letzterer wird von RFC 2817 aktualisiert (Upgrading to TLS Within HTTP/1.1). Weitere Informationen zu HTTP finden sich bei W3.org.
[4] TTL (Time To Live, Lebensdauer)
Anders als beschrieben wird das TTL-Feld beim IP nicht notwendigerweise um 1 verringert. Stevens schreibt hierzu in TCP/IP Illustrated, Volume 1 - The Protocols: "RFC 1009 [Branden and Postel 1987] requires a router that held a datagram for more than 1 second to decrement the TTL by the number of seconds. Few routers implemented this requirement. The new Router Requirements RFC [Alquist] makes this optional, allowing a router to treat the TTL as just a hop count." (Übersetzung: RFC 1009 [Branden und Postel, 1987] verlangt von einem Router, der ein Datagramm mehr als eine Sekunde aufhält, die TTL um die Anzahl der Sekunden zu verringern. Wenige Router implementierten diese Forderung. Die neue Router Requirements RFC [Alquist] macht diese Forderung optional, so dass ein Router die TTL als einfachen Abschnittszähler (Hop Count) verwenden kann.)
[5] GEMA
GEMA steht für die Gesellschaft für musikalische Aufführungs- und mechanische Vervielfältigungsrechten. Im Orginal wird an dieser Stelle BUMA STEMRA, die niederländische Entsprechung der GEMA, genannt.
[6] Die Zukunft von GNUtella
Der Übersetzer schließt sich der Aussage des Autors an - GNUtella ist technisch gesehen ähnlich angelegt wie das Internet und wer hätte vor fünf Jahren dessen ungeahnten Aufschwung vorhergesehen?
[7] AI (Artificial Intelligence)
AI (Artificial Intelligence) wird häufig mit künstlicher Intelligenz übersetzt. Bei Artificial Intelligence handelt es sich die international übliche Bezeichnung eines Teilgebiets der Informatik der nicht übersetzt werden sollte (auch der ursprüngliche niederländischen Text verwendet die Bezeichnung Artificial Intelligence).

© Bonner Linux User Group (BoLUG) und die Autoren Letzte Änderung: 17.08.2015, 00:43:11
  Druckdatum: 20.08.2017, 03:58:51