Technische Universität Ilmenau Fakultät für Elektrotechnik und Informationstechnik Hauptseminararbeit Verteilte Hash Tabelle (VHT) vorgelegt von: eingereicht am: Mikhail Tarasov 15. 01. 2008 geboren am: Studiengang: Studienrichtung: Ingenieurinformatik Multimediale Informations- und Kommunikationssysteme Anfertigung im Fachgebiet: Kommunikationsnetze Fakultät für Elektrotechnik und Informationstechnik Verantwortlicher Professor: Wissenschaftlicher Betreuer: Prof. Dr. rer. nat. habil. Jochen Seitz Dipl.-Ing. Mais Hasan Inhaltsverzeichnis i Inhaltsverzeichnis 1 Einleitung 1.1 Problembeschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 2 P2P-Technologien 2.1 Definition . . . . . . . . . . . . . 2.2 Generationen von P2P-Netzen . . 2.2.1 Erste Generation . . . . . 2.2.2 Zweite Generation . . . . 2.2.3 Dritte Generation . . . . . 2.3 P2P-Netze in kooperativer Arbeit . . . . . . 3 3 3 3 5 5 7 3 Strukturierte P2P-Netze 3.1 Hashtabellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Verteilte Hashtabellen (VHT) . . . . . . . . . . . . . . . . . . . . . . . 8 9 10 4 Beispiele von VHT 4.1 CAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Pastry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Kademlia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 12 17 20 5 Zusammenfassung und Ausblick 23 Literaturverzeichnis 24 Abbildungsverzeichnis 27 Abkürzungsverzeichnis 28 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hauptseminararbeit Mikhail Tarasov 1 Einleitung 1 1 Einleitung In der letzten Zeit werden Internettechnologien sehr populär. Täglich steigt die Zahl der Internetnutzer. Das Internet nimmt mehr und mehr Plätze in unserem Leben ein. Man nutzt das globale Netz zur Entspannung und Geselligkeit, zum Einkauf und sogar für große Finanztransaktionen. Immer erhöhen sich die Bandbreite und der Datenumfang. Heute ist ganz normal, wenn man einen abendfüllenden Film oder noch größere Datenmengen durch das Internet überträgt. Je mehr werden die übertragenden Datenvolumen, desto mehr leistungsfähige Mechanismen werden gebraucht und entwickelt. Dazu gehört auch die Netztopologie, dadurch eine effizientste Nutzung der physikalischen Ressourcen des Netzes möglich wird. Um die Belastung der einzelnen Knoten eines Netzes zu reduzieren und die Datenmengen relativ gleichmäßig zwischen mehrere Kanäle zu verteilen, werden dezentralisierte Netzstrukturen verwenden. In Rahmen dieser Arbeit werden die folgenden Aspekten von P2P-Netzen dargestellt: • grundlegendes Konzept der P2P-Kommunikationen, • die Generationen der P2P-Netzen und Technologien, • strukturierte P2P-Netze • verteilte Hash Tabellen (VHT) Als den Hauptanteil der Arbeit werden die verteilten Hash Tabellen auf Basis einer Reihe von Beispielen untersucht. 1.1 Problembeschreibung Es existiert im Prinzip zwei grundlegende Modelle der Organisation der logischen Netzstruktur. Eine von diesen ist das Client-Server-Modell, bei der ein Knoten (Server) die meisten Dienstleistung an sich nimmt und die anderen Knoten (Clients) nutzen die Ressourcen des Servers. Bei diesem Modell zieht ein Ausfall des Servers ein unmittelbares Versagen des gesamten Systems nach sich. Hauptseminararbeit Mikhail Tarasov 1 Einleitung 2 Andere Modelle besteht darin, dass alle Knoten des Netzes gleichbedeutend sind. In diesem Fall werden die Dienstleistungen zwischen mehrere Knoten relativ gleichmäßig verteilt. Der Ausfall eines Knotens führt nicht automatisch zum Versagen des gesamten Systems, und seine Dienstleistungen können gleich zwischen anderen Knoten verteilt werden. Diese Modell ist als Peer-to-peer (P2P) Kommunikationsmodell bekannt. Es existiert auch ein gemischtes Modell, bei der das gesamte Netz auch die Knoten, die eine besondere Bedeutung für die Funktionalität des Netzes haben, beinhaltet. Z.B. so genannte Tracker - ein Server, der die Verwaltungsfunktionen des gesamten P2PSystems realisiert. Der Tracker besitzt in diesem Fall die Steuerinformationen über die verfügbaren Knoten des Netzes wie einen Bezeichner und möglicherweise die Liste der Dienstleistungen und der Ressourcen, die jeder Knoten zur Verfügung stellt. Dieses Modell wird Hybridmodell genannt. Hauptseminararbeit Mikhail Tarasov 2 P2P-Technologien 3 2 P2P-Technologien In diesem Kapitel werden die grundlegenden Ideen und Konzeptionen von P2P-Kommunikationen erläutert und die Hauptschritte der Technologieentwicklung gezeigt. 2.1 Definition Peer-to-Peer (oder P2P) ist eine Kommunikationsmodell, bei der jeder Knoten des Netzes die gleiche Funktionalität hat und jeder von diesen selbst die Kommunikationsprozesse initiieren kann. Im Unterschied zum Client-Server-Modell lässt eine solche Organisation zu, die Arbeitsfähigkeit des Netzes bei einer beliebigen Zahl und einer beliebigen Kombination der zugänglichen Knoten zu unterstützen. Auf die logische Ebene kann jeder Knoten dieses Netzes mit jedem andern Knoten direkt kommunizieren. Die logische Struktur einer solcher Netz wird auf die Abb. 2.1 dargestellt. 2.2 Generationen von P2P-Netzen In der Entwicklung der P2P-Technologien können drei Generationen betrachtet werden. [Peer] 2.2.1 Erste Generation Die ersten P2P-Netzen hatten eine zentralisierte Struktur, dass bedeutet, dass es zwei verschiedenen Typen der Knoten ins Netz gibt. Ein Netz solcher Struktur wird auf der Abb. 2.2 gezeigt. Zum ersten Typ der Knoten gehören die Server, welche die indexierten Listen aller verfügbaren Ressourcen und die Steuerinformationen über das gesamte Netz beinhalten. Zum zweiten Typ gehören Nutzerknoten. Als ein Beispiel solches Netzes kann Napster genannt werden. Napster war eine Musiktauschbörse, die 1998 von Shawn Fanning programmiert wurde. Sie sollte dem Zwecke dienen, leichter MP3-Musikdateien über das Internet austauschen zu können. [Wiki09b]. Hauptseminararbeit Mikhail Tarasov 2 P2P-Technologien 4 Abbildung 2.1: Beispiel eines P2P-Netzes Abbildung 2.2: P2P-Netz mit voll zentralisierter Struktur Hauptseminararbeit Mikhail Tarasov 2 P2P-Technologien 5 Am Anfang initiiert ein Nutzerknoten (Client) die Verbindung mit einem zentralen Server wie bei Client-Server-Architektur. Der Client meldet sich mit der Liste eigener verfügbarer Ressourcen beim Server an. Alle Suchverfahren werden auf dem Server durchgeführt und als Ergebnis bekommt der Client die Liste der IP-Adressen der anderen Client-Knoten, die die gesuchten Ressourcen zur Verfügung stellen. Weiter werden die Clients direkt mit einander kommunizieren, um die Daten zu übertragen. Die Funktionalität eines solchen Netzes ist völlig von dem Server abhängig: fällt der Server aus, funktioniert das gesamte Netz nicht mehr. 2.2.2 Zweite Generation Die P2P-Netze der 2. Generation sind die Netze mit vollständig dezentraler Struktur, wie es auf der Abb. 2.1 gezeigt. Bei dieser Struktur sind alle Knoten gleichwertig und es gibt keine zentralen Server, welche die Suchanfragen bearbeiten. Damit das gesamte System funktioniert, muss ein Knoten mindestens einen anderen finden. Dafür existieren die verschiedenen Methoden: • vordefinierte Serverlisten, • Gwebcache-Seiten im Internet (z.B. bei Gnutella [link02]), • der Austausch von Host-Listen über IRC. Nachdem die Verbindung mit einem Knoten aufgebaut wurde, bekommt der neue Knoten eine Liste der anderen Knoten, mit denen er kommunizieren kann. Die Anzahl der Verbindungen wird in den Knoteneinstellungen definiert. Die Suchanfrage sendet der Knoten zunächst nur an benachbarte Knoten, die benachbarten Knoten leiten dann ihrerseits die Anfrage an ihre Nachbarn weiter, bis die angeforderte Information gefunden wird. Anschließend kann eine direkte Verbindung zwischen suchendem und anbietendem Knoten hergestellt werden. Als Vorteil vor den Netzen erster Generation haben die Netze zweiter Generation hohe Ausfallsicherheit durch die selbst weitergeleiteten Suchanfragen. Sind einige Knoten unerreichbar, ist es möglich, eine andere Datenquelle zu finden. Aber da es keine zentralen Server gibt, können die Suchanfragen lange dauern, und eine hohe Netzwerkbelastung verursachen. 2.2.3 Dritte Generation Die P2P-Netze der 3. Generation vereinigen in sich die meisten Vorteile der vorhergehenden Generationen. Solche Netze haben entweder vollständig dezentrale (Abb. 2.1) Hauptseminararbeit Mikhail Tarasov 2 P2P-Technologien 6 oder gemischte Struktur. Bei gemischter Struktur existieren mehrere Gruppen von Knoten: einige Knoten, die mehr Ressourcen zur Verfügung haben, können auch die zusätzlichen Funktionen ausführen, z.B. die Indexierung von Daten, um Suchverfahren zu optimieren. Solche Knoten werden aber nicht festgelegt, sondern dynamisch organisiert. In dem Netz kann auch ein zentraler Server existieren, der aber nur begrenzte Funktionen hat, z.B. Benutzeridentifizierung. Ein Beispiel eines Netzes der 3. Generation mit gemischter Struktur wird auf der Abb. 2.3 dargestellt. Abbildung 2.3: Ein P2P-Netz mit einer gemischten Struktur In den Netzen der 3. Generation werden auch Algorithmen, wie z.B. Verteilte Hash Tabellen als eines Suchverfahren, verwendet, um die Hauptprobleme von P2P-Netzen zu beseitigen. Zu solchen Problemen gehört folgendes: • Suche nach den verfügbaren Daten; • Selbstorganisation beim Ausfall, Ein- und Ausschalten den einzelnen Knoten; • Sicherheit; • Kommunikationsdienstgüte (Quality of Service, QoS). Die P2P-Netze der 3. Generation finden die breite Anwendung in folgenden Gebieten: Hauptseminararbeit Mikhail Tarasov 2 P2P-Technologien 7 • Dateiverteilung (z.B. Musikaustauschbörsen); • kooperativer Arbeit zwischen weltweiten Forschungsgruppen; • sprach- und videobasierte Kommunikationen (z.B. Skype [Skyp]); • Internet Radio und Fernsehen. 2.3 P2P-Netze in kooperativer Arbeit Eine wichtige Rolle spielen die P2P-Technologien in kooperativer Arbeit oder CSCW (computer supported cooperative work). Durch die Anwendung von P2P-Architekture werden die allgemeinen Probleme von Client-Server-Architekturen gelöst. Das verteilte System ermöglicht, die Belastung des Netzes relativ gleichmäßig zu verteilen, was besonders aktuell beim Austausch von großen Mengen an Daten ist. [BQXFSX07] Durch die Anwendung von P2P-Tchnologien ist es möglich, verteilte Rechnungen durchzuführen. Zum Beispiel nutzt ein amerikanisches Projekt von United Devices die freie Prozessorszeit einzelner Rechner für die biologische Forschung. [UNIV08] Möchtet eine z.B. pharmazeutische Firma eine Forschung, die die verteilten Berechnungen braucht, durchführen, musste sie früher ihre eigenen Protokolle und Methoden entwickeln, aber heute gibt es Plattformen, die die nötige Funktionalität automatisch realisieren. Ein Beispiel solcher Plattform ist die JXTA-Technologie von SUN Microsystems. Die JXTA-Plattform basiert auf einer Reihe von öffentlichen Protokollen, durch die verschiedene Geräte von Handys und PDA’s bis zu PC’s und Server über P2P-Technologie miteinander kommunizieren können. Durch die Benutzung von XML-basierten Protokollen ist es möglich, die spezielle Software für mehrere Plattformen zu entwickeln (z.B. Java und .NET). Es wird ein virtuelles Netz aus verschiedenen Geräten aufgebaut, wo jeder Knoten mit jedem anderem kommunizieren kann, unabhängig davon, welche physikalische Struktur das Netz hat, sogar auch über Firewall und NAT. [Sun 08] Hauptseminararbeit Mikhail Tarasov 3 Strukturierte P2P-Netze 8 3 Strukturierte P2P-Netze Ein P2P-Netz wird auf Basis von einem existierenden IP- oder anderen Netz aufgebaut und oft als Overlay-Netz gezeigt (s. Abb. 3.1). Es gibt zwei prinzipielle Moglichkeiten zum Aufbau eines solchen P2P-Netzes: • unstrukturierte (ad hoc) - das Netz wird sich undeterministisch bei dem Hinzufugen der neuen Knoten oder Daten ändern; • strukturierte - die Struktur von Netz wird sich laut einigen bestimmten Regeln ändern. Abbildung 3.1: Ein Overlay-Netz auf Basis eines IP-Netzes Hauptseminararbeit Mikhail Tarasov 3 Strukturierte P2P-Netze 9 In unstrukturierten P2P-Netzen entstehen beliebige Overlay-Verbindungen zwischen den teilnehmenden Knoten. Dies führt zu einer vermaschten Overlay-Topologie, die eine hohe Zahl an redundanten Pfaden und Schleifen aufweist. Um in einem unstrukturierten P2P-Netz Inhalte zu finden, muss eine Suchanfrage durch das Netz geflutet werden, damit möglichst viele Knoten mit den gesuchten Inhalten gefunden werden. Dieses Suchprinzip hat neben einem hohen Signalisierungsverkehr den Nachteil, dass eine Suchanfrage nicht immer vollständig aufgelöst werden kann, d.h. nicht alle zur Suchanfrage passenden Inhalte gefunden werden können. Um dieses Problem zu lösen, werden die strukturierten P2P-Netze verwendet. Durch das Zuweisen von Hash-Werten zu den teilnehmenden Knoten und zu allen zur Verfügung gestellten Inhalten, ist es möglich, Inhalte auf Zuständigkeitsbereiche von Knoten so abzubilden, dass damit eine eindeutige Zuordnung von Inhalten zu Peers erreicht wird. Dadurch müssen die Suchanfragen nicht mehr durch das Overlay-Netz geflutet werden, sondern direkt an den zuständigen Knoten geroutet werden können. In einem strukturierten P2P-Netz besitzt jeder Knoten Informationen über seine direkten Nachbarn in der Overlay-Topologie. Außerdem kennt er weitere Knoten in anderen Overlay-Regionen, die verwendet werden, um Suchen möglichst schnell an den zuständigen Knoten weiter zu leiten. [HHKS+ 08] Als ein Suchverfahren in strukturierten P2P-Netzen wird die Methode von verteilten Hash Tabellen genutzt. 3.1 Hashtabellen In Informatik ist eine Hashtabelle eine Datenstruktur, die aus den Paaren SchlüsselWert besteht. Die Hauptaufgabe einer solchen Struktur ist ein möglichst schnelles Suchverfahren, um bei einem gegebenen Schlüsselwert die entsprechenden Daten zu finden. Diese Struktur wird auf Grund der Transformation von Schlüsselwert mit Hilfe einer Hash-Funktion aufgebaut. Der entsprechende Hash-Wert von Schlüssel wird als ein Index in der Tabelle benutzt. Ein Beispiel von Hashtabelle wird auf der Abb. 3.2 gezeigt. Hashtabellen unterstützen das effiziente Einfügen eines neuen Elements in O(1)Zeit. Die Suchzeit kann aber mehr sein und hängt von der Hash-Funktion und der Überbelegung der Tabellengröße ab. In optimalem Fall wird die Suchzeit auch O(1) entsprechen. Typische Operationen auf den Hashtabellen sind Einfügen, Suchen und Löschen eines Eintrags. Diese Operationen brauchen eine bestimmte relativ konstante Zeit, wodurch Hauptseminararbeit Mikhail Tarasov 3 Strukturierte P2P-Netze 10 Abbildung 3.2: Eine Hashtabelle. Nach [Wiki09a] die Hashtabellen sehr effizient sind. Ein Problem dabei ist die Möglichkeit der Kollisionen. Die Hash-Funktionen sind nicht injektive Funktionen, das bedeutet, dass es für mehrere Schlüsselwerte ein gleicher Hashwert existiert. Daraus folgt, dass mehrere Einträge in der Tabelle an derselben Stelle stehen können. Falls die Hash-Funktion einen existierenden Hashwert produziert, muss eine alternative Stelle in der Tabelle für den neuen Eintrag gefunden werden. Als Hauptvorteil dieser Methode kann der sofortige Zugriff durch den Hash-Wert auf die Inhalte in einer Tabelle im Vergleich zu der Suche nach dem Schlüssel genannt werden. Ein wesentlicher Nachteil ist die Notwendigkeit von Restrukturierung des Indexes, falls die Tabelle einen gewissen Füllgrad überschritten hat. [Wiki09a] 3.2 Verteilte Hashtabellen (VHT) Eine Einsatzmöglichkeit für die Hashtabellen ist die Verteilung der Tabelle über die mehreren Knoten. Mittels einer Hash-Funktion werden den Datenobjekten Schlüssel in einem linearen Wertebereich vergeben. Dieser Schlüsselraum muss möglich gleichmäßig zwischen den Knoten verteilt werden. Daraus folgt, dass jeder Knoten für einen (oder mehrere) Schlüsselbereich zuständig ist. Die Verteilung der Hashtabelle erfordert ständige Anpassungen durch Ausfall, Beitritt und Austritt von Knoten. Eigenschaften von VHT sind: • Selbstorganisation: das gesamte Netz wird automatisch auf grund der bestimmten Regeln aufgebaut. • Skalierbarkeit: das Netz sollte die Möglichkeit zu Erweiterungen auf große Anzahl der Knoten erlauben. Hauptseminararbeit Mikhail Tarasov 3 Strukturierte P2P-Netze 11 • Lastenverteilung: Die Daten werden möglichst gleichmäßig auf alle Knoten verteilt. • Fehlertoleranz: Das System sollte zuverlässig sein, falls einige Knoten ausfallen oder das System verlassen. • Robustheit: Das Netz sollte richtig funktionieren können, falls ein Teil der Knoten versuchen, das System zu stören. Verteilte Hashtabellen finden breite Anwendung in modernen P2P-Netzen für den Datenaustausch (z.B. CAN, Pastry, Kademlia) und für die Datenspeicherung (z.B. OpenDHT [SRYu05]). [Wiki09c] Hauptseminararbeit Mikhail Tarasov 4 Beispiele von VHT 12 4 Beispiele von VHT In diesem Kapitel werden die konkreten Realisierungen der verteilten Hashtabellen anhand der folgenden Beispiele untersucht: • CAN (Content-Addressable Network) • Pastry • Kademlia Für jeden Vertreter werden die Grundstruktur des Netzes, Selbstorganisation, Wegewahl und aktuelle Einsatzszenarien und Anwendungen beschrieben. 4.1 CAN Content-Addressable Network (oder CAN) ist eine Realisierung des Konzepts von verteilten Hashtabellen. Für CAN werden die folgenden Anforderungen aufgestellt: • Skalierbarkeit, • Fehlertoleranz, • volle Selbstorganisation. Ein skalierbares P2P-System fordert als erstes einen skalierbaren Indexierungsmechanismus. Einer dieser Mechanismen wird im CAN realisiert. Trotzdem ist das CAN nicht nur für P2P-Systeme, sondern auch für umfangreiche Datenbankmanagementsysteme (z.B. OceanStore [JKZh]) geeignet. Alle diese Systeme brauchen eine effiziente Methode zum Datenspeichern und -Zugreifen in einer großen verteilten Datenbankinfrastruktur und skalierbare Indexierung als einen der wichtigsten Mechanismen. CAN stellt eine Hashtabelle mit bestimmten schnellen Operationen dar: • Hinzufügen, • Suchen, Hauptseminararbeit Mikhail Tarasov 4 Beispiele von VHT 13 • Löschen eines Schlüssel-Wert Paars. Das CAN wird aus mehreren einzelnen Knoten, die einer Untermenge von Tabelleneinträgen (eine Zone) entsprechen, gebaut. Zusätzlich besitzt jeder Knoten die Informationen über eine kleine Anzahl der benachbarten Zonen. Die Anfrage eines bestimmten Schlüssels wird vom Zwischenknoten zum Knoten einer CAN-Zone, die den gesuchten Schlüssel besitzt, weitergeleitet. Dar Basis des CANs ist ein virtuelles d-dimensionales kartesisches Koordinatensystem auf einem d-Torus. Dieser Koordinatenraum ist rein logisch und verbindet mit keinem physikalischen Koordinatenraum. Zu jedem Zeitpunkt wird der Koordinatenraum dynamisch zwischen allen Knoten des CANs so verteilt, dass jeder Knoten eine eigene Zone des vollen Raums, die nur zu diesem Knoten gehört, besitzt. Ein Beispiel eines 2-dimensionalen CAN-Koordinatenraum wird auf der Abb. 4.1 gezeigt. Abbildung 4.1: Beispiel des CANs mit 5 Knoten im 2-dimensionalen Raum. Nach [Sylv00] Der virtuelle Koordinatenraum wird, um Paare (Schlüssel, Wert) zu platzieren, auf folgende Weise benutzt: um ein Paar (Si , Wi ) zu platzieren, wird den Schlüssel in einen Punkt P des Koordinatenraums mittels einer uniformen Hash-Funktion abgebildet. Das Paar (Si , Wi ) wird beim Knoten, der zur Zone, wo Punkt P liegt, gehört, in der Hashtabelle gespeichert. Um einen Wert Wi , der dem Schlüssel Si entspricht, anzufordern, wird den Schlüssel mittels derselbe Hash-Funktion in den Punkt P abgebildet und der Wert Wi wird aus dem Punkt P zurückgeliefert. Die Knoten organisieren sich in einem Overlay-Netz selbst, das dem virtuellen Koordinatenraum entspricht. Die Knoten kennen und erneuern regelmäßig eine Liste der IP-Adressen und der Koordinaten der Zone von Knoten, die die benachbarten Zonen in diesem Koordinatenraum besitzen. Diese Liste dient als eine Routingtabelle, um das Routing zwischen den Punkten des Koordinatenraums zu ermöglichen. Hauptseminararbeit Mikhail Tarasov 4 Beispiele von VHT 14 In einem d-dimensionalen Koordinatenraum sind zwei Knoten benachbart, wenn ihre (d−1) Koordinaten gleich sind und eine Koordinate der beiden sich auf 1 unterscheidet. Eine CAN-Nachricht beinhaltet die Zielkoordinaten. Durch die Liste der Koordinaten und der IP-Adressen der benachbarten Knoten leitet ein Knoten die Nachricht einem der Knoten, der die näheren Koordinaten zum Ziel hat, weiter. Für einen ddimensionalen auf n Zonen geteilten Raum hat ein durchschnittlicher Routingpfad die Länge (d/4) · n1/d und jeder einzelne Knoten hat 2d Nachbarn. Falls ein oder mehrere benachbarten Knoten ausfallen, wird ein neuer Pfad automatisch aufgebaut. Um das Wachstum des CANs zu ermöglichen, muss ein Teil des Koordinatenraums jedem neuen Knoten zugewiesen werden. Es wird durch die Teilung einer existierenden Zone in zwei Hälbzonen realisiert. Dieser Prozess besteht aus drei Schritten: 1. Zuerst muss der neue Knoten einen existierenden Knoten des CANs finden. 2. Weiter muss ein Knoten gefunden werden, deren Zone geteilt wird. 3. Abschließend müssen die Nachbarn der geteilten Zone informiert werden, um den neuen Knoten zum Routing hinzuzufügen. Ein neuer CAN-Knoten findet zuerst die IP-Adresse eines existierenden Knotens im System. Das Funktionieren des CANs ist unabhängig davon, durch welche Bootstraping-Methode dieser Knoten gefunden wird. Um eine Zone zu finden, wählt der neuen Knoten einen zufälliger Punkt P im Koordinatenraum und sendet eine JOIN-Anfrage mit Zielkoordinaten des Punktes P . Der aktueller Besitzer dieser Zone teilt die Zone und weist eine Halbzone dem neuen Knoten zu. Danach werden die Schlüssel-Wert Paaren dieser Halbzone dem neuen Knoten übergegeben. Der neue Knoten weiß die Koordinaten der benachbarten Zonen vom vorherigen Besitzer und alle benachbarten Knoten werden über die neue Verteilung des Raums informiert. Das Hinzufügen eines neuen Knotens führt nur zu Änderungen in einem kleinen lokalen Gebiet im Raum. Die Anzahl der benachbarten Knoten hängt nur von der Dimension des Raums und nicht von der gesamten Anzahl der Knoten im CAN ab. Das CAN muss auch fehlertolerant bei einem Ausfall eines oder mehrerer Knoten sein. Dazu wird ein Takeover -Algorithmus verwendet. Normalerweise sendet jeder Knoten periodisch eine UPDATE-Nachricht mit den Koordinaten eigener Zone und der Liste aller Nachbarn allen benachbarten Knoten. Falls ein Knoten entscheidet, dass ein Nachbar ausfällt, initiiert er einen Takeover -Mechanismus und startet einen Timer. Jeder Nachbar des ausgefallenen Knotens muss diese Operation unabhängig von Hauptseminararbeit Mikhail Tarasov 4 Beispiele von VHT 15 Anderen machen und den Timer proportional der Größe eigener Zone initiieren. Nach dem Timeout sendet der Knoten den allen Nachbarn des ausgefallenen Knotens eine TAKEOVER-Nachricht mit Größe eigener Zone. Dadurch wird ein benachbarter Knoten, der noch verfügbar ist und die kleinste Zone besitzt, effizient ausgewählt. Trotzdem ist es möglich, dass das CAN zu einem inkonsistenten Zustand kommt. In diesem Fall wird ein Reparaturmechanismus gestartet. Die Knoten initiieren eine expansive Ringsuche nach den Knoten außer dem ausgefallenen Gebiet, danach werden die Nachbarschaften rekonstruiert und das Takeover-Mechanismus wieder gestartet. Es kann passieren, dass nach diesem Verfahren einige Knoten mehr als eine Zone besitzen. Mögliche Erweiterungen Die Effizienz eines CAN-Systems kann durch die folgenden Maßnahmen erhöht werden: • die Erhöhung der Anzahl der Dimensionen des CAN-Koordinatenraums; • die Einführung der Realitäten - mehrerer Koordinatenräume; • die Verbesserung des CAN-Routings; • die Überbelastung der Koordinatenzonen; • mehrere Hash-Funktionen; • die topologieabhängige Bildung des CAN-Overlay-Netzes; • die gleichmäßigere Verteilung der Zonen; • Caching; • Replikation. Für ein CAN-System mit n Knoten und d Dimensionen wird die Pfadlänge als O(dn1/d ) skaliert. Also die Erhöhung der Dimension des CAN-Koordinatenraums reduziert die Routingpfadlängen und die entsprechenden Verzögerungen durch das kleine Wachstum der Routingtabelle. Das CAN kann aus mehreren unabhängigen Koordinatenräumen, so genannten Realitäten, bestehen. Jeder Knoten solches Systems besitzt eine Zone jeder Realität. Für CAN mit r Realitäten hält jeder Knoten r Zonen (eine Zone je Realität) und speichert r unabhängigen Liste der Nachbarschaft. Der Inhalt der Hashtabelle wird in jeder Realität dupliziert, wodurch wird die Erreichbarkeit der Daten erhöht. Für die 3 Hauptseminararbeit Mikhail Tarasov 4 Beispiele von VHT 16 Realitäten zum Beispiel werden die Daten nur dann unverfügbar, wenn alle 3 Knoten in den Realitäten unerreichbar sind. Der CAN-Routing kann durch die Berücksichtigung der darunterliegenden IP-Topologie verbessert werden. In diesem Fall werden die Verzögerungen für jeden benachbarten Knoten gemessen und die Nachrichten werden entsprechend der Zielkoordinate zu dem Nachbarn mit kleinster Verzögerung weitergeleitet. Bis jetzt wurde jede Zone mit einem einzigen Knoten assoziiert. Aber es ist möglich, es so machen, dass zu jeder Zone mehrere Knoten gehören. In diesem Fall speichert jeder Knoten nicht nur die Listen der benachbarten Knoten, sondern auch der Knoten, die auch zu dieser Zone gehören. Die Überbelastung der Zonen erhöht durch die Replikation die Verfügbarkeit der Daten, aber die Datenmenge einzelnen Knoten steigt proportional der maximalen Anzahl der Knoten in der Zone. Die Pfadlängen werden reduziert und die Fehlertoleranz wird erhöht (Die Zone fällt aus, nur wenn alle Knoten der Zone gleichzeitig ausfallen). Um die Verfügbarkeit der Daten zu erhöhen, können k verschiedene Hash-Funktionen benutzt werden. Diese Funktionen bilden einen Schlüsselwert auf k Punkten. Die Daten werden unverfügbar, nur wenn alle k Knoten simultan ausgefallen sind. Normalerweise werden die Knoten zu einer Zone zufällig eingeordnet, es ist aber möglich die physikalische Netzwerktopologie zu berücksichtigen, um die geographisch extrem langen Pfaden zwischen den benachbarten Knoten zu vermeiden. Beim Hinzufügen eines neuen Knotens wird eine Zone zufällig gewählt und geteilt. Stattdessen kann der aktuelle Besitzer dieser Zone die Größe dieser Zone mit den Größen der benachbarten Zonen vergleichen und die größte Zone kann danach verteilt werden. Dadurch entsteht die gleichmäßigere Verteilung von Zonen und Belastungen. Beim Caching kann jeder Knoten zusätzlich zu eigenen Daten auch den Cache besitzen, wo die zusätzlichen Daten, die oft gebraucht werden, gespeichert werden. Der Knoten prüft zuerst, ob die angeforderten Daten im Cache sind, und leitet die Anfrage, nur wenn die Daten im Cache nicht vorhanden sind, weiter. Bei der Replikation können die Daten bei der Anfrage bei den benachbarten Knoten dupliziert werden. Dadurch werden gesamte Regionen mit gebräuchlichen Daten entstehen. Als Folge erhöht sich die Verfügbarkeit dieser Daten durch die Redundanz der Datenquellen und Pfade.[Sylv00] Hauptseminararbeit Mikhail Tarasov 4 Beispiele von VHT 17 4.2 Pastry Ein weiteres Beispiel von strukturierten Netzen, die Technologie der verteilten Hashtabellen benutzen, ist Pastry. Pastry ist ein Grundkonzept zur Bildung verschiedener P2P-Internetanwendungen, wie die Dateivermittlung und -Speicherung, Gruppenkommunikationen und die Namensysteme. Pastry hat die folgenden Eigenschaften: jeder Knoten im Pastry-Netz hat seinen eigenen numerischen Bezeichner (NodeID). Eine Pastry-Nachricht mit einem numerischen Schlüssel wird effizient einem Knoten, deren NodeID numerisch nächst zu dem Schlüssel ist, weitergeleitet. Die gesamte maximale Anzahl der Hops wird auf O(log N ) abgeschätzt, wo N die Anzahl der Knoten im Pastry-Netz ist. Jeder Pastry-Knoten beachtet die unmittelbar benachbarten im NodeID-Raum Knoten und registriert alle Ereignisse wie Hinkommen, Ausfall und Wiederherstellen. Da die NodeIDs zufällig verteilt werden, gibt es die hohe Wahrscheinlichkeit, dass die Knoten mit benachbarten NodeIDs in geographisch verschiedenen Plätzen liegen. Die Anwendungen können diese Eigenschaften unterschiedlich nutzen. Z.B. PAST [RoDr01] nutzt die FileID, die durch die Hash-Funktion des Dateinamens und des Besitzers berechnet wird, als Pastry-Schlüssel. Die Kopien dieser Datei werden in k Knoten, deren NodeIDs nächst zu dem Schlüssel sind, platziert. Die Datei kann über die FileID als Schlüssel erreicht werden. In diesem Fall ist die Datei erreichbar, solange mindestens einer der k Knoten verfügbar ist. In SCRIBE [RKCD01], einem System zur Publikationen und Subskriptionen, wird die Liste der Abonnenten im Knoten, deren NodeID nächst zu dem Hash von Namen des Themas ist, gespeichert. Ein Pastry-System ist ein selbst organisierendes Netz, in welchem jeder Knoten einen 128-Bit Bezeichner oder NodeID hat. Die NodeID wird zum Identifizieren des Knotens im NodeID-Raum, dessen Grenzen von 0 bis (2128 − 1) liegen, benutzt. Die NodeID wirddem Knoten zufällig gegeben, wenn der zum System hinzugefügt wird, wodurch die NodeIDs werden relativ gleichmäßig im 128-Bit Raum verteilt sind. Um die NodeID eines Knotens zu berechnen, kann eine Hash-Funktion von der IP-Adresse oder dem öffentlichen Schlüssel benutzt werden. Falls ein Pastry-Netz aus den N Knoten besteht, kann eine Nachricht in weniger als log 2b N Schritten zum Zielknoten zugestellt werden. Die Zustellung ist garantiert, solange weniger als |L|/2 Knoten mit benachbarten NodeIDs ausgefallen sind. Die b und |L| sind die Konfigurationsparameter mit dementsprechenden typischen Werten 4 und 16 oder 32. Hauptseminararbeit Mikhail Tarasov 4 Beispiele von VHT 18 Jedem Pastry-Knoten entspricht einem Zustand, der über eine Routingtabelle, eine Nachbarschaftsmenge (neighborgood set) und eine Menge der Blätter (leaf set) bestimmbar ist. Die Routingtabelle besteht aus log 2b N Spalten und (2b − 1) Einträgen je Spalte. (2b − 1) Einträge der Spalte n zeigen auf die Knoten, deren NodeIDs mit der eigenen NodeID in den n ersten Ziffern übereinstimmen und deren (n + 1). Ziffer beliebig von 0 bis (2b − 1) außer eigenen (n + 1). Ziffer ist. Jeder Eintrag beinhaltet die IP-Adresse eines der Knoten, dessen NodeID ein dementsprechendes Präfix hat. Falls kein Knoten des Gebiets bekannt ist, bleibt der Eintrag leer. Ein Beispiel einer Pastry-Routingtabelle eines Knotens wird auf der Abb. 4.2 gezeigt. Die Nachbarschaftsmenge beinhaltet die NodeIDs und die IP-Adressen der |M | Nächsten zu diesem Knoten. Die Nachbarschaftsmenge wird typischerweise beim Routing nicht benutzt. Das Ziel der Nachbarschaftsmenge ist die bessere Möglichkeit zur Abschätzung von Lokalitätseigenschaften. Unter der Lokalität versteht man die Abstände zwischen den Knoten im Sinne von der Anzahl der IP Hops oder den geographischen Abständen. Der Eintrag der Routingtabelle wird mit der Berücksichtigung besseren Lokalitätseigenschaften auf Grund der Nachbarschaftsmengen der Knoten gewählt. Die Blättermenge besteht aus |L|/2 Knoten mit numerisch nächsten größeren NodeIDs und |L|/2 Knoten mit numerisch nächsten kleineren NodeIDs relativ dem eigenen NodeID. Die Blättermenge wird während des Routings benutzt, um die Wegewahlverfahren zu optimieren. Die typischen Werte von |L| und |M | sind 2b oder 2 · 2b (16 oder 32). Routing Nachdem ein Knoten eine Nachricht bekommt, prüft er zuerst, ob der Schlüssel der Nachricht von der Blättermenge abgedeckt wird. Falls es so ist, leitet der Knoten die Nachricht direkt dem Zielknoten, genauer gesagt, dem Knoten von der Blättermenge, dessen NodeId nächst zu dem Schlüssel der Nachricht liegt, weiter. Falls der Schlüssel durch die Blättermenge nicht abgedeckt wird, wird die Routingtabelle so benutzt, dass die Nachricht an den Knoten, dessen Präfix mit dem Schlüssel auf mindest ein Ziffer mehr übereinstimmt, weitergeleitet wird. Es ist möglich, dass der Eintrag in der Routingtabelle leer oder der Knoten aus der Tabelle unverfügbar ist. In diesem Fall wird die Nachricht einem Knoten aus Blättermenge mit geeignetem Präfix weitergeleitet, solange ein Knoten mit nächstem zum Schlüssel NodeID gefunden wird. Ein Beispiel des Routingsverfahren wird auf der Abb. 4.3 dargestellt. Hauptseminararbeit Mikhail Tarasov 4 Beispiele von VHT Abbildung 4.2: Routingtabelle einer Pastry-Knoten mit dem NodeID 65a1x, b=4. Die entsprechenden IP-Adressen werden nicht gezeigt. Nach [CDHR02] 19 Abbildung 4.3: Routing einer Nachricht mit dem Schlüssel d46a1c von Knoten 65a1fc. Nach [CDHR02] Selbstorganisation Wenn ein neuer Knoten zum Pastry-System hinzugefügt werden will, muss er die eigenen Zustandstabellen initialisieren und die anderen Knoten über sich informieren. Zuerst ist die Information über einen der existierenden im System Pastry-Knoten mit NodeID A nötig. Dieser Knoten A kann durch verschiedene Methoden gefunden, oder direkt eingesetzt werden. Hat der neue Knoten die NodeID X, sendet er über den Knoten A eine JOIN-Nachricht mit dem Schlüssel gleich X. Das Pastry-System leitet die Nachricht zu einem Knoten Z, dessen NodeID nächst zu X ist, weiter. Als eine Bestätigung senden die Knoten A, Z und alle dazwischen dem Knoten X ihre Zustandstabellen zurück. Auf Grund dieser und zusätzlich angeforderten Tabellen einiger anderen Knoten bildet der neue Knoten X seine eigene Zustandstabellen und informiert die Anderen, dass er jetzt verfügbar ist. Beim Hinzufügen oder Verlassen eines Knoten des Systems müssen nur wenige Knoten ihre Zustände (Routingtabelle und Blätter- und Nachbarschaftsmengen) ändern. Ein Problem, das wegen des fehlerhaften IP-Routing (z.B. ein Host kann von manchen Hosts unerreichbar und von Anderen erreichbar sein) entstanden werden kann, ist die Segmentierung des Overlay-Netzes. Um das Problem zu beseitigen und das Netz wieder zu rekonstruieren, wird eine expandierende Ringsuche nach anderen existierenden Pastry-Knoten in der Umgebung durch IP-Multicast verwendet.[RoDr] Hauptseminararbeit Mikhail Tarasov 4 Beispiele von VHT 20 4.3 Kademlia Ein weiteres System von verteilten Hashtabellen ist Kademlia. Das System basiert auf einer Topologie mit einer XOR-Metrik. Durch jede Nachricht dieses Systems werden die Verbindungsinformationen ständig aktualisiert. Das System nutzt diese Informationen, um die parallelen asynchronen Anfragenachrichten ohne großen Verzögerungen, falls einer Knoten ausgefallen ist, zu vermitteln. Kademlia fasst in sich die Eigenschaften von P2P-Systemen vorheriger Generationen zusammen, wodurch die Menge von Konfigurationsverkehr zwischen den benachbarten Knoten reduziert wird. Die Konfigurationsinformation ensteht automatisch als Nebenprodukt der Anfragenabarbeitung. Die Knoten besitzen genug Erkenntnisse und Flexibilität, um die Anfragen einen optimalen Pfads entlang weiterzuleiten. Kademlia nutzt auch die parallelen asynchronen Anfragen, um die Verzögerungen, die durch ausgefallene Knoten entstanden werden, zu vermindern. Jeder Knoten im System bekommt einen 160-Bit Bezeichner. Der Schlüssel eines Eintrags der Hashtabelle ist auch eine 160-Bit Zahl. Bei Suche und Platzieren eines Schlüssel-Wert Paars nutzt Kademlia eine Distanznotation zwischen zwei Bezeichnern (Knotenbezeichner und Schlüssel). Seien x und y zwei 160-Bit Bezeichner, bestimmt Kademlia eine Distanz als exklusive Oderverknüpfung der beide Zahlen x und y: d(x, y) = x ⊕ y. Diese XOR-Metrik hat folgenden Eigenschaften: 1. d(x, x) = 0 - der Abstand von einem Knoten zu ihm selbst ist gleich Null; 2. d(x, y) > 0 unter der Bedingung x 6= y; 3. ∀x, y: d(x, y) = d(y, x) - die XOR-Metrik ist symmetrisch; 4. Für die Knoten x, y und z: d(x, y) + d(y, z) > d(x, z). Die XOR-Metrik ist unidirektional, das bedeutet, dass alle Anfragen mit einem gleichen Schlüssel zum selben Pfad konvergiert werden. Durch Caching der Daten entlang dieses Pfads kann die Verfügbarkeit dieser Daten wesentlich erhöht werden. Kademlia-Knoten speichern Informationen übereinander, um das Routing zu ermöglichen. Für jedes beliebige 0 ≤ i < 160 speichert jeder Knoten eine Liste der Informationen (IP-Adresse, UDP-Port und Knotenbezeichner) der Knoten mit Distanz zwischen 2i und 2i+1 von sich selbst. Es wird k-Bucket genannt. Jeder k-Bucket wird so sortiert, dass die zuletzt gemerkten Knoten am Ende der Listen stehen. Für kleine Werte von i sind generell die k-Buckets leer, für die großen i können die Liste bis zu k Einträge Hauptseminararbeit Mikhail Tarasov 4 Beispiele von VHT 21 wachsen, wo k ein systemweiter Replikationsparameter ist, der so gewählt wird, dass die k Knoten mit sehr niedrige Wahrscheinlichkeit in einer Stunde ausfallen. Wenn ein Kademlia-Knoten eine Nachricht (eine Anfrage oder eine Antwort) von einem anderen Knoten des Systems bekommt, aktualisiert dieser Knoten seinen kBucket mit dem Bezeichner des Senders laut folgenden Regeln: • Wenn der Senderknoten im k-Bucket bereits existiert ist, wird er zum Ende der Liste verschoben. • Wenn der Senderknoten im k-Bucket nicht existiert und die Liste noch nicht voll ist (weniger als k Einträger beinhaltet), wird er zum Ende der Liste hinzugefügt. • Falls k-Bucket voll ist, wird ein Ping des ältesten Knoten der Liste durchgeführt, um eine Entscheidung zu treffen: wenn der Knoten nicht antwortet, wird er gelöscht und der Senderknoten zum Ende der Liste hinzugefügt; wenn der Knoten antwortet, wird er zum Ende der Liste verschoben und Senderknoten vergessen“. ” Also wird ein neuer Knoten zum k-Bucket hinzugefügt nur dann, wenn ein alter Knoten das System verlässt. Dadurch ist das System zum DoS-Attacke resistent. Das Kademlia-Protokoll besteht aus vier Befehlen: PING, STORE, FIND NODE und FIND VALUE. Der PING-Befehl dient dazu, die Verfügbarkeit des gegebenen Knotens zu prüfen. Der STORE-Befehl wird für das Speichern eines Schlüssel-Wert Paars in einem Knoten benutzt. Der FIND NODE-Befehl nimmt einen 160-Bit Bezeichner als Parameter an. Der Empfänger dieses Befehls gibt das Triplett IP-Adresse, UDP-Port und Knotenbezeich” ner“ der k ihm bekannten Knoten, deren Bezeichner nächst zum Ziel liegen, zurück. Diese Knoten können von einem k-Bucket und auch von mehreren k-Buckets, falls der nächste k-Bucket nicht voll ist, sein. Auf jedem Fall muss die Antwort genau k Einträger beinhalten (es kann nur dann weniger sein, wenn in allen k-Buckets eines Knoten weniger als k Einträger existieren). Der FIND VALUE-Befehl funktioniert ähnlich wie FIND NODE mit nur einer Ausnahme: falls der Empfänger einen STORE-Befehl mit gleichem Schlüssel bekommen hat, gibt er nur den gespeicherten Wert zurück. Jeder Befehl muss ein Echo eines zufälligen 160-Bit Befehlsschlüssels in der Antwortnachricht zurückgeben, wodurch ein bisschen Resistenz gegen Verfälschung der IP-Adresse besteht. Hauptseminararbeit Mikhail Tarasov 4 Beispiele von VHT 22 Die Hauptprozedur, die jeder Kademlia-Teilnehmer realisieren muss, ist die Suche einer Menge von k Knoten mit den Bezeichnern, die nächst zu einem Schlüssel sind. Dafür wird ein rekursiver Algorithmus verwendet. Ein Initiator fängt mit der Auswahl der α Knoten aus dem nächsten nicht leeren k-Bucket an. Der Initiator sendet den α gewählten Knoten einen FIND NODE-Befehl parallel und asynchron. α ist ein Konkurrenzparameter des Systems, z.B. 3. In dem rekursiven Schritt sendet der Initiator dem Knoten aus den Antworten auf den vorherigen Befehl wieder einen neuen FIND NODE-Befehl. Aus k Knoten aus jeder Antwort wählt der Initiator α den nächsten Knoten zum Ziel, der noch nicht abgefragt wurden, aus. Die Knoten, die nicht geantwortet haben, werden aus der Behandlung entnommen. Die Suche wird dann beendet, wenn der Initiator die Antworten von k nächsten Knoten bekommen hat. Durch die Auswahl eines der k Knoten kann Kademlia flexibel für eine Nachricht einen optimalen Pfad finden. Wegen der Unidirektionalität der Topologie ist der Cache-Mechanismus effizient. Um over-caching“ zu vermindern, wird die Lebenszeit eines Schlüssel-Wert Paars in ” der Datenbank exponential umgekehrt proportional der Anzahl der Knoten zwischen aktuellem und nächstem zum Ziel Knoten begrenzt. Die k-Buckets werden durch die weitergeleiteten Nachrichten ständig aktualisiert. Um die fehlerhaften Situationen, wenn kein Verkehr existiert, zu verhindern, aktualisiert der Knoten die k-Buckets, in welchen Gebieten keine Suchprozedur stattgefunden hat, ein Mal pro Stunde durch die Suche eines zufälligen Schlüssels des entsprechenden Bereichs. Wenn ein neuer Knoten A zum System hinzugefügt werden will, muss er mit einem bereits existierenden Knoten B kommunizieren. Der Knoten A fügt den Knoten B zum entsprechenden k-Bucket hinzu und initiiert die Suchprozedur mit eigenem Bezeichner. Zuletzt aktualisiert der neue Knoten alle eigenen k-Buckets.[MaMa02] Hauptseminararbeit Mikhail Tarasov 5 Zusammenfassung und Ausblick 23 5 Zusammenfassung und Ausblick In Rahmen dieser Arbeit wurden die Grundprinzipien der P2P-Systemen untersucht. Die P2P-Systeme können über mehrere Wege klassifiziert werden. Einmal können die P2P-Netze auf drei Typen der Topologie: zentralisierte, voll dezentralisierte und gemischte oder hybride aufgeteilt werden. In der Entwicklung der P2P-Netze können die 3 Generationen unterschieden werden. Eine andere Klassifikationsmöglichkeit ist die Unterscheidung von strukturierten und unstrukturierten Netzen. Das Hauptziel dieser Arbeit war die Untersuchung der Technologie von verteilten Hashtabellen (VHT). Diese Untersuchung wurde auf Basis der 3 verschiedenen Netzen: CAN, Pastry und Kademlia durchgeführt. Durch das Verwenden von verteilten Hashtabellen können die Hauptprobleme der vorhergehenden P2P-Generationen gelöst werden. Die Netze, die diese Technologie benutzen, sind selbstorganisierenden, skalierbaren und robusten Systemen, die eine breite Anwendung in verschiedenen Bereichen von Vergnügen bis zu großen wissenschaftlichen Projekten finden können. Hauptseminararbeit Mikhail Tarasov Literaturverzeichnis 24 Literaturverzeichnis [BQXFSX07] Gao Bao-Qing, Fu Xiu-Fen und Xu Su-Xia. P2P Distributed Cooperative Work Model Based on JXTA Platform. Lecture Notes in Computer Science. Springer Berlin / Heidelberg. 2007. [CDHR02] M. Castro, P. Druschel, Y. Hu und A. Rowstron. Topologyaware routing in structured peer-to-peer overlay networks. 2002. Letzte Abfrage dem 05.01.2009. [HHKS+ 08] Oliver Hanka, Quirin Hofstätter, Gerald Kunzmann, Christoph Spleiß und Stefan Zöls. TUM LKN Forschungsgruppe (P2PG). Technische Universität München, Lehrstuhl fur Kommunikationsnetze, http://www. lkn.ei.tum.de/forschung/gruppen/p2pg/?lang=de, Mai 2008. Projektseite einer P2P-Forschungsgruppe an der TU München, letzte Abfrage dem 05.01.2009. [JKZh] Yan Chen Steven Czerwinski Patrick Eaton Dennis Geels Ramakrishna Gummadi Sean Rhea Hakim Weatherspoon Westley Weimer Chris Wells John Kubiatowicz, David Bindel und Ben Zhao. [link02] Gnutella 0.6. http://rfc-gnutella.sourceforge.net/src/rfc-0_ 6-draft.html, 2002. Request for Comments: NNNN (draft). [MaMa02] Petar Maymounkov und David Mazieres. Kademlia: A Peer-toPeer Information System Based on the XOR Metric. 2002. http: //www.cs.rice.edu/Conferences/IPTPS02/109.pdf, letzte Abfrage dem 05.01.2009. [Peer] Peer to Peer File Sharing Networks Arollo, http://www.peer-to-peer. arollo.com/p2pgens.html. Three Generations of P2P. Die Internet seite des Arollo Peer-to-Peer-Projekts. Drei Generationen von P2P, letzte Abfrage dem 05.01.2009. Hauptseminararbeit Mikhail Tarasov Literaturverzeichnis 25 [RKCD01] Antony Rowstron, Anne marie Kermarrec, Miguel Castro und Peter Druschel. Scribe: The design of a large-scale event notification infrastructure. In In Networked Group Communication, 2001, S. 30–43. [RoDr] Antony Rowstron und Peter Druschel. Pastry: Scalable, decentralized object location and routing for large-scale peer-to-peer systems. Microsoft Research Ltd, http://research.microsoft.com/en-us/um/people/ antr/past/pastry.pdf. Letzte Abfrage dem 05.01.2009. [RoDr01] Antony Rowstron und Peter Druschel. Storage management and caching in PAST, a large-scale, persistent peer-to-peer storage utility. SIGOPS Oper. Syst. Rev. 35(5), 2001, S. 188–201. [Skyp] Skype Technologies, http://www.skype.com. Skype. Internetseite von Skype Technologies. [SRYu05] Brad Karp John Kubiatowicz Sylvia Ratnasamy Scott Shenker Ion Stoica Sean Rhea, Brighten Godfrey und Harlan Yu. OpenDHT: A Public DHT Service and Its Uses. http://www.opendht.org/f230-rhea.pdf, 2005. Proceedings of ACM SIGCOMM 2005, letzte Abfrage dem 05.01.2009. [Sun 08] Sun Microsystems, https://jxta.dev.java.net/. jxta: JXTA(TM) Community Projects, Dezember 2008. Projektseite des JXTA(TM) Community Projekts. [Sylv00] Mark Handley Richard Karp Scott Shenker Sylvia Ratnasamy, Paul Francis. A Scalable Content Addressable Network. International Computer Science Institute, http://www.icsi.berkeley.edu/ cgi-bin/pubs/publication.pl?ID=001185, Oktober 2000. Letzte Abfrage dem 05.01.2009. [UNIV08] UNIVA United Devices, http://www.univaud.com/. Project: Univa UD: The Leaders in High Performance Computing (HPC) and Data Center Automation and Virtualization Software, Dezember 2008. Projektseite der UNIVA United Devices. [Wiki09a] Wikipedia, the free encyclopedia, http://en.wikipedia.org/wiki/ Hash_table. Hash table, Januar 2009. Wikipedia-Artikel, letzte Abfrage dem 05.01.2009. Hauptseminararbeit Mikhail Tarasov Literaturverzeichnis 26 [Wiki09b] Wikipedia, the free encyclopedia, http://en.wikipedia.org/wiki/ Napster. Napster, Januar 2009. Wikipedia-Artikel, letzte Abfrage dem 05.01.2009. [Wiki09c] Wikipedia, the free encyclopedia, http://de.wikipedia.org/wiki/ Verteilte_Hashtabelle. Verteilte Hashtabelle, Januar 2009. Wikipedia-Artikel, letzte Abfrage dem 05.01.2009. Hauptseminararbeit Mikhail Tarasov Abbildungsverzeichnis 27 Abbildungsverzeichnis 2.1 2.2 2.3 Beispiel eines P2P-Netzes . . . . . . . . . . . . . . . . . . . . . . . . . P2P-Netz mit voll zentralisierter Struktur . . . . . . . . . . . . . . . . Ein P2P-Netz mit einer gemischten Struktur . . . . . . . . . . . . . . . 4 4 6 3.1 3.2 Ein Overlay-Netz auf Basis eines IP-Netzes . . . . . . . . . . . . . . . . Eine Hashtabelle. Nach [Wiki09a] . . . . . . . . . . . . . . . . . . . . . 8 10 4.1 4.2 Beispiel des CANs mit 5 Knoten im 2-dimensionalen Raum. Nach [Sylv00] 13 Routingtabelle einer Pastry-Knoten mit dem NodeID 65a1x, b=4. Die entsprechenden IP-Adressen werden nicht gezeigt. Nach [CDHR02] . . . 19 Routing einer Nachricht mit dem Schlüssel d46a1c von Knoten 65a1fc. Nach [CDHR02] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.3 Hauptseminararbeit Mikhail Tarasov Abkürzungsverzeichnis 28 Abkürzungsverzeichnis CAN . . . . . . . . . . . . . . . CSCW . . . . . . . . . . . . . DoS . . . . . . . . . . . . . . . . IRC . . . . . . . . . . . . . . . . P2P . . . . . . . . . . . . . . . . PDA . . . . . . . . . . . . . . . QoS . . . . . . . . . . . . . . . . UDP . . . . . . . . . . . . . . . VHT . . . . . . . . . . . . . . . XML . . . . . . . . . . . . . . . Content-Addressable Network Computer Supported Cooperativer Work Denial-of-Service Internet Relay Chat Peer-to-Peer Personal Digital Asistant Quality of Service User Datagram Protocol Verteilte Hash Tabelle Extensible Markup Language Hauptseminararbeit Mikhail Tarasov