Hierarchische P2P-Netze
Hierarchische P2P-Netze
Hierarchische P2P-Netze
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
BTU Cottbus<br />
Wintersemester 2005/06<br />
Seminar <strong>P2P</strong> Networking<br />
<strong>Hierarchische</strong> <strong>P2P</strong>-<strong>Netze</strong><br />
Uwe Mannl<br />
Klassische unstrukturierte und strukturierte Peer-To-Peer-Netzwerke haben jeweils für sich<br />
Vorteile, aber natürlich auch Nachteile. Doch eines zeichnet sie alle aus: sie sind flach. Nur<br />
stellt sich die Frage, warum man sich darauf beschränken soll. Schließlich ist das Internet<br />
selber auch nicht nur flach. In vielen Bereichen kommen schon hierarchische Prinzipien zum<br />
Einsatz, wie zum Beispiel beim Domain Name System.<br />
In diesem Text wird deshalb erläutert, wie man beide bisherigen Systeme um die Möglichkeit<br />
der Hierarchie erweitern kann, um damit zum einen die Skalierbarkeitsprobleme<br />
einzugrenzen, zum anderen aber eine mindestens gleich gute, wenn nicht sogar bessere<br />
Robustheit zu gewährleisten. Dazu wird im ersten Teil erläutert, wie man bisherige<br />
unstrukturierte <strong>P2P</strong>-<strong>Netze</strong> wie Gnutella zu Super-<strong>P2P</strong>-Netzwerken erweitern kann. Diese<br />
<strong>P2P</strong>-<strong>Netze</strong> mit ihrem wichtigstem Vertreter, dem FastTrack-Protokoll, bilden die 3.<br />
Generation der <strong>P2P</strong>-Netzwerke.<br />
Folgend darauf wird eingegangen, wie in diese Super-<strong>P2P</strong>-Netzwerke noch die Vorteile der<br />
strukturierten <strong>Netze</strong> mit ihren Distributed Hash Tables eingearbeitet werden kann.<br />
Inhaltsverzeichnis<br />
1 Einführung............................................................................................................................... 2<br />
2 Netzarchitekturen .................................................................................................................... 2<br />
2.1 Pure <strong>P2P</strong>-Systeme ............................................................................................................ 2<br />
2.2 Hybride <strong>P2P</strong>-Systeme ...................................................................................................... 3<br />
2.3 Super-<strong>P2P</strong>-Systeme.......................................................................................................... 3<br />
3 Suche in Super-<strong>P2P</strong>-Systemen ................................................................................................ 4<br />
4 Hierarchical DHTs .................................................................................................................. 5<br />
5 Topologien .............................................................................................................................. 6<br />
5.1 Chord................................................................................................................................ 6<br />
5.2 Chord als Top-Level-Netzwerk........................................................................................ 8<br />
5.3 Bottom-Level-Netzwerke................................................................................................. 8<br />
6 Vorteile.................................................................................................................................... 9<br />
6.1 Skalierbarkeit ................................................................................................................... 9<br />
6.2 Robustheit....................................................................................................................... 10<br />
6.3 Suchoptimierungen......................................................................................................... 10<br />
7 Beispiele für hierarchische <strong>P2P</strong>-Netzwerke.......................................................................... 11<br />
7.1 FastTrack........................................................................................................................ 11<br />
7.2 Gnutella (3. Generation)................................................................................................. 12<br />
8 Literatur................................................................................................................................. 14<br />
1
1 Einführung<br />
<strong>Hierarchische</strong> Peer-To-Peer-Systeme mit ihrer hierarchischen Struktur bilden das Gegenstück<br />
zu flachen <strong>P2P</strong>-Systemen, wie es z.B. bei Gnutella in der 1. Generation der Fall ist. Statt dass<br />
es wie bei Gnutella keine Unterscheidung der einzelnen Peers gibt, existieren in<br />
hierarchischen <strong>P2P</strong>-Systemen Rollen für die Peers. Neben den normalen Peers werden<br />
manchen Peers, erfüllen sie bestimmte Voraussetzungen, die Aufgabe so genannter Super-<br />
Peers zugewiesen. Aus diesem Grund werden solche Systeme Super-<strong>P2P</strong>-Systeme oder kurz<br />
Super-Peer-Systems genannt.<br />
Gleichzeitig sind hierarchische <strong>P2P</strong>-Systeme eine Mischform aus dem typischen<br />
zentralisierten Client-Server-Modell und dem dezentralisierten Modell, welches auch in<br />
Gnutella zu tragen kommt. Kein Computer übernimmt im dezentralisierten Modell die<br />
Aufgabe eines Servers, sondern alle angeschlossenen Peers sind in ihrem Erscheinen und ihrer<br />
Aufgabe gleich. In der Literatur wird das Super-<strong>P2P</strong>-Netzwerk deswegen auch als eine<br />
Mischform aus dem puren <strong>P2P</strong>-Netzwerk und dem hybriden-<strong>P2P</strong>-Netzwerk bezeichnet. Es<br />
wird im nächsten Abschnitt „Netzarchitekturen“ auf die eben genannten Netzformen<br />
nochmals eingegangen, um eine bessere Erklärung der hierarchischen <strong>P2P</strong>-Systeme zu<br />
ermöglichen.<br />
Als wichtigsten Vertreter der hierarchischen <strong>P2P</strong>-Systeme ist das FastTrack-Netzwerk zu<br />
nennen, welches sich sogar mit Hilfe der Programme KaZaA und deren freien Alternativen<br />
zum größten <strong>P2P</strong>-Netzwerk für allgemeinen Datenaustausch entwickelt hatte [1].<br />
Der Einsatz von hierarchischen <strong>P2P</strong>-<strong>Netze</strong>n beschränkt sich aber nicht nur auf den<br />
Dateiaustausch mittels Tauschbörsen, sondern hat noch weitere Anwendungsgebiete. So wäre<br />
das Overlay Multicast zu nennen, bei dem es darum geht, dass ein Sender Daten an mehrere<br />
Empfänger gleichzeitig schickt. So ist in dem NICE-Protokoll eine hierarchische Topologie<br />
implementiert.<br />
2 Netzarchitekturen<br />
Um den Aufbau eines hierarchischen <strong>P2P</strong>-Netzwerkes besser verstehen zu können ist es<br />
hilfreich, erst einmal die beiden Grundformen von <strong>P2P</strong>-Systemen in ihrem Aufbau und ihrer<br />
Arbeitsweise zu kennen. Der Name Peer-To-Peer-Netzwerke kommt daher, dass zum<br />
eigentlichen Übertragen von Informationen zwischen den beiden Peers eine direkte<br />
Verbindung aufgebaut wird. Dies geschieht natürlich erst nach dem Suchen, und genau hier<br />
liegen die Hauptunterschiede der verschiedenen Peer-To-Peer-Netzwerkarchitekturen.<br />
2.1 Pure <strong>P2P</strong>-Systeme<br />
Wie schon erwähnt kommen pure <strong>P2P</strong>-Systeme wie Gnutella ganz ohne Server aus. Jeder<br />
Peer, der im speziellen Fall von Gnutella auch Servant oder Servent genannt wird [2],<br />
übernimmt dieselben Aufgaben wie das Routing und das Suchen. So funktioniert zum<br />
Beispiel eine Suche nach dem Schneeballprinzip: Ein Peer schickt die Anfrage, im englischen<br />
Query genannt, an alle ihm bekannten anderen Peers. Diese schauen nach ob sie die<br />
entsprechende Information, meist eine Datei, besitzen, und schicken zusätzlich die Anfrage an<br />
alle ihnen bekannten Peers weiter. Zusätzlich bekommt jede Suchanfrage einen TTL-Flag<br />
(Time-To-Live-Flag) mit gesandt, welcher angibt, wann eine Suchanfrage stirbt.<br />
Beispielsweise bedeutet ein TTL-Flag von 1, dass die Suchanfrage vom anfragenden<br />
2
Computer aus nur zu seinen direkten Nachbarn geht, von dort aber nicht weitergeleitet wird.<br />
Erst bei einem höheren TTL-Flag würden diese Nachbarn ihr Suchanfrage wiederum an ihre<br />
Nachbarn übermitteln.<br />
Ergibt eine Suchanfrage einen Erfolg, also wurde die Datei gefunden, so wird zwischen dem<br />
anfragenden Peer und dem Peer mit der Datei eine direkte Verbindung aufgebaut, um darüber<br />
die Datei zu übertragen.<br />
2.2 Hybride <strong>P2P</strong>-Systeme<br />
Hybride <strong>P2P</strong>-Systeme sind ihrerseits eine Mischung aus den puren <strong>P2P</strong>-Systemen<br />
(dezentrales Modell) und dem Client-Server-Modell (zentrales Modell). Alle Suchanfragen<br />
richtet ein Peer an einem ihn bekannten Server, welcher die Suchanfragen bearbeitet und eine<br />
Antwort dem Peer zurücksendet, von wo er die entsprechende Datei bekommen kann. Dies ist<br />
der Client-Server-Teil. Der Peer baut daraufhin die direkte Verbindung zu dem anderen Peer<br />
auf. Dies ist der dezentrale Teil, da die Verbindung dann direkt erfolgt und nicht mehr über<br />
den Server.<br />
Das bekannteste Beispiel für ein Hybrides <strong>P2P</strong>-System ist die erste erfolgreiche und<br />
allgemein bekannte Tauschbörse Napster. Diese lief damals mit 200 Index-Servern [3], auf<br />
welche beim Programmstart eine Liste der zur Verfügung stehenden Dateien übertragen<br />
wurde. Die Server waren jedoch nicht untereinander synchronisiert, was zur Folge hatte, dass<br />
eine Suchanfrage an einen Server nie die Clients bekannt gab, welche zu den anderen Servern<br />
verbunden waren [1].<br />
In einigen Veröffentlichungen wird Napster den Super-<strong>P2P</strong>-Systemen mit nur einer Gruppe<br />
zugeschrieben, welche jetzt vorstellt werden.<br />
2.3 Super-<strong>P2P</strong>-Systeme<br />
In den Super-<strong>P2P</strong>-Systemen wird versucht, den Vorteil der effizienten, zentralisierten Suche<br />
mit dem Vorteil der autonomen, lastverteilten und gegen Angriffe robusten dezentralen Suche<br />
unter einen Hut zu bringen. Zusätzlich schafft man es so, die unterschiedlichen Stärken der<br />
einzelnen Peers wie Bandbreite und Rechenleistung zu nutzen [4].<br />
Abbildungen 1 und 2 zeigen den typischen Aufbau eines Super-Peer-Systems. Jeder Peer,<br />
welcher in einem Graphen als Knoten bezeichnet wird, gehört einer Gruppe an. Es wird in<br />
Abbildung 1 nur der so genannte Top-Level-Overlay gezeigt, welcher die Verbindung<br />
zwischen den Gruppen darstellt.<br />
Abbildung 1: Top-Level-Overlay eines Super-Peer-Systems (entnommen [6])<br />
3
In Abbildung 2 wird dann sichtbar, wie die Kommunikation zwischen den Gruppen erfolgt.<br />
Die grau gefüllten Kreise entsprechen SuperPeers, die weißen, ungefüllten Kreise stehen für<br />
normale Peers. Für die Kommunikation zwischen den Gruppen sind die SuperPeers zuständig,<br />
denn nur diese senden Anfragen der Peers weiter.<br />
Abbildung 2: Aufbau eines Super-Peer-Netzwerkes (entnommen [6])<br />
Dazu muss jeder Peer mit einem SuperPeer aus der Gruppe verbunden sein. Pro Gruppe<br />
existiert mindestens 1 SuperPeer, mehrere sind jedoch genauso möglich und erhöhen die<br />
Robustheit des Netzwerkes. Die Auswahl der SuperPeers erfolgt nach gewissen Kriterien,<br />
wonach bestimmte Peers bevorzugt werden. Zu den Kriterien zählen einerseits die<br />
Rechenleistung sowie die Bandbreite der Anbindung an das Netz, andererseits aber auch, wie<br />
lange ein Peer im Vergleich zu anderen schon im Netz aktiv ist. Verbindet sich beispielsweise<br />
ein neuer Peer mit dem Netzwerk und meldet sich in einer entsprechenden Gruppe an, so<br />
übermittelt er dem zuständigen SuperPeer neben anderen Informationen auch seine<br />
Leistungsdaten. Anhand dieser Daten aller Peers in einer Gruppe kann ein SuperPeer<br />
entscheiden, welcher Peer am ehesten geeignet ist, um die Rolle eines zusätzlichen oder neuen<br />
SuperPeers zu übernehmen. Genauso muss im Falle des Ausfalls eines SuperPeers<br />
entschieden werden, welcher Peer dessen Funktionen übernimmt. Bei der Ernennung eines<br />
neuen SuperPeers werden alle Peers in der Gruppe darüber informiert sowie die SuperPeers in<br />
den benachbarten Gruppen. Damit wird eine gute Stabilität des Top-Levels erreicht.<br />
Sinnvoll bei der Bildung von Gruppen ist es darauf zu achten, dass topologisch nahe liegende<br />
Peers zu einer Gruppe zusammengefasst werden. Diese hätten dann eine höhere Chance für<br />
bessere Übertragungsraten untereinander, was zum dem Vorteil des Content-Cachings führt.<br />
Dieses wird im Abschnitt 6.3 „Suchoptimierungen“ genauer dargelegt. Während man bei der<br />
Kommunikation der SuperPeers untereinander vom Top-Level-Overlay spricht, so wird der<br />
Zusammenschluss der Peers innerhalb einer Gruppe als Bottom-Level oder auch Intra-Group<br />
bezeichnet.<br />
3 Suche in Super-<strong>P2P</strong>-Systemen<br />
Super-<strong>P2P</strong>-Systeme sind im Allgemeinen unstrukturierte <strong>P2P</strong>-Systeme. Von strukturierten<br />
hierarchischen <strong>P2P</strong>-Systemen spricht man erst, wenn zum Beispiel Verteilte Hash-Tabellen<br />
genutzt werden, wie im nächsten Abschnitt „Hierarchical DHTs“ beschrieben wird.<br />
4
Die Suchanfrage in Super-<strong>P2P</strong>-Systemen erfolgt also ähnlich wie in den puren <strong>P2P</strong>-Systemen.<br />
Die SuperPeers haben jedoch noch die zusätzliche Aufgabe, einen Index zu verwalten. In<br />
diesem Index steht, welcher Peer welche Informationen, Daten oder speziell Dateien besitzt.<br />
Der SuperPeer speichert nur die Informationen der an ihm angeschlossenen Peers, also aller<br />
Peers in seiner Gruppe<br />
Abbildung 3 zeigt den Ablauf einer Suche, die von Peer P1 gestartet wird. Er schickt seine<br />
Anfrage nach der Datei k an einen beliebigen SuperPeer seiner Gruppe g1. Dieser behandelt<br />
die Suchanfrage jetzt wie seine eigene, und schaut zuerst nach, ob ein anderer Peer derselben<br />
Gruppe die von P1 erfragte Datei besitzt. Zusätzlich wird die Suchanfrage an alle von g1<br />
bekannten Nachbarn geschickt, in dem Fall an g2 und g4. Die SuperPeers schauen jeweils<br />
wieder in der eigenen Gruppe nach, und senden die Anfrage außerdem an g3 weiter. Die<br />
Suche erfolgt also nur zwischen den SuperPeers auf dem Top-Level-Overlay. Der SuperPeer<br />
der Gruppe g3 hat schließlich in seinem Index stehen, dass Peer P2 die gesuchte Datei besitzt.<br />
Demzufolge kann dieser SuperPeer die Daten über P2, wie seine IP-Adresse, auf dem<br />
gleichen Weg, wie die Suche erfolgt, zurückschicken. P1 kann damit dann eine direkte<br />
Verbindung zu P2 aufbauen und die entsprechende Datei empfangen.<br />
Abbildung 3: Suchablauf in einem Super-Peer-Netzwerk (angelehnt an [6])<br />
Die Suche in unstrukturierten Super-<strong>P2P</strong>-Systemen besitzt dieselben Nachteile wie die in<br />
puren <strong>P2P</strong>-Systemen. So ist zwar bei gleicher Anzahl von Teilnehmern im Netz zwar<br />
ausgeschlossen, dass langsame Peers die Suche beeinträchtigen, aber gleich viele Teilnehmer<br />
bedeuten auch gleich viele Suchanfragen und damit eine nicht geringer gewordene Flut von<br />
Suchanfragen, die die SuperPeers bewältigen müssen. Auch ist die Suche nach seltenen Daten<br />
wenig effizient, da nie sichergestellt ist, dass eine Suchanfrage bis zu der Gruppe mit der<br />
entsprechenden Information angelangt. Der TTL-Flag ist schließlich auch hier nötig, um<br />
Suchen nach gewisser Zeit abzubrechen.<br />
4 Hierarchical DHTs<br />
Verteilte Hash-Tabellen (Distributed Hash Tables, kurz DHTs) ermöglichen in flachen,<br />
strukturierten <strong>Netze</strong>n das schnelle Auffinden von Dateien, indem jeder Datei ein eindeutiger<br />
Key zugewiesen wird. Jeder Peer erhält dann die Zuständigkeit für einen Teil der Hash-<br />
Tabelle, also für bestimmte Keys. Er weiß sozusagen, wo die entsprechenden Dateien liegen.<br />
Erfolgt eine Anfrage nach einer Datei, so sucht der Peer bei sich, ob er zuständig ist. Ist dies<br />
nicht der Fall, wird die Anfrage zu anderen Peers weitergeleitet, wobei zum Peer geroutet<br />
5
wird, welcher für den Key zuständig ist. Dies kann gezielt zum entsprechenden Peer<br />
geschehen, da die Bereiche linear aufgeteilt sind und Anfragen immer an dem zum Key<br />
nahesten Peer weitergeleitet werden. Dabei ist die Datenverteilung an eine entsprechende<br />
Topologie gebunden. Diese bestimmt, welche Peers zu Nachbarn werden.<br />
In hierarchischen DHTs gibt es jetzt den Unterschied, dass die Suchanfragen zuerst die<br />
Gruppe finden, welche für den Key zuständig ist, dann den Peer in dieser Gruppe, welcher<br />
den Key verwaltet. Dies geschieht ähnlich wie bei den unstrukturierten Super-<strong>P2P</strong>-Systemen,<br />
nur dass nicht eine bestimmte Datei gesucht wird sondern der Schlüssel zu der Datei.<br />
Im Speziellen bedeutet das: Die Suchanfrage eines Peers geht direkt an einen SuperPeer<br />
seiner Gruppe. Von dort aus sendet der SuperPeer die Anfrage auf dem so genannten Top-<br />
Level weiter, bis die Gruppe gefunden ist, welche für den Key zuständig ist. Dabei wird auch<br />
nur von SuperPeer zu SuperPeer geroutet, die restlichen Peers spielen in der Top-Level-Suche<br />
keine Rolle. Erreicht die Anfrage den entsprechenden SuperPeer, so leitet dieser dann die<br />
Anfrage weiter zum entsprechenden Peer, welcher den Key verwaltet. Dieser Peer kann dann<br />
eine Antwort an den anfragenden Peer schicken. Das geschieht entweder mittels direkter<br />
Verbindung oder einfach rückwärts den Weg, über welcher die Anfrage kam [5].<br />
Möglichkeiten der Suchstrategien im Top-Level sowie im Bottom-Level werden im nächsten<br />
Abschnitt „Topologien“ angeführt.<br />
Interessant ist noch der Aufbau einer Gruppe in einer hierarchischen DHT. Will ein Peer am<br />
Netz mit teilnehmen, so muss ihm eine Gruppe zugewiesen werden. Dazu benötigt er<br />
Informationen wie seine eigene ID, die ID, zu welcher Gruppe er gehören soll und die IP-<br />
Adresse eines schon im Netz vorhandenen Peers. Eine ID ist ein eindeutige Schlüssel oder<br />
eine eindeutige Nummer, die genau den Peer oder die Gruppe ausweist. Die Wahl der<br />
Gruppen-ID wird auch hier anhand verschiedener Gesichtspunkte getroffen.<br />
Beim Anmelden im Netz wird zuerst der schon im Netz aktive Peer kontaktiert und gefragt,<br />
wo die Gruppe zu finden ist, zu welcher der neue Peer angehören wird. Dazu schickt der neue<br />
Peer eine Suchanfrage nach seiner Gruppen-ID los. Über den schon im Netz aktiven Peer<br />
erhält er dann die IP-Adressen der SuperPeers mit der entsprechenden Gruppen-ID. So kann<br />
sich der neue Peer dann in der Gruppe anmelden. Es kann aber auch vorkommen, dass die als<br />
Antwort erhaltende Gruppen-ID nicht exakt seiner eigenen entspricht. In dem Fall macht der<br />
neue Peer eine neue Gruppe mit seiner Gruppen-ID auf, in der er selber der bis dato einzige<br />
SuperPeer ist.<br />
5 Topologien<br />
Es gibt verschiedene Strategien zum Aufbau des Top-Levels sowie des Bottom-Levels. Hier<br />
können schon vorhandene Strukturen adaptiert werden, um z.B. geringste Suchdauern zu<br />
ermöglichen.<br />
Es wird hier nur auf eine spezielle Top-Level DHT eingegangen, die auch in anderen<br />
strukturierten <strong>P2P</strong>-Systemen zum Einsatz kommt, nämlich Chord. Andere Formen der DHTs<br />
finden sich unter [7], und benötigen ähnlich wie Chord geringfügige Anpassungen, um im<br />
Top-Level-Overlay Verwendung finden zu können<br />
5.1 Chord<br />
Im Chord-System hat jeder Peer und jeder Schlüssel eine m-stellige Bitfolge als ID. Diese IDs<br />
kann man sich auf einem Ring mit dem Umfang von 2 m vorstellen. Jeder Schlüssel ist einem<br />
Peer zugeordnet, dessen ID gleich ist oder der als nächstes in der Reihe folgt. Dieser Peer<br />
6
wird Successor (Nachfolger) vom Key k genannt. Jeder Peer kennt seinen nachfolgenden und<br />
seinen vorgehenden Peer in dem Ring. Zusätzlich kennt jeder Peer noch m andere Peers, die<br />
so genannten Fingers. Diese werden in einer Finger-Table eines Peers zusammengefasst. Wer<br />
ein Finger eines Peers ist bestimmt folgender Algorithmus: Ein Peer mit der ID p kennt alle<br />
Peers mit den IDs p+2 j-1 (für j von 1 bis m). All diese Informationen ergeben die Chord-<br />
Routing-Table [5]. Abbildung 4 zeigt den Aufbau eines solchen Ringes.<br />
Abbildung 4: Aufbau eines Chord-Ringes (entnommen [6])<br />
Abbildung 5 zeigt den Ablauf einer Suche innerhalb eines Chord-Ringes. Bei einer Suche<br />
nach einer bestimmten Datei wird nach dem entsprechenden Schlüssel dieser Datei gesucht.<br />
Sucht Knoten N8 nach dem Schlüssel 54, so wird die Anfrage an den Peer weitergeleitet,<br />
dessen ID am nächsten ist. N8 hat in seiner Finger-Table den Knoten N42 mit der höchsten ID<br />
zu 54 stehen und leitet die Anfrage an den Knoten weiter. Von N42 geht es dann über N51 zu<br />
N56, welcher für den Key 54 zuständig ist.<br />
Abbildung 5: Suche in Chord (entnommen [7])<br />
Um das Prinzip von Chord auf dem Top-Level eines hierarchischen <strong>P2P</strong>-Systems anwenden<br />
zu können bedarf es einiger Modifikationen. Diese werden im folgenden Abschnitt „Chord als<br />
Top-Level-Netzwerk“ beschrieben. Der Einfachheit halber wird diese vorm des<br />
hierarchischen Cords auch als Top-Level-Chord bezeichnet.<br />
7
5.2 Chord als Top-Level-Netzwerk<br />
Wie in Abbildung 4 zu sehen ist, besteht der Ring jetzt nicht mehr aus einzelnen Peers,<br />
sondern aus Gruppen. Dies sind genau die Gruppen des Super-<strong>P2P</strong>-Systems. So sind der<br />
Vorgänger und der Nachfolger nicht mehr einzelne IP-Adressen der Peers, sondern Vektoren,<br />
in denen jeweils die IP-Adressen der SuperPeers in der Nachfolgergruppe bzw. der<br />
Vorgängergruppe stehen. Genauso sind die Fingers jetzt Vektoren mit den IP-Adressen der<br />
entsprechenden SuperPeers in den Gruppen, auf die der Finger zeigt. Die Routing-Tabelle<br />
eines solchen Chords ist in Abbildung 6 gezeigt.<br />
Abbildung 6: Chord in einem Top-Level-Netzwerk (entnommen [6])<br />
Fällt ein einzelner Peer aus (in diesem Fall sind nur die Ausfälle von SuperPeers relevant), so<br />
spielt das aus der Sicht des Chord-Ringes weniger eine Rolle als beim klassischen Chord. Es<br />
tritt in der Gruppe ein anderer Peer an dessen Stelle und wird zum SuperPeer. Dieser neue<br />
SuperPeer aktualisiert die Vektoren der Vorgänger- und Nachfolgergruppen und gewährleistet<br />
somit, dass jede Gruppe einen aktuellen Stand über ihre Vorgänger- und Nachfolgergruppen<br />
hat. Bei den Fingers verhält es sich leicht anders, da Suchanfragen auch ohne Fingers möglich<br />
sind. Die Anfragen können auch nur über Vorgänger und Nachfolger ihr Ziel erreichen, wenn<br />
auch mit höherer Laufzeit. Fingers sind also nicht kritisch für den Zusammenhalt des Rings<br />
und werden deswegen erst aktualisiert, wenn festgestellt wird, dass eine Referenz ungültig<br />
geworden ist.<br />
5.3 Bottom-Level-Netzwerke<br />
<strong>Hierarchische</strong> <strong>P2P</strong>-Netzwerke bieten den Vorteil, dass verschiedene Netzstrukturen<br />
zusammengeschlossen werden können, je nachdem, was an bestimmten Stellen besser zum<br />
Einsatz kommt. So können die Bottom-Level-<strong>Netze</strong> eine andere Topologie als das Top-Level-<br />
Overlay besitzen, und selbst zwischen den Gruppen kann der Aufbau der Bottom-Level-<strong>Netze</strong><br />
unterschiedlich sein. So eignen sich für die Intra-Group-Suche verschiedene Strategien, je<br />
nachdem wie viele Teilnehmer eine Gruppe hat.<br />
8
Für Gruppen mit einer kleinen Anzahl an Peers ist ein komplizierter Aufbau des Bottom-<br />
Levels wie z.B. mit Chord nicht nötig, da jeder Rechner genug Leistung aufbringen kann um<br />
selbst alle nötigen Informationen zu speichern. In dem Fall lässt sich CARP oder Consistent-<br />
Hashing nutzen. [5] Dabei speichert jeder Peer die IDs und IP-Adressen aller anderen Peers<br />
derselben Gruppe in einem eigenen Index. Jeder Peer hat dadurch eine Hash-Tabelle, in der<br />
steht, welcher Peer in der Gruppe für welchen Schlüssel zuständig ist. Im Fall von CARP<br />
bilden alle Peers einen Cluster mit einem Master und mehreren Slaves. Nach außen hin, also<br />
aus der Sicht des Top-Level-Overlays, hat der Cluster nur eine virtuelle IP-Adresse, über die<br />
der Cluster angesprochen werden kann. [8]<br />
Für Gruppen mit mehreren Hundert Peers wäre ein SuperPeer effizient, welcher alle Peers in<br />
der Gruppe verwaltet, und alle Suchanfragen und Routingaufgaben übernimmt. Dies<br />
entspricht dem typisch Client-Server-Prinzip, wobei der Server gleichzeitig der SuperPeer ist,<br />
der die Kommunikation zum Top-Level-Overlay übernimmt.<br />
Gruppen mit noch höherer Teilnehmerzahl sollten auf erprobte Systeme mit DHTs wie Chord,<br />
CAN, Pastry oder Tapestry zurückgreifen, um bestmögliche Stabilität und Effizienz zu<br />
gewährleisten.<br />
6 Vorteile<br />
6.1 Skalierbarkeit<br />
Es besteht die Möglichkeit, ein hierarchisches <strong>P2P</strong>-System nicht nur aus 2, sondern aus 3 oder<br />
mehreren Ebenen aufzubauen. Hierfür eignet es sich, im Bottom-Level das schon angepasste<br />
Top-Level-Chord anzuwenden. Es würden also mehrere Peers zu einer Gruppe<br />
zusammengefasst werden und genug von diesen Gruppen zu Gruppen einer höheren Ebene.<br />
Dies ermöglicht eine gute Skalierbarkeit der hierarchischen <strong>P2P</strong>-<strong>Netze</strong>, denn es liegt nur eine<br />
geringe Geschwindigkeitseinbuße vor. Suchanfragen erfolgen nämlich immer nur noch auf<br />
Top-Level, und müssen somit nur wenige SuperPeers durchlaufen.<br />
In [5] wurde mit statistischen Mitteln untersucht, wie viel Verbesserung durch die<br />
Verwendung einer hierarchischen DHT möglich ist im Vergleich zu einer klassischen flachen<br />
DHT. Es wurde Chord als Vergleich genutzt, und gezählt wurden die Anzahl der Sprünge<br />
innerhalb des Ringes, bis der entsprechende Peer gefunden wurde, welcher den gesuchten<br />
Schlüssel besitzt. Als Erläuterung zur Abbildung 7: P steht für die Anzahl der Peers im<br />
gesamten Netz, I für die Anzahl der Gruppen, was natürlich nur im hierarchischen Fall eine<br />
Rolle spielt, und pr bzw. ps steht für die Ausfallwahrscheinlichkeit eines Peers im Chord-<br />
Ring. Da im Top-Level-Chord ein einzelner Knoten für eine Gruppe steht mit seinen<br />
SuperPeers, kann hier eine Ausfallwahrscheinlichkeit von 0 angenommen werden. Ein<br />
ausfallender SuperPeer würde unverzüglich durch einen anderen SuperPeer ersetzt werden,<br />
wodurch der Knoten im Chord-Ring nicht ausfallen wird. Die Zahlen in der Tabelle stehen für<br />
die Anzahl der Sprünge, um einen Schlüssel zu finden. Wie zu erkennen ist, gibt es eine<br />
deutliche Verminderung der Hops (Sprünge). So wird die durchschnittliche Dauer der<br />
Suchanfrage um den Faktor 7 geteilt [5].<br />
9
Abbildung 7: Vergleich flache und hierarchische DHT (entnommen [5])<br />
Es erfolgt außerdem bei Top-Level-Chord für Anfragen immer eine zufällige Auswahl des<br />
SuperPeers aus den Vektoren, um die entsprechende Anfrage weiterzuleiten. Dies bedeutet<br />
eine bessere Lastverteilung, da nicht ein SuperPeer (sowie dessen Anbindungen) übermäßig<br />
mehr belastet wird als ein anderer. Somit ergibt sich auch hier eine bessere Skalierbarkeit,<br />
denn reicht die Anzahl der SuperPeers pro Gruppe nicht aus kann diese relativ einfach erhöht<br />
werden.<br />
6.2 Robustheit<br />
Die Nutzung von Chord im Top-Level führt nicht nur zu einer besseren Skalierbarkeit des<br />
<strong>P2P</strong>-<strong>Netze</strong>s, sondern auch zu höherer Robustheit gegenüber Ausfällen.<br />
Da kein zentraler Server existiert, welcher alle Clients steuert, bedeutet der Ausfall eines<br />
beliebigen Peers nicht die Möglichkeit des Zusammenbruches des <strong>Netze</strong>s. Im schlimmsten<br />
Fall fällt ein SuperPeer aus, was nur dahingehend tragisch wäre, da er eine bessere Leistung<br />
gebracht hat gegenüber den anderen Peers dieser Gruppe. Es wird jedoch sofort der ab jetzt<br />
bestmögliche Peer zum SuperPeer ernannt. Dies geschieht mittels einer Liste, die jeder<br />
SuperPeer über „seine“ Peers führt. Diese Liste ist so geordnet, dass potentiell gute<br />
Kandidaten zum SuperPeer möglichst oben stehen, während ungeeignete Peers unten stehen.<br />
Ein SuperPeer überwacht sozusagen ständig seine Peers und aktualisiert die Liste anhand<br />
bestimmter Kriterien wie Rechenleistung, Bandbreite und Online-Zeit des Peers.<br />
6.3 Suchoptimierungen<br />
In Abschnitt 2.3 „Super-<strong>P2P</strong>-Systeme“ wurde schon erwähnt, dass es sinnvoll ist, Computer,<br />
die untereinander eine schnelle Anbindung haben, zu einer Gruppe zusammenzufassen.<br />
Dadurch kann den Suchalgorithmus noch verbessern, wie in Abbildung 8 dargestellt. Startet<br />
ein Peer P1 eine Suchanfrage, so wird erst innerhalb der Gruppe geschaut, ob ein Peer P2<br />
verantwortlich für diesen Key ist. In dem Fall holt sich P2 die Datei von dem entsprechenden<br />
Peer P4, cached sie bei sich und leitet sie dann zu Peer P1 weiter. Erfolgt eine weiter<br />
Suchanfrage von Peer P4 nach genau der Datei, so hat sie vielleicht noch P2 im Cache und<br />
kann sie schneller, dank besserer Anbindung, an P4 senden. Die Datei muss nicht noch mal<br />
über die wahrscheinlich langsamere Verbindung von P3 geholt werden.<br />
10
Abbildung 8: Content Caching in einem Super-Peer-Netzwerk (angelehnt an [6])<br />
Natürlich spielt bei dieser Art des Cachens die Größe des Caches eine wichtige Rolle sowie<br />
die Dateien, die gecached werden. Es ist umso effizienter, je häufiger eine Datei angefordert<br />
wird, denn bei den meisten Cache-Algorithmen wie LRU (Last Recently Used) bleiben die<br />
am häufigsten benutzen Dateien im Cache, während seltene Dateien eher gelöscht bzw.<br />
überschrieben werden.<br />
7 Beispiele für hierarchische <strong>P2P</strong>-Netzwerke<br />
7.1 FastTrack<br />
Das FastTrack Protokoll wurde im März 2001 von Niklas Zennström & Janus Friis<br />
veröffentlich und erweiterte das bis dahin verwendete Gnutella Protokoll um Supernodes [9].<br />
Diese Supernodes entsprechen den in diesem Text behandelten SuperPeers.<br />
Kazaa wurde damals gleichzeitig mit dem FastTrack Protokoll entwickelt und ist die<br />
bekannteste Anwendung für dieses Netz. Wie in Abbildung 9 zu erkennen ist, gibt es zum<br />
klassisch unstrukturierten, hierarchischen <strong>P2P</strong>-System nur geringe Unterschiede, welche sich<br />
auf sicherlich darauf begründen, dass Kazaa auch kommerziell vertrieben wird. So wurden die<br />
Übertragungsprotokolle nie offen gelegt, und viele andere Clients sowie die freie<br />
Implementierung des FastTrack-Protokolls „Open FastTrack“ entstanden mittels Reverse-<br />
Engineering. [10]<br />
11
Abbildung 9: Funktionsweise von Kazaa (entnommen [3])<br />
Arbeitsweise: ein Node (Peer) fragt beim Anmelden am System nicht einen schon bekannten<br />
und aktiven Peer ab, sondern meldet sich bei einem Server an, dessen IP-Adresse direkt im<br />
Programm gespeichert ist. Dieser Server übermittelt daraufhin eine aktuelle Liste von<br />
SuperPeers, bei denen sich der Peer anmelden kann. Der Peer testet daraufhin die SuperPeers<br />
auf die Round-Trip-Time ab. Dazu wird gemessen, wie lange ein Paket vom Peer zum<br />
SuperPeer und wieder zurück braucht, also bis es beantwortet wird. Anhand dieser Zeiten<br />
meldet sich der neue Peer in der Gruppe an, dessen SuperPeers die kleinste Round-Trip-Time<br />
hat, und übermittelt dem zuständigen SuperPeer eine Liste mit den auf dem Peer verfügbaren<br />
Dateien. Suchanfragen sowie Dateiübertragungen funktionieren wie in der für hierarchische<br />
<strong>P2P</strong>-<strong>Netze</strong> typischen Art und Weise über die SuperPeers beziehungsweise direkt von Peer zu<br />
Peer.<br />
Ein großer Vorteil in der im FastTrack-Protokoll zugrunde liegenden Technik liegt darin, dass<br />
ein Peer mehrere direkte Verbindungen zu unterschiedlichen Peers aufbauen kann, um von<br />
diesen parallel Daten zu beziehen. Selbst für eine Datei ist ein simultaner Download von<br />
mehreren Peers möglich, indem stets unterschiedliche Teile der Datei herunter geladen<br />
werden. Dies ermöglicht bei geringer Bandbreite zu einzelnen Peers eine höhere<br />
Gesamtdownloadrate.<br />
7.2 Gnutella (3. Generation)<br />
Das Gnutella-Protokoll wurde noch vor dem FastTrack-Protokoll im Jahre 2000 entwickelt<br />
und veröffentlicht. Während die erste wirklich erfolgreiche Tauschbörse namens Napster mit<br />
Klagen überhäuft wurde, konzipierte man Gnutella von vornherein so, dass es ohne jegliche<br />
Server funktioniert. Damit sollte es unmöglich gemacht werden, dass das Netz von Seiten der<br />
Musikindustrie sowie der RIAA (Recording Industry Association of America) geschlossen<br />
werden kann. Dies war bei Napster der Fall mit der Stilllegung derer Server.<br />
Während in der ersten und zweiten Gnutella-Generation schmalbandige Peers entweder von<br />
der Last der Anfragen überwältigt beziehungsweise ihre Anzahl der Verbindungen angepasst<br />
wurden, wurden in der dritten Generation Hierarchien eingeführt. So genannte Ultrapeers<br />
übernehmen die Netzlast für schmalbandige Peers. [11]<br />
Dazu werden alle angeschlossenen Teilnehme in Leaves (Blätter) und Ultrapeers unterteilt.<br />
Ein Leaf entspricht dem in diesem Text behandelten Peers, ein Ultrapeer ist vergleichbar mit<br />
einem SuperPeer. Zusätzlich ist es möglich, dass sich Gnutella-Clients mit dem Netzwerk<br />
12
verbinden können, die noch nicht den Ultrapeer-Modus implementiert haben. Diese werden<br />
Legacy Peers genannt. [12]<br />
Der Aufbau des neuen Gnutella-Netzwerkes unterscheidet sich aber im Vergleich zum<br />
typischen Super-Peer-Netzwerk. Die Ultrapeers bilden zusammen mit den Legacy Peers das<br />
Top-Level-Overlay. Dadurch wird gewährleistet, dass die Clients ohne Ultrapeer-Modus<br />
vollständig im Netz integriert sind. Die Legacy Peers bauen jedoch im Gegensatz zu den<br />
Ultrapeers keine Verbindungen zu den Leaves auf. Ultrapeers haben nämlich die Aufgabe,<br />
Verbindungen von Leaves zu akzeptieren und für sie Such- und Routingaufgaben zu<br />
übernehmen. So übermittelt ein Leaf beim Anmelden an einen Ultrapeer eine Liste seiner<br />
verfügbaren Dateien. Dies erlaubt dem Ultrapeer, Anfragen nur an die Leaves weiterzuleiten,<br />
welche möglicherweise über passende Dateien verfügen. Dies reduziert die Anzahl der<br />
weitergeleiteten Nachrichten zu den Leaves, was zu einer steigenden Skalierbarkeit des<br />
Netzwerkes um einen konstanten Faktor führt [12].<br />
Ein weiterer Unterschied liegt darin, dass ein Ultrapeer mit den an ihm angeschlossenen<br />
Leaves keine in sich geschlossene Gruppe bildet; erkennbar in Abbildung 10. Ein Leaf<br />
verbindet sich im Regelfall zu 3 Ultrapeers, was allerdings im Client geregelt ist. Es wird<br />
empfohlen, die maximale Anzahl dieser Verbindungen auf 10 zu beschränken.<br />
Abbildung 10: Topologie eines modernen Gnutella-Netzwerkes (entnommen [12])<br />
Ob es einem Peer gestattet ist, Ultrapeer zu werden, wird erstens von bestimmten<br />
Bedingungen abhängig gemacht, die unbedingt erfüllt sein müssen. Dazu zählt zum Beispiel<br />
genügend Rechenleistung sowie eine ausreichende Bandbreite von empfohlenen 15 KB/s im<br />
Download und 10 KB/s im Upload. Des Weiteren ist es nötig, dass ein Ultrapeer nicht hinter<br />
einer Firewall sitzt. Auch sind bestimmte Betriebssysteme wie Windows 95 oder 98 nicht<br />
geeignet, um die größere Anzahl von Verbindungen verwalten zu können. Auch ist es wie in<br />
den Super-<strong>P2P</strong>-Systemen wichtig, dass der Client eine hohe Onlinezeit im Netzwerk<br />
vorweisen kann. Sind diese Bedingungen erfüllt, so ist aber noch nicht gesagt, dass ein Client<br />
unbedingt zu einem Ultrapeer wird. Dies ist davon abhängig, ob überhaupt weitere Ultrapeers<br />
benötigt werden. Die Notwendigkeit nach neuen Ultrapeers kann abgeschätzt werden anhand<br />
der Anzahl im Netz vorhanden Ultrapeers. [13]<br />
13
8 Literatur<br />
[1] Markus Zoier: Peer-to-Peer Tauschbörsen; Seminararbeit; Technische Universität Graz;<br />
Österreich; 2002<br />
[2] Servent; http://en.wikipedia.org/wiki/Servent; Dezember 2005<br />
[3] Rolf Domberger, Daniel Fuchs: Peer-to-Peer Netzwerke und Geschäftsmodelle;<br />
Discussion Paper 2004-04; Schweiz; 2004<br />
[4] Beverly Yang, Hector Garcia-Molina: Designing a Super-Peer Network; Stanford<br />
University; 2003<br />
[5] L. Garces-Erice, E.W. Biersack, P.A. Felber, K.W. Ross, G. Urvoy-Keller: Hierarchical<br />
Peer-to-peer Systems; France, USA; 2003<br />
[6] L. Garces-Erice, E.W. Biersack, P.A. Felber, K.W. Ross, G. Urvoy-Keller: Hierarchical<br />
Peer-to-peer Systems (Foliensammlung); France, USA; 2003<br />
[7] Hari Balakrishnan, M. Frans Kaashoek, David Karger, Robert Morris, Ion Stoica: Looking<br />
up data in <strong>P2P</strong> systems; 2003<br />
[8] Common Address Redundancy Protocol; http://de.wikipedia.org/wiki/CARP; Dezember<br />
2005<br />
[9] FastTrack; http://de.wikipedia.org/wiki/FastTrack; Dezember 2005<br />
[10] Christoph Steckelberg: Peer to Peer Netzwerke und ihre Anwendung; 2002<br />
[11] Frank Sowinski: Implementierung eines Gnutella-Clients für IPv6; Dezember 2002<br />
[12] Daniel Stutzbach, Reza Rejaie, Subhabrata Sen: Characterizing Unstructured Overlay<br />
Topologies in Modern <strong>P2P</strong> File-Sharing Systems; University of Oregon; 2005<br />
[13] Ultrapeer Election Principles: http://www.thegdf.org/wiki/index.php?title=Ultrapeer_Election_Principles;<br />
Dezember 2005<br />
14