Gnutella
ist ein dezentrales Peer-to-Peer-Netzwerkprotokoll für das Filesharing. Es gibt weltweit mehrere Millionen Nutzer, die über verschiedene Clients auf das Netzwerk zugreifen. Der meist genutzte und bekannteste Client war lange Zeit LimeWire.
Das Gnutella-Netzwerk ist ein vollständig dezentrales Netzwerk. Das bedeutet, dass jeder Benutzer eine gleichwertige Software verwendet und es keine zentralen Server gibt, welche die Suchanfragen bearbeiten. Um trotzdem zu funktionieren, muss das Client-Programm mindestens einen anderen Benutzer (sogenannten node) finden. Um dies zu erreichen, gibt es diverse Methoden wie vordefinierte Serverlisten, GWebCache-Seiten im Internet oder auch der Austausch von Host-Listen über IRC. Wird eine Verbindung aufgebaut, tauschen die Programme Listen erreichbarer Nodes aus, welche dann wiederum kontaktiert werden, bis die eingestellte Anzahl an Verbindungen erreicht ist. Startet ein Benutzer des Netzwerkes eine Suchanfrage, so wird diese zunächst nur an benachbarte Clients weitergeleitet. Diese leiten dann ihrerseits die Anfrage an ihre Nachbarn weiter, bis die angeforderte Datei gefunden wurde. Anschließend kann eine direkte Verbindung zwischen suchendem und anbietendem Benutzer für die Datenübertragung hergestellt werden.
Der besondere Vorteil dieser Netzwerkstruktur ist die Ausfallsicherheit, da Suchanfragen selbst dann weitergeleitet werden können, wenn einzelne Teile des Netzwerkes zeitweise unerreichbar sind. Nachteilig dagegen ist die lange Dauer der Suchanfrage, da es keine zentralen Index-Server gibt, und die hohe Netzwerkbelastung, da mit der Distanz zum suchenden Client die Anzahl der Anfragen exponentiell anwächst.
In den letzten Jahren wurde das Gnutella-Netzwerk allerdings deutlich weiterentwickelt, so dass die Effizienz beträchtlich erhöht werden konnte. Beispiele hierfür sind das QRP, mit dem Quellen sich austauschen, welche Dateien sie haben, so dass auf den letzten beiden Schritten die Anfragen nur noch an diejenigen weitergeleitet werden, die möglicherweise antworten können, und dynamische Suchanfragen, wodurch nicht alle benachbarten Systeme auf einmal angefragt werden, sondern nur so viele, bis genügend Suchergebnisse erhalten wurden.
Das Gnutella-Protokoll wird ständig durch neue Erweiterungen verbessert. Zum einen wird hiermit die Funktionalität erweitert, zum anderen wird mit ausgeklügelten Algorithmen versucht, die benötigte Bandbreite zu reduzieren und die Stabilität zu verbessern.
Hierzu gehören:
Das Gnutella-Netzwerk ist ein vollständig dezentrales Netzwerk. Das bedeutet, dass jeder Benutzer eine gleichwertige Software verwendet und es keine zentralen Server gibt, welche die Suchanfragen bearbeiten. Um trotzdem zu funktionieren, muss das Client-Programm mindestens einen anderen Benutzer (sogenannten node) finden. Um dies zu erreichen, gibt es diverse Methoden wie vordefinierte Serverlisten, GWebCache-Seiten im Internet oder auch der Austausch von Host-Listen über IRC. Wird eine Verbindung aufgebaut, tauschen die Programme Listen erreichbarer Nodes aus, welche dann wiederum kontaktiert werden, bis die eingestellte Anzahl an Verbindungen erreicht ist. Startet ein Benutzer des Netzwerkes eine Suchanfrage, so wird diese zunächst nur an benachbarte Clients weitergeleitet. Diese leiten dann ihrerseits die Anfrage an ihre Nachbarn weiter, bis die angeforderte Datei gefunden wurde. Anschließend kann eine direkte Verbindung zwischen suchendem und anbietendem Benutzer für die Datenübertragung hergestellt werden.
Der besondere Vorteil dieser Netzwerkstruktur ist die Ausfallsicherheit, da Suchanfragen selbst dann weitergeleitet werden können, wenn einzelne Teile des Netzwerkes zeitweise unerreichbar sind. Nachteilig dagegen ist die lange Dauer der Suchanfrage, da es keine zentralen Index-Server gibt, und die hohe Netzwerkbelastung, da mit der Distanz zum suchenden Client die Anzahl der Anfragen exponentiell anwächst.
In den letzten Jahren wurde das Gnutella-Netzwerk allerdings deutlich weiterentwickelt, so dass die Effizienz beträchtlich erhöht werden konnte. Beispiele hierfür sind das QRP, mit dem Quellen sich austauschen, welche Dateien sie haben, so dass auf den letzten beiden Schritten die Anfragen nur noch an diejenigen weitergeleitet werden, die möglicherweise antworten können, und dynamische Suchanfragen, wodurch nicht alle benachbarten Systeme auf einmal angefragt werden, sondern nur so viele, bis genügend Suchergebnisse erhalten wurden.
Das Gnutella-Protokoll wird ständig durch neue Erweiterungen verbessert. Zum einen wird hiermit die Funktionalität erweitert, zum anderen wird mit ausgeklügelten Algorithmen versucht, die benötigte Bandbreite zu reduzieren und die Stabilität zu verbessern.
Hierzu gehören:
- Klassifizierung in Ultrapeer- und Blattknoten
- Query-Routing-Protokoll (QRP)
- Horizontstatistik (HSEP)
- Aktive und passive Warteschlangen für Dateitransfers
- Komprimierung der P2P-Verbindungen (Link Compression Extension)
- Propagieren alternativer Dateiquellen über das sogenannte Download Mesh
- Download-Verifikation mittels Tiger-Tree Hashes
- Meta-Daten