03.11.2014 Aufrufe

1x1 - Fachgebiet Komplexe und Verteilte IT-Systeme - TU Berlin

1x1 - Fachgebiet Komplexe und Verteilte IT-Systeme - TU Berlin

1x1 - Fachgebiet Komplexe und Verteilte IT-Systeme - TU Berlin

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Vorlesung<br />

P2P Netzwerke<br />

1: Einführung<br />

Dr. Dominic Battré<br />

Complex and Distributed <strong>IT</strong>‐Systems<br />

dominic.battre@tu‐berlin.de<br />

berlin de


Inhalt<br />

● Vorstellung<br />

● Organisatorisches<br />

● Einführung in P2P Netzwerke<br />

15.04.2009 Dominic Battré ‐ P2P Netzwerke<br />

2


Vorstellung<br />

● /me stellt sich vor<br />

● Email: dominic.battre@tu‐berlin.de<br />

● Sprechst<strong>und</strong>e:<br />

Donnerstags, 14:00‐15:00<br />

15:00<br />

Raum E‐N 173 (Einsteinufer 17)<br />

● DU<br />

15.04.2009 Dominic Battré - P2P Netzwerke 3


Organisation<br />

● Webseite<br />

■ http://www.cit.tu‐berlin.de P2P<br />

■ Folien am Tag der Vorlesung morgens online<br />

● Vorlesung<br />

■ Donnerstags, 10:00 – 12:00, c.t., FR 0513 (*)<br />

● Übung<br />

* nur erste Woche, siehe Ankündigung auf Webseite<br />

■ Freitags, 14:00 – 16:00, c.t., FR 1063<br />

■ Voraussichtlich: 24.4., 4 85 8.5., 22.5., 56 5.6., 19.6.,<br />

3.7. oder 10.7., 17.7.<br />

15.04.2009 Dominic Battré - P2P Netzwerke 4


Mailingliste<br />

● Mail an cit‐p2p.ss09‐request@lists.tu‐berlin.de<br />

■ Subject: egal<br />

■ Inhalt: subscribe<br />

● Zweck<br />

■ Raumänderungen<br />

■ Terminänderungen<br />

■ Bekanntgabe, wenn Übungszettel/Folien verfügbar sind<br />

15.04.2009 Dominic Battré - P2P Netzwerke 5


Prüfung<br />

● Die Veranstaltung hat 3 SWS (4 LP) für Studiengänge<br />

Informatik D + MSc, sowie Technische Informatik D + MSc<br />

● Schriftliche Prüfung durch Klausur (ca. 60min)<br />

■ nur bei ausreichender Teilnehmerzahl<br />

■ Termine? z.B. 23. Juli 2009<br />

■ Anmeldung über Sekretariat (Details im späteren Verlauf)<br />

● Diplom: Einbringung in Schwerpunktprüfung (Gebiet BKS)<br />

● Master: Modulprüfung (C<strong>IT</strong> 8)<br />

Info‐Veranstaltung BKS: 17.4.09, 16:00 Uhr, EN‐180<br />

15.04.2009 Dominic Battré - P2P Netzwerke 6


Übungen<br />

● Präsenzübungen<br />

■ beginnen am 24. April<br />

■ Besprechung von Übungsblättern, Aufgaben, …<br />

● Übungsblätter<br />

■ wöchentlich<br />

■ freiwillig aber prüfungsrelevant<br />

■ werden korrigiert<br />

■ beliebige Gruppengröße<br />

■ programmieren <strong>und</strong> theoretisch<br />

■ wir schreiben einen P2P Chat<br />

15.04.2009 Dominic Battré - P2P Netzwerke 7


Inhalte der Vorlesung (vorläufig)<br />

Einleitung<br />

• Was ist P2P?<br />

• Definition<br />

• Einsatzgebiete<br />

Unstrukturierte Netze<br />

• Napster<br />

• Gnutella<br />

• Super‐Peer Netzwerke<br />

• Small‐World Netzwerke etc.<br />

Fortgeschrittenes<br />

• Sicherheit<br />

Strukturierte Netze<br />

• <strong>Verteilte</strong> Hash‐Tabellen<br />

• Gr<strong>und</strong>lagen<br />

• Chord, CAN, Pastry, Kademlia<br />

• Programmieren von DHTs<br />

• Gradoptimierte Netzwerke<br />

• SkipNet, P‐Grid<br />

• Lastverteilung in strukturierten Netzen<br />

Anwendungen<br />

• OceanStore<br />

• BabelPeers<br />

• Amazon<br />

• Multicast<br />

15.04.2009 Dominic Battré ‐ P2P Netzwerke 8


Ziele der Vorlesung<br />

● Verstehen,<br />

■ … was ein P2P Netzwerk ist<br />

■ … wie es sich von anderen Netzen unterscheidet<br />

■ … wann P2P Netzwerke sinnvoll sind<br />

■ … wie sie funktionieren<br />

■ … welche Topologien es gibt<br />

■ … welche Routing‐Algorithmen es gibt<br />

■ … wie Selbstorganisation funktioniert<br />

■ … wie Daten gespeichert werden<br />

■ … <strong>und</strong> wie diese Daten gef<strong>und</strong>en werden<br />

■ … welche Anwendungen ngen für P2P Netze e es gibt<br />

■ … wie P2P Netzwerke programmiert werden<br />

■ … wie P2P Netzwerke abgesichert werden<br />

15.04.2009 Dominic Battré ‐ P2P Netzwerke 9


Literatur<br />

● Bücher zu P2P:<br />

■ Peter Mahlmann, Christian Schindelhauer:<br />

P2P Netzwerke, Springer, 2007, 33 €<br />

■ Ralf Steinmetz, Klaus Wehrle: Peer‐to‐Peer Systems and<br />

Applications, Springer, 2005, 59 €<br />

■ Andy Oram: Peer‐to‐Peer: Harnessing the Power of Disruptive<br />

Technologies, O'Reilly, 2001, 25 €<br />

● Paper zu speziellen Themen<br />

■ wird jeweils beim Thema bekanntgegeben<br />

15.04.2009 Dominic Battré ‐ P2P Netzwerke 10


Internet Traffic (.de) nach Protokollen<br />

HTTP 10,71%<br />

Streaming 8,26%<br />

P2P 73,79% DDL 4,57%<br />

VoIP/Skype<br />

0,98%<br />

FTP 0,53%<br />

Mail 0,39%<br />

IM 0,34%<br />

NNTP<br />

Tunnel /<br />

Quelle: Ipoque 2007, Mhl Mahlmann 2008<br />

0,09%<br />

Encryption 0,34%<br />

15.04.2009 Dominic Battré - P2P Netzwerke 11


P2P Traffic nach Netzen (.de)<br />

Quelle: Ipoque 2007, Mahlmann 2008<br />

Gnutella 3,72%<br />

eDonkey 28,59%<br />

BitTorrent<br />

66,70%<br />

Sonst. 0,99%<br />

15.04.2009 Dominic Battré - P2P Netzwerke 12


BitTorrent Traffic nach Content (.de)<br />

TV 21,15% aBooks 1,41%<br />

Musik 7,78%<br />

P0rn 13,05%<br />

eBook 0,81%<br />

Spiele 5,77%<br />

Applikationen<br />

4,97%<br />

Filme 37,24%<br />

Quelle: Ipoque 2007, Mhl Mahlmann 2008<br />

Bilder 0,09%<br />

Anime 7,09%<br />

Musik 0,65%<br />

15.04.2009 Dominic Battré - P2P Netzwerke 13


P2P Traffic im Internet<br />

Quelle: http://www.cachelogic.com/home/pages/studies/2005_07.php<br />

h /h / / t /2005 07 h<br />

15.04.2009 Dominic Battré - P2P Netzwerke 14


Peer‐2‐Peer: Was ist das?<br />

● Peer‐2‐Peer (P2P) ist durch Filesharing bekannt geworden<br />

● Das Konzept ist schon viel älter <strong>und</strong> hat viel mehr Anwendungen:<br />

■ Skype<br />

■ Groove (Kollaborations‐Software)<br />

■ Coral lCache<br />

■ Datenmangement<br />

■ Bot Netze (z.B. Trojan.Peacomm)<br />

■ Amazon Warenkörbe<br />

● Was ist ein Peer? (Merriam‐Websters)<br />

1 : one that t is of equal standing with another : EQUAL; especially : one<br />

belonging to the same societal group especially based on age, grade, or status<br />

2 archaic : COMPANION<br />

3 a : a member of one of the five ranks (as duke, marquess, earl, viscount, or<br />

baron) of the British peerage b: NOBLE 1<br />

‐ peer adjective<br />

15.04.2009 Dominic Battré ‐ P2P Netzwerke 15


Definitionen<br />

● Wikipedia:<br />

■ "Kommunikation i unter Gleichen"<br />

● Gribble (2001):<br />

■ A distributed system in which participants rely on one another for<br />

services [...] Peers in the system can elect to provide services as well<br />

as consume them.<br />

● Yang/Garcia‐Molina (2002):<br />

■ Peer‐to‐peer (P2P) systems are distributed systems in which nodes<br />

of equal roles and capabilities exchange information and services<br />

directly with each other<br />

● Steinmetz/Wehrle (2004):<br />

■ [A Peer‐to‐Peer system is] a self‐organizing system of<br />

equal, autonomous entities (peers) [which] aims for the shared<br />

usage of distributed resources in a networked environment avoiding<br />

central services.<br />

15.04.2009 Dominic Battré ‐ P2P Netzwerke 16


Das P2P Prinzip<br />

● Keine 100% scharfe Definition!<br />

● Ein „Organisationsprinzip“:<br />

■ Jeder Rechner im Netzwerk erfüllt die gleichen Aufgaben<br />

■ Es gibt ki keine Unterscheidung zwischen Client <strong>und</strong> Server<br />

● Kernkonzepte (nicht immer alle erfüllt!)<br />

■ Selbstorganisation, kein zentrales Management<br />

■ Teilen von Ressourcen<br />

♦ Nutzung von Ressourcen am "Rand" des Netzwerkes<br />

■ Die Peers sind alle gleich<br />

■ Typischerweise sehr viele Peers<br />

■ Knoten kommen <strong>und</strong> gehen jederzeit jd ■ Peers sind autonom (eigene Entscheidung über Angebote)<br />

■ Adressierung auf Anwendungsebene<br />

15.04.2009 Dominic Battré ‐ P2P Netzwerke 17


Vorteile von P2P<br />

● Höhere Verfügbarkeit/Ausfallsicherheit:<br />

■ ki kein „singlepoint i of fil failure“<br />

● Aktualität/Einfachheit des „Publizierens“:<br />

■ Zugriff auf unveröffentlichte Daten<br />

■ trotzdem Anonymität<br />

● Skalierbarkeit<br />

● Geteilte Ressourcen (Rechenleistung, Speicherplatz, Bandbreite)<br />

● Keine Zensur/Manipulation durch zentrale Instanz<br />

● Nachteile von zentralisierten <strong>Systeme</strong>n:<br />

■ schlechte Abdeckung (‐‐> Akamai u.A. Content Delivery Networks)<br />

■ lange Updatezeiten<br />

■ Kosten für Betrieb des Systems<br />

■ Zentrale Instanz steuert (<strong>und</strong> manipuliert) die Inhalte<br />

15.04.2009 Dominic Battré ‐ P2P Netzwerke 18


Nachteile von P2P<br />

● Erhöhter Aufwand:<br />

■ Programmierung<br />

■ Fehlersuche<br />

■ Sicherheit<br />

■ Routing / Suche<br />

■ Replikation<br />

● Keine Verlässlichkeit ("nur" probabilistische Garantien)<br />

● Vertrauenswürdigkeit der Teilnehmer?<br />

15.04.2009 Dominic Battré ‐ P2P Netzwerke 19


Code Challenge Competition<br />

15.04.2009 Dominic Battré ‐ P2P Netzwerke 20


Vorlesung<br />

P2P Netzwerke<br />

2: Unstrukturierte Netze<br />

Dr. Dominic Battré<br />

Complex and Distributed <strong>IT</strong>‐Systems<br />

dominic.battre@tu‐berlin.de<br />

berlin de


Inhalt<br />

● Napster<br />

■ Erstes "P2P" Netzwerk<br />

■ Kein wirkliches P2P<br />

■ Enormes Medienecho Popularität für P2P<br />

● Gnutella<br />

■ Erstes "echtes" P2P Netzwerk<br />

■ Interessante Netzwerkeigenschaften<br />

● Eigenschaften von Gnutella<br />

■ Pareto‐Netzwerke<br />

■ Small‐World Netzwerke<br />

● Super‐Peer Netzwerke<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke<br />

2


Inhalte der Vorlesung (vorläufig)<br />

Einleitung<br />

• Was ist P2P?<br />

• Definition<br />

• Einsatzgebiete<br />

Unstrukturierte Netze<br />

• Napster<br />

• Gnutella<br />

• Super‐Peer Netzwerke<br />

• Small‐World Netzwerke etc.<br />

Fortgeschrittenes<br />

• Sicherheit<br />

Strukturierte Netze<br />

• <strong>Verteilte</strong> Hash‐Tabellen<br />

• Gr<strong>und</strong>lagen<br />

• Chord, CAN, Pastry, Kademlia<br />

• Programmieren von DHTs<br />

• Gradoptimierte Netzwerke<br />

• SkipNet, P‐Grid<br />

• Lastverteilung in strukturierten Netzen<br />

Anwendungen<br />

• OceanStore<br />

• BabelPeers<br />

• Amazon<br />

• Multicast<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 3


Literatur<br />

● The Gnutella Protocol Specification v0.4<br />

● Mihajlo A. Jovanovic, Fred S. Annexstein, Kenneth A. Berman:<br />

"Scalability Issues in Large Peer‐to‐Peer Networks A Case Study<br />

of Gnutella". Technical report, University of Cincinnati, January<br />

2001.<br />

● Albert‐Laszlo Barabasi, Reka Albert: "Emergence of Scaling in<br />

Random Networks", Science, Vol 286, 1999.<br />

● Duncan J. Watts, Steven H. Strogatz: "Collective dynamics of<br />

'small‐world' networks", Nature, Vol 393, 1998.<br />

● Katharina A. Lh Lehmann, Michael Kaufmann: "Random<br />

Graphs, Small‐Worlds and Scale‐Free Networks", Peer‐to‐Peer<br />

Systems and Applications<br />

● Réka Albert, Hawoong Jeong, Albert‐László Barbási: "Error and<br />

attack tolerance of complex networks", Nature, Vol 406, 2000<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 4


Napster<br />

● Netzwerk zum Tauschen von MP3‐Dateien<br />

● Geschichte:<br />

■ Mai 1999: Shawn Fanning (Northeastern<br />

University) gründet "Napster Online music service"<br />

■ Dezember 1999: Erster Rechtsstreit<br />

■ März 2000: University of Wisconsin:<br />

25% des IP Datenaufkommens sind Napster Pakete<br />

■ Dezember 2000: geschätzte 60 Millionen Anwender<br />

■ Februar 2001: US Circuit Court of Appeals:<br />

Napster weiß dass die Anwender Copyright‐Rechte verletzen:<br />

Napster wird geschlossen<br />

■ 2002: Bankrott<br />

■ September 2008: Aufkauf durch Best Buy<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 5


Napster<br />

● Fokussiert: Einfache Anwendung (suche nach Musikdateien)<br />

● Suche über zentralen Server<br />

● Datenaustausch dezentral<br />

Registrierung, Suche<br />

Datenaustausch<br />

Napster<br />

Server<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 6


Napster<br />

● Funktionsweise<br />

■ Verbinde mit Napster Server<br />

■ Hochladen der eigenen Dateiliste auf den Server<br />

■ Suche per Schlüsselwort‐Liste über den Server<br />

■ Wähle beste Antwort aus<br />

■ Direktverbindung mit Ziel‐Peer zum Download<br />

● Nachteile<br />

■ Zentraler Server<br />

♦ Single Point of Failure<br />

♦ Skalierbarkeit?<br />

■ Rechtliche Probleme<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 7


Gnutella<br />

● Kein zentraler Server mehr<br />

● Peers werden Servents genannt<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 8


Overlay‐Netzwerk<br />

● Gnutella ist sog. Overlay über dem Internet<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 9


Problemstellungen<br />

● Bootstrapping<br />

■ Woher kenne ich Knoten im Netzwerk?<br />

■ Mit welchen Knoten verbinde ich mich?<br />

● Suche<br />

■ Wie finde ich Knoten, die Datei XYZ.MP3 anbieten?<br />

■ Wie finde ich den besten Knoten, der Datei XYZ.MP3<br />

anbietet?<br />

■ Der beste Knoten?<br />

♦ Verbindung?<br />

♦ Auslastung?<br />

♦ Qualität der Datei?<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 10


Lösungen<br />

● Bootstrapping<br />

■ Allgemein bekannte Knoten (über Webserver)<br />

■ Liste mit bekannten Knoten von vorheriger Session<br />

■ Weitere Knoten über die Startknoten kennenlernen<br />

● Suche<br />

■ Flooding: Suche an alle Knoten weiterschicken<br />

■ Knoten merken sich IDs von gesehen Nachrichten, dies<br />

verhindert Schleifen<br />

■ TTL (Time to Live) begrenzt die Laufzeit einer Nachricht<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 11


Gnutella Nachrichten<br />

Header für alle Nachrichten<br />

QUERY (0x80)<br />

Descriptor ID<br />

16 Bytes<br />

Min Speed<br />

2 Bytes<br />

Payload Descr. 1 Byte<br />

Search Criteria n Bytes<br />

TTL<br />

1 Byte<br />

QUERY H<strong>IT</strong> (0x81)<br />

Hops<br />

1 Byte<br />

Nb. of Hits<br />

1 Byte<br />

Payload Length 4 Bytes<br />

Port<br />

2 Bytes<br />

IP Address<br />

4 Bytes<br />

PING (0x00)<br />

Speed<br />

4 Bytes<br />

keine weiteren Felder<br />

Result Set:<br />

PONG (0x01)<br />

‐ File Index 4 Bytes<br />

Port<br />

2 Bytes<br />

‐ File Size 4 Bytes<br />

IP Address<br />

4 Bytes<br />

‐ File Name (+\0\0) n Bytes<br />

Nb. of shared Files 4 Bytes<br />

‐ … (weitere Result.)<br />

Nb. of shared KBytes 4 Bytes Servent Identifier 16 Bytes<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 12


Abholen der Dateien<br />

● Direkte Verbindung zum Servent<br />

● Transfer durch HTTP<br />

● Wenn Servent hinter Firewall liegt:<br />

■ PUSH Nachricht über Gnutella routen<br />

PUSH (0x40)<br />

Servent Identifier<br />

File Index<br />

IP Address<br />

Port<br />

16 Bytes<br />

4 Bytes<br />

4 Bytes<br />

2 Bytes<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 13


Routing in Gnutella<br />

Ping / Pong Query / Query Hit Push<br />

PING<br />

H<strong>IT</strong><br />

QUERY<br />

PUSH<br />

PING<br />

PING<br />

PONG<br />

H<strong>IT</strong><br />

QUERY<br />

QUERY<br />

H<strong>IT</strong><br />

PUSH<br />

PUSH<br />

PING<br />

Push<br />

File<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 14


Probleme von Gnutella<br />

● Hohe Netzwerklast<br />

● Flooding ist äußerst unstrukturierte Vorgehensweise:<br />

■ Ich frage fast jeden, ob er eine Datei liefern kann<br />

■ Begrenzung nur durch TTL<br />

● Durch TTL werden evtl. Dateien nicht gef<strong>und</strong>en<br />

● Gnutella‐Topologie hat nichts mit realer Topologie zu tun<br />

■ Zig‐Zack Zack Routen<br />

■ Daraus folgen hohe Latenzzeiten<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 15


Eigenschaften von Gnutella<br />

● Was für ein Netzwerk wird aufgebaut?<br />

● Ist das Netzwerk rein zufällig?<br />

● Oder hat es bestimmte Eigenschaften?<br />

● Woher kommen diese Eigenschaften?<br />

● Gibt es sog. "Emergenz" bzw. "Selbstorganisation"?<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 16


Gradverteilung<br />

Quelle: Jovanovic, Annexstein, Berman:<br />

Scalability Issues in Large Peer‐to‐Peer Networks –<br />

A Case Study of Gnutella<br />

log(Anzahl Peers mit Grad d) ) = c – k log(d)<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 17


Gradverteilung<br />

● Allgemein: Power‐Law (Pareto‐Verteilung)<br />

Pr( X = x)<br />

=<br />

C<br />

k<br />

x<br />

Auch geschrieben als Pr(<br />

X<br />

= x)<br />

∝<br />

x<br />

−k<br />

● Bei Gnutella: C=94, k=1.4<br />

● Was hat man davon?<br />

■ Power‐Law Netzwerke sind robust<br />

■ Es gibt viele Knoten mit kleinem Grad, deren Ausfall nicht so<br />

schlimm ist<br />

● Wie kommt das zustande?<br />

■ „Preferential Attachement“: die Reichen werden reicher<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 18


Robustheit<br />

● Nimm ein Netzwerk mit 10.000 Knoten, 20.000 Kanten<br />

(durchsch. Grad=4) <strong>und</strong> entferne zufällig ausgewählte Knoten<br />

● Zufallsnetzwerk G(n, p):<br />

■ Entferne 5% der Knoten: Größte Komponente hat 9000 Knoten<br />

■ Entferne 18% der Knoten: Alle Komponenten zwischen 1 <strong>und</strong> 100<br />

Knoten<br />

■ Entferne 45% der Knoten: Nur Gruppen von 1 oder 2 Knoten<br />

überleben<br />

● Power‐law Netzwerk:<br />

■ Entferne 5% der Knoten: Nur isolierte Knoten brechen weg<br />

■ Entferne 18% der Knoten: Größte Komponente hat 8000 Knoten<br />

■ Entferne 45% der Knoten: Immernoch große Komponenten<br />

● Achtung: gilt nur für zufällige Ausfälle!<br />

Albert, et al. Error and attack tolerance of complex networks, Nature Vol 406, 2000<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 19


● Barabási‐Albert‐Modell:<br />

Modell für<br />

Preferential Attachement<br />

■ Starte mit kleinem Netzwerk mit ein paar Kanten <strong>und</strong> Knoten<br />

■ Pro Schritte füge einen Knoten hinzu<br />

■ Füge m Kanten vom neuen zu den bestehenden Knoten mit<br />

einer Wahrscheinlichkeit hinzu, die Proportional zum Grad<br />

des Knoten ist<br />

● Effekt: Knoten verbinden sich mit bereits gut verb<strong>und</strong>enen<br />

Knoten mit höherer Wahrscheinlichkeit<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 20


Milgram's Experiment<br />

● Wie sehen "reale" Netzwerke aus?<br />

● Soziales Netzwerk von Menschen: Wer kennt wen?<br />

● Milgram's Experiment (1967):<br />

■ Briefe an einen Fre<strong>und</strong> von Milgram wurden an zufällige<br />

Personen in Kansas u. Nebraska verschickt<br />

■ "Routing‐Informationen":<br />

i "<br />

♦ Name der Zielperson<br />

♦ Ort (Boston)<br />

♦ Beruf (Börsenmakler)<br />

■ Anweisung: nur an Du‐Fre<strong>und</strong>e weitergeben<br />

● Ergebnis: durchschnittlich 6 Schritte bis zum Ziel!<br />

● (aber nur 3 von 60 Paketen kamen an)<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 21


Milgram's Experiment<br />

Quelle: http://en.wikipedia.org/wiki/File:Map_of_USA_with_state_names.svg<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 22


● Wie ist das möglich?<br />

Milgram's Experiment<br />

● These: Soziale Netzwerke haben folgende Eigenschaften:<br />

■ Großer Clustering‐Koeffizient<br />

■ Kleiner Durchmesser bzw. charakteristische Pfadlänge<br />

● Clustering‐Koeffizient eines Knotens:<br />

{(<br />

j,<br />

k)<br />

∈ E | j,<br />

k ∈ N(<br />

i)<br />

}<br />

{ j | ( i,<br />

j)<br />

∈ E} , d(<br />

i)<br />

N(<br />

)<br />

C ( i)<br />

=<br />

, N(<br />

i)<br />

=<br />

= i<br />

d<br />

( i<br />

)(<br />

d<br />

(<br />

i<br />

) −<br />

1)<br />

■ N(i) = Nachbarn von i<br />

■ d(i) = Ausgangsgrad<br />

● Clustering‐Koeffizient eines Graphen: avg(C(i))<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 23


Milgram's Experiment<br />

● Wie ist das möglich?<br />

● These: Soziale Netzwerke haben folgende Eigenschaften:<br />

■ Großer Clustering‐Koeffizient<br />

■ Kleiner Durchmesser bzw. charakteristische Pfadlänge<br />

● Durchmesser:<br />

■ Längster kürzester Pfad zwischen zwei Knoten<br />

● Charakteristische Pfadlänge:<br />

■ Durchschnittlicher kürzester Pfad zwischen zwei Knoten<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 24


Randnotiz: Erdös‐Nummer<br />

Paul Erdös (1913 – 1996)<br />

Berühmter Mathematiker<br />

Frage: Über wie viele Schritte ist jemand als Co‐Autor mit<br />

Paul Erdös verb<strong>und</strong>en?<br />

Beispiel: Odej Kao hat Erdös‐Nummer 4:<br />

Odej Kao ist Co‐Autor von Klaus H. Ecker<br />

Klaus H. Ecker ist Co‐Autor von Helmut Ratschek<br />

Helmut Ratschek ist Co‐Autor von Egbert Harzheim<br />

Egbert Harzheim ist Co‐Autor von Paul Erdös<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 25


● Untersuchung von 2000:<br />

Eigenschaften von Gnutella<br />

Knoten Kanten Durch‐<br />

messer<br />

Clustering Koeffizient<br />

charakteristische<br />

Pfadlänge<br />

Gnutella Gnutella Zufallsgr. Gnutella Zufallsgr.<br />

13.11.2000 992 2465 9 0.0351 0.0078 3.72 4.49<br />

16.11.2000 1008 1782 12 0.0109 0.0056 4.43 5.54<br />

20.12.2000 1077 4094 10 0.0652 0.0094 3.31 3.66<br />

27.12.2000 1026 3752 8 0.0630 0.0102 3.30 3.71<br />

28.12.2000 1125 4080 8 0.0544 0.0090 3.33 3.77<br />

● Ergebnis: Clustering‐Koeffizient deutlich größer als beim<br />

Zufallsgraph, charakteristische Pfadlänge ähnlich bis kleiner<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 26


Watts <strong>und</strong> Strogatz<br />

● Netzwerk‐Modell von Watts <strong>und</strong> Strogatz:<br />

■ Starte mit einem Ring, jeder Knoten ist mit m/2 Nachfolgern<br />

verb<strong>und</strong>en<br />

■ Durchlaufe den Ring <strong>und</strong> ersetze mit Wahrscheinlichkeit p das<br />

Ziel einer Kante durch ein zufällig ausgewähltes neues Ziel<br />

■ Modelliert Übergang zwischen Ordnung <strong>und</strong> Chaos<br />

● Eine kleine Anzahl von zufälligen Links reicht aus, um den<br />

Durchmesser zu reduzieren<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 27


Modell von<br />

Watts <strong>und</strong> Strogatz<br />

p=0 p=1<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 28


Übergang bei Watts / Strogatz<br />

C: Clustering‐Koeffizient<br />

L: Charakteristische Pfadlänge<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 29


Netzwerktypen<br />

● Small‐World Networks<br />

■ Hoher Clustering‐Koeffizient<br />

♦ Transitivität: wenn A B kennt <strong>und</strong> A C kennt,<br />

dann kennen sich B <strong>und</strong> C mit hoher W’keit<br />

♦ Viele kleine (beinahe‐) Cliquen<br />

■ Geringer Durchmesser<br />

● Power‐Law Networks / Scale‐Free Networks<br />

■ Wenige Knoten mit hohem Grad<br />

11.04.2009 Felix Heine ‐ P2P Netzwerke 30


● Gnutella hat:<br />

Zusammenfassung Gnutella<br />

■ Gradverteilung nach Power‐Law<br />

■ Einen hohen Clustering‐Koeffizienten<br />

■ Einen kleinen Durchmesser<br />

Gnutella erzeugt ein Small‐World‐Netzwerk<br />

mit Power‐Law Gradverteilung.<br />

Das passiert selbstorganisierend (emergent)<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 31


Super‐Peer Netze<br />

● Idee: Kern‐Netz aus "Super‐Peers"<br />

● Die "normalen" Knoten sind per Client/Server angeb<strong>und</strong>en:<br />

Super Peer<br />

Leaf Node<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 32


Super‐Peer Netze<br />

● Nachteile:<br />

■ Nicht die reine Lehre<br />

■ Super‐Peers müssen hohe Last aushalten<br />

■ Wer ist Super‐Peer?<br />

● Vorteile:<br />

♦ Automatische Auswahl vs. Selbstbestimmung<br />

■ Weniger Fluktuation<br />

■ Kleineres Netzwerk<br />

■ Effizientere Suche<br />

■ Alle P2P‐Mechanismen lassen sich im Super‐Peer Netz<br />

anwenden<br />

11.04.2009 Dominic Battré ‐ P2P Netzwerke 33


Vorlesung<br />

P2P Netzwerke<br />

3: <strong>Verteilte</strong> Hash‐Tabellen<br />

Tabellen, Chord<br />

Dr. Dominic Battré<br />

Complex and Distributed <strong>IT</strong>‐Systems<br />

dominic.battre@tu‐berlin.de<br />

berlin de


Inhalte der Vorlesung (vorläufig)<br />

Einleitung<br />

• Was ist P2P?<br />

• Definition<br />

• Einsatzgebiete<br />

Unstrukturierte Netze<br />

• Napster<br />

• Gnutella<br />

• Super‐Peer Netzwerke<br />

• Small‐World Netzwerke etc.<br />

Fortgeschrittenes<br />

• Sicherheit<br />

Strukturierte Netze<br />

• <strong>Verteilte</strong> Hash‐Tabellen<br />

• Gr<strong>und</strong>lagen<br />

• Chord, CAN, Pastry, Kademlia<br />

• Programmieren von DHTs<br />

• Gradoptimierte Netzwerke<br />

• SkipNet, P‐Grid<br />

• Lastverteilung in strukturierten Netzen<br />

Anwendungen<br />

• OceanStore<br />

• BabelPeers<br />

• Amazon<br />

• Multicast<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 2


Inhalt<br />

● Konsistentes Hashing<br />

● <strong>Verteilte</strong> Hash‐Tabellen<br />

● Chord<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 3


Literatur<br />

● Ion Stoica, Robert Morris, David Liben‐Nowell, David R.<br />

Karger, M. Frans Kaashoek, Frank Dabek, Hari Balakrishnan:<br />

"Chord: A Scalable Peer‐to‐peer Lookup Protocol for<br />

Internet Applications", IEEE/ACM Transactions on<br />

Networking, Vol. 11, No. 1, pp. 17‐32, February 2003.<br />

● Ion Stoica, Robert Morris, David R. Karger, M. Frans<br />

Kaashoek, Hari Balakrishnan: "Chord: A Scalable Peer‐topeer<br />

Lookup Service for Internet Applications", i M<strong>IT</strong> TR 819.<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 4


Auffinden von Objekten<br />

● Gegeben:<br />

■ Eine Menge von Knoten<br />

■ Eine Menge von Objekten auf jedem Knoten<br />

● Gr<strong>und</strong>fragen:<br />

■ Wo wird welches Objekt im Netzwerk gespeichert?<br />

■ Wie wird das Objekt gef<strong>und</strong>en?<br />

● Objekte? Was für Objekte?<br />

■ Dateien<br />

■ Verweise auf Dateien<br />

■ Dt Datenbanktabellen<br />

ktbll<br />

■ Einträge in Datenbanktabellen<br />

■ Informationen (unterschiedliche Syntax/Semantik)<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke<br />

5


Napster vs. Gnutella<br />

● Bisher betrachtet: Napster <strong>und</strong> Gnutella<br />

● Napster:<br />

■ Objekt: Metadaten zu Dateien<br />

■ Speicherung <strong>und</strong> Suche über zentralen Server<br />

■ Probleme: keine Ausfallsicherheit, keine Skalierbarkeit<br />

● Gnutella:<br />

■ Objekt ist die Datei<br />

■ Suche: Breitensuche durch das Netzwerk<br />

■ Probleme:<br />

♦ Entweder: Flooding, d.h. das ganze Netzwerk wird mit Suchanfragen<br />

überflutet<br />

♦ Oder: Begrenzung des Suchhorizontes (Time to Live), dann werden<br />

nicht alle Treffer gef<strong>und</strong>en<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 6


Napster vs. Gnutella<br />

Flooding<br />

Kom mmunikat tionsaufw wand<br />

O(N)<br />

O(log N)<br />

O(1)<br />

<strong>Verteilte</strong><br />

Hash‐Tab<br />

Zentraler<br />

Server<br />

O(1)<br />

O(log N)<br />

Statusinformationen<br />

O(N)<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 7


Konsistentes Hashing<br />

● Gr<strong>und</strong>idee: Knoten als Zellen in einer Hashtabelle auffassen<br />

● Jedes Objekt hat einen Schlüssel<br />

● Hash‐Funktion bestimmt, welches Objekt auf welchen<br />

Knoten kommt<br />

● Problem: Umsortierung nach Knotenankunft<br />

0<br />

1 2 3 4<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 8


Konsistentes Hashing<br />

● Wie realisiere ich eine Hash‐Funktion, so dass bei<br />

Vergrößerung / Verkleinerung der Tabelle möglichst wenig<br />

Objekte umsortiert werden müssen?<br />

● Idee: "Zwischenschicht einziehen":<br />

■ Extrem große Hash‐Tabelle, deren Größe nie geändert wird<br />

■ Jeder Zelle der kleinen Tabelle entspricht einer Menge von<br />

Zellen in der großen Tabelle<br />

■ Bei Größenänderungen der kleinen Tabelle werden nur<br />

wenige Objekte verschoben<br />

■ Größenordnung O(X/N): X Anzahl Objekte, N Anzahl Zellen in<br />

der kleinen Tabelle<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 9


<strong>Verteilte</strong> Hashtabellen<br />

● Gr<strong>und</strong>idee:<br />

■ Jedes Objekt im Netzwerk (z.B. Datei) bekommt eine ID<br />

■ Jeder Netzknoten ist verantwortlich für einen Bereich von ID‘s<br />

■ Das Netz ist so aufgebaut, dass der für eine ID<br />

verantwortliche Knoten schnell aufgef<strong>und</strong>en werden kann<br />

Objekte<br />

ID‐Raum<br />

Knoten<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 10


<strong>Verteilte</strong> Hashtabellen<br />

● Gr<strong>und</strong>idee:<br />

■ Jedes Objekt im Netzwerk (z.B. Datei) bekommt eine ID<br />

■ Jeder Netzknoten ist verantwortlich für einen Bereich von ID‘s<br />

■ Das Netz ist so aufgebaut, dass der für eine ID<br />

verantwortliche Knoten schnell aufgef<strong>und</strong>en werden kann<br />

Objekte<br />

ID‐Raum<br />

Knoten<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 11


<strong>Verteilte</strong> Hashtabellen<br />

● Wie sieht der ID‐Raum aus?<br />

■ Typisch: Ganzzahlig Numerisch, z.B. 0 bis 2 128 ‐1<br />

■ Jeder Knoten hat selbst eine ID aus dem Bereich<br />

■ Jeder Knoten ist verantwortlich für einen Bereich<br />

■ Der Raum ist zirkulär:<br />

0 = 2 128 mod 2 128 ¼ x 2 128<br />

¾ x 2 128<br />

½ x 2 128<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 12


<strong>Verteilte</strong> Hashtabellen<br />

● Wie sieht der ID‐Raum aus?<br />

■ Typisch: Ganzzahlig Numerisch, z.B. 0 bis 2 128 ‐1<br />

■ Jeder Knoten hat selbst eine ID aus dem Bereich<br />

■ Jeder Knoten ist verantwortlich für einen Bereich<br />

■ Der Raum ist zirkulär:<br />

0 = 2 128 mod 2 128 ¼ x 2 128<br />

¾ x 2 128<br />

½ x 2 128<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 13


<strong>Verteilte</strong> Hashtabellen<br />

● Wie sieht der ID‐Raum aus?<br />

■ Typisch: Ganzzahlig Numerisch, z.B. 0 bis 2 128 ‐1<br />

■ Jeder Knoten hat selbst eine ID aus dem Bereich<br />

■ Jeder Knoten ist verantwortlich für einen Bereich<br />

■ Der Raum ist zirkulär:<br />

0 = 2 128 mod 2 128 ¼ x 2 128<br />

¾ x 2 128<br />

½ x 2 128<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 14


<strong>Verteilte</strong> Hashtabellen<br />

● Fragen:<br />

■ ID‐Raum<br />

♦ Aufbau<br />

♦ Verantwortlichkeit der Knoten<br />

■ Routing<br />

♦ Verbindungsstruktur der Knoten<br />

♦ Wie wird der verantwortliche Knoten gef<strong>und</strong>en?<br />

■ Dynamik<br />

♦ Integration eines neuen Knotens<br />

♦ Ausfall eines Knotens<br />

● Weitere Fragen:<br />

■ Lokalität<br />

■ Lastverteilung<br />

♦ Unterschiedliche Performance<br />

● Anwendungs‐Aspekte<br />

■ Was speichere ich?<br />

■ Bestimmung der Objekt‐ID<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 15


● Speicherung<br />

Anwendungs‐Aspekte<br />

■ Alternativen: ti Dt Daten oder Index<br />

■ Daten:<br />

♦ Pro: Schneller Zugriff<br />

♦ Contra: Updates, Speicherbrauch hwegen Red<strong>und</strong>anz<br />

d<br />

■ Index:<br />

♦ Pro: Aktualität, Effizientere Verteilung<br />

♦ Contra: Ein Routing‐Schritt mehr<br />

● Wahl der Objekt‐ID<br />

■ Anwendungsabhängig<br />

gg<br />

■ So, dass der Suchende die ID bestimmen kann<br />

♦ Z.B. Hash des Objektnamens (Dateiname)<br />

■ Auch mehrere unterschiedliche IDs pro Objekt<br />

♦ z.B. Bücher: Titel, Autor, ISBN‐Nummer, Verlag, …<br />

♦ Oder noch feiner: jedes Wort im Titel, weitere Schlagwörter<br />

■ Spielt eine Rolle bei der Lastverteilung<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 16


Chord<br />

● Knoten sind in einem Ring organisiert<br />

● Jeder Knoten ist für den Bereich vor <strong>und</strong> inkl. seiner<br />

eigenen ID zuständig<br />

● Knoten ID wird zufällig ausgewählt<br />

0 = 128<br />

105<br />

120<br />

18<br />

96 32<br />

40<br />

76<br />

64<br />

58<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 17


Chord: Routing<br />

● Erster Ansatz: Successor‐Pointer<br />

● Jeder Knoten kennt seinen Nachfolger im Ring<br />

● Wie funktioniert das Routing?<br />

0 = 128<br />

105<br />

120<br />

18<br />

96 32<br />

40<br />

76<br />

64<br />

58<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 18


Chord<br />

● Vorteil: Minimaler Knotenstatus<br />

● Probleme:<br />

■ Routing in O(N) Schritten<br />

■ Netz fällt auseinander, wenn ein Knoten ausfällt<br />

0 = 128<br />

105<br />

120<br />

18<br />

96 32<br />

40<br />

76<br />

64<br />

58<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 19


Chord: Routing<br />

● Nächster Ansatz: Vollständige Vernetzung<br />

● Routing in einem Schritt<br />

● Perfekter Zusammenhalt<br />

● Aber: Nicht skalierbar!<br />

0 = 128<br />

105<br />

120<br />

18<br />

96 32<br />

40<br />

76<br />

64<br />

58<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 20


Chord: Routing<br />

● Was wird gebraucht?<br />

● Jeder Knoten muss eine geringe Anzahl an anderen Knoten<br />

kennen<br />

● Z.T. direkt benachbarte Knoten, z.T. weit entfernte Knoten<br />

● Lösung: Jeder Knoten kennt den Knoten im Abstand 1, 2, 4,<br />

8, 16, 32, …<br />

● Routing‐Tabelle dazu heißt Finger‐Table<br />

● Und hat log(maxID) Einträge<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 21


● Beispiel für Knoten 105:<br />

Finger‐Table Routing<br />

0 = 128<br />

105<br />

120<br />

18<br />

96 32<br />

40<br />

76<br />

64<br />

58<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 22


Finger‐Table Routing<br />

● Beispiel für Knoten 105:<br />

Offset 1 2 4 8 16 32 64<br />

ID 106 107 109 113 121 9 41<br />

Tats. Knoten 120 120 120 120 18 18 58<br />

0 = 128<br />

105<br />

120<br />

18<br />

96 32<br />

40<br />

76<br />

64<br />

58<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 23


Routing in Chord<br />

● Idee: Suche den Knoten in der Finger‐Table, der am dichtesten an<br />

der Zieladresse ist, aber nicht dahinter<br />

● Algorithmen:<br />

1 // ask node n to find the successor of id<br />

2 n.find_successor(id)<br />

3 if id in (n, successor]<br />

4 return successor;<br />

5 else<br />

6 n‘ = closest_preceding_node(id);<br />

7 return n‘.find_ successor(id);<br />

1 // search the local table for the highest predecessor of id<br />

2 n.closest_preceding_node(id)<br />

3 for i = m downto 1<br />

4 if finger[i] in (n, id)<br />

5 return finger[i];<br />

6 return n;<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 24


Knotenankunft<br />

● Jeder Knoten hat zusätzlich einen predecessor Zeiger<br />

● Neuer Knoten muss seinen Identifier n bestimmen<br />

● Neuer Knoten n muss einen Knoten o im Netz kennen<br />

● n fragt o nach successor(n)<br />

■ erhält damit seinen eigenen successor n'<br />

● n kontaktiert n', dadurch wird predecessor(n') aktualisiert<br />

p<br />

n<br />

n'<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 25


Stabilisierungsprotokoll<br />

● Regelmäßige Kontrolle der successor / predecessor‐Pointer<br />

1 // called periodically. verifies n’s immediate<br />

2 // successor, and tells the successor about n.<br />

3 p.stabilize()<br />

4 n = successor.predecessor;<br />

5 if n in (p, successor)<br />

6 successor = n;<br />

7 successor.notify(p);<br />

p<br />

n<br />

n'<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 26


Stabilisierungsprotokoll<br />

1 // called periodically. verifies n’s immediate<br />

2 // successor, and tells the successor about n.<br />

3 n.stabilize()<br />

4 x = successor.predecessor;<br />

5 if x in (n, successor)<br />

6 successor = x;<br />

7 successor.notify(n);<br />

1 // n' thinks it might be our predecessor.<br />

2 n.notify(n')<br />

3 if (predecessor is nil or n' in (predecessor, n))<br />

4 predecessor = n';<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 27


Stabilisierung der<br />

Finger Pointer<br />

1 // called periodically. refreshes finger table entries.<br />

2 // next stores the index of the next finger to fix.<br />

3 n.fix_fingers()<br />

4 next = next + 1;<br />

5 if (next > m)<br />

6 next = 1;<br />

7 finger[next] = find_successor(n + 2^(next‐1) );<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 28


Stabilisierung der<br />

Finger Pointer<br />

Neuer Knoten (für k unbekannt)<br />

Alter Finger Pointer<br />

eines Knoten k<br />

Für Distanz 2 i p 2<br />

n '<br />

p<br />

n<br />

k+2 i<br />

hierhin „sollte“ der<br />

Finger Pointer zeigen<br />

Ziele, bei denen<br />

Finger Pointer p<br />

genutzt würde<br />

Routing funktioniert auch mit defekter Finger‐Tabelle korrekt!<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 29


Stabilisierung der<br />

Successor Pointer<br />

p<br />

n<br />

n'<br />

Routing fehlerhaft bei inkorrektem Successor Pointer!<br />

Ggf. sind Daten noch nicht von n' an n abgegeben worden!<br />

● Fehler sind nur kurzzeitig, müssen von Application Layer<br />

behandelt werden (z.B. wiederholte Anfrage/Einfügen)<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 30


● Zufällige Wahl der ID's<br />

Wie groß werden die Bereiche?<br />

● Ideal: bei N Knoten hat jeder Knoten MAXID/N IDs zu<br />

verwalten<br />

● Wie sieht es wirklich aus?<br />

● Normiere Ringgröße auf 1<br />

● Ideale Bereichsgröße ist 1/N<br />

● Wahrscheinlichkeit, dass ein Bereich mehr als den Faktor<br />

log(N) größer ist, oder mehr als den Faktor N kleiner ist, ist<br />

sehr klein<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 31


Wie groß werden die Bereiche?<br />

● Was ist "kleine" Wahrscheinlichkeit, was ist eine "hohe"?<br />

● Definition:<br />

■ Geringe Wahrscheinlichkeit: , c ≥ 1<br />

1<br />

N c<br />

■ Hohe Wahrscheinlichkeit: 1 − , c ≥ 1<br />

1<br />

N c<br />

Je größer das Netzwerk, desto dichter ist eine kleine<br />

Wahrscheinlichkeit bei 0, <strong>und</strong> eine hohe<br />

Wahrscheinlichkeit bei 1.<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 32


Wie groß werden die Bereiche?<br />

1. Die Wahrscheinlichkeit, dass ein beliebiges Intervall kleiner<br />

ist als Ω(1/N 2 ), ist gering.<br />

2. Die Wahrscheinlichkeit, dass ein beliebiges Intervall größer<br />

als O(log N/N) ist, ist gering.<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 33


Größe eines Intervalls:<br />

untere Schranke<br />

1<br />

Bt Betrachte das It Intervall<br />

I<br />

der Göß Größe<br />

hinter einem Knoten.<br />

2<br />

N<br />

E : Ereignis, dass Knoten i in dieses Intervallfällt<br />

i<br />

P 1<br />

⇒ ( E ) = i 2<br />

N<br />

E<br />

: Ereignis,<br />

dass irgendein Knoten in<br />

I<br />

fällt<br />

N<br />

N<br />

1 1<br />

⇒ P(<br />

E)<br />

= P(<br />

U<br />

i = 1<br />

Ei<br />

) ≤ ∑ P(<br />

E N<br />

i = i<br />

) = =<br />

1<br />

2<br />

N N<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 34


Größe eines Intervalls<br />

Knoten<br />

beliebigem<br />

hinter<br />

)<br />

log<br />

1<br />

Größe<br />

der<br />

Intervall<br />

das<br />

Betrachte (N<br />

I<br />

1<br />

fällt<br />

Intervall<br />

in dieses<br />

Knoten<br />

dass<br />

Ereignis,<br />

:<br />

Knoten<br />

beliebigem<br />

hinter<br />

)<br />

log<br />

Größe<br />

der<br />

Intervall<br />

das<br />

Betrachte<br />

i<br />

E<br />

(N<br />

N<br />

I<br />

i<br />

fällt<br />

in<br />

nicht<br />

Knoten<br />

dass<br />

Ereignis,<br />

:<br />

)<br />

log(<br />

1<br />

)<br />

(<br />

I<br />

i<br />

E<br />

N<br />

N<br />

E<br />

P<br />

i<br />

i =<br />

⇒<br />

fällt<br />

i<br />

K<br />

t<br />

ki<br />

d<br />

E i i<br />

)<br />

log(<br />

1<br />

1<br />

)<br />

(<br />

1<br />

)<br />

(<br />

I<br />

E<br />

N<br />

N<br />

E<br />

P<br />

E<br />

P<br />

i<br />

i<br />

−<br />

=<br />

−<br />

=<br />

⇒<br />

)<br />

log(<br />

)<br />

log(<br />

1<br />

1<br />

)<br />

)<br />

log(<br />

(1<br />

))<br />

log(<br />

1<br />

(1<br />

)<br />

(<br />

)<br />

(<br />

)<br />

(<br />

fällt<br />

in<br />

Knoten<br />

kein<br />

dass<br />

Ereignis,<br />

:<br />

N<br />

N<br />

N<br />

N<br />

E<br />

P<br />

E<br />

P<br />

E<br />

P<br />

I<br />

E<br />

N<br />

N<br />

N<br />

N<br />

N<br />

N<br />

i i −<br />

=<br />

−<br />

=<br />

=<br />

=<br />

⇒<br />

I =<br />

1,44<br />

2)<br />

ln(<br />

1<br />

2)<br />

ln(<br />

)<br />

ln(<br />

)<br />

log(<br />

)<br />

log(<br />

)<br />

log( 1<br />

1<br />

1<br />

1<br />

)<br />

1<br />

(1<br />

)<br />

1<br />

(1<br />

N<br />

N<br />

e<br />

e<br />

m<br />

m<br />

N<br />

N<br />

N<br />

N<br />

N<br />

m<br />

N<br />

m<br />

≈<br />

=<br />

=<br />

⎥<br />

⎦<br />

⎤<br />

⎢<br />

⎣<br />

⎡<br />

≤<br />

⎥<br />

⎦<br />

⎤<br />

⎢<br />

⎣<br />

⎡<br />

−<br />

=<br />

−<br />

=<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 35<br />

)<br />

(<br />

)<br />

(<br />

N<br />

e


Wieviele unterschiedliche Finger‐<br />

Zeiger haben Knoten?<br />

● Betrachte wieder auf 1 normierten Ring<br />

● Finger‐Zeiger zeigen auf +½, +¼, +1/8, +1/16, …<br />

● Ab dem Finger dessen Ziel kleiner ist als die Intervallgröße,<br />

sind alle Finger Identisch (Nachfolger)<br />

● Als suchen wir die Finger für die gilt:<br />

⇔ 2<br />

x<br />

<<br />

1 1<br />

x 2<br />

2<br />

> N<br />

2<br />

x<br />

N ⇔ log2(2<br />

) < log<br />

⇔ x < 2log<br />

2 (<br />

N<br />

)<br />

2<br />

2<br />

( N<br />

2<br />

)<br />

● also: O(log N) unterschiedliche Zeiger<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 36


Wie schnell ist das Routing?<br />

● O(log N) Schritte mit hoher Wahrscheinlichkeit<br />

n<br />

● n möchte an Adresse k senden (zuständig ist ein Knoten z)<br />

● p sei der Vorgänger von k → Wie lange brauchen wir bis p?<br />

● n ≠ p → n sendet an nächsten Vorgänger von k in Finger<br />

Tabelle<br />

● Betrachte ein i, sodass p in [n+2 i‐1 , n+2 i )<br />

● Intervall ist nicht leer (enthält p) → n sendet an ersten<br />

Knoten in dem Intervall (ist in Fingertabelle) bll)<br />

● D.h.: Überbrückte Distanz ist ≥ 2 i‐1<br />

p<br />

k<br />

z<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 37


Wie schnell ist das Routing?<br />

● O(log N) Schritte mit hoher Wahrscheinlichkeit<br />

n<br />

p<br />

k<br />

z<br />

● Betrachte ein i, sodass p in [n+2 i‐1 , n+2 i )<br />

● Intervall ist nicht leer (enthält p) → n sendet an ersten<br />

Knoten in dem Intervall (ist in Fingertabelle)<br />

● Dh:Überbrückte D.h.: Distanz ist ≥ 2 i‐1<br />

● Aktueller Knoten ist in [n+2 i‐1 , n+2 i ) <strong>und</strong> p ebenfalls<br />

● Länge des Intervalls ist 2 i‐1 → Restdistanz bis p ≤ 2 i‐1<br />

● → Hälfte der Strecke bis p ist überbrückt<br />

Fortsetzung<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 38


Wie schnell ist das Routing?<br />

● In jedem Schritt wird die Restdistanz mind. halbiert<br />

● Startdistanz ist max. 1 (normierter Ring)<br />

Schritte 1 2 3 … log N 2 log N<br />

Restdistanz 1/2 1/2 2 1/2 3 … 1/2 log N =1/N 1/2 2log N = 1/N 2<br />

● Nach 2 log N Schritten ist die Restdistanz 1/N 2<br />

● Die Wahrscheinlichkeit, dass in einem solchen Intervall<br />

mehr als ein Knoten ist, ist gering<br />

● Routing erfolgt in O(log N) Schritten mit hoher<br />

Wahrscheinlichkeit<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 39


Welche Finger zeigen auf mich?<br />

● Erwartungswert einfach:<br />

■ Erwartungswert des Ausgangsgrades O(log N)<br />

■ Daher Erwartungswert des Eingangsgrades g g O(log N)<br />

● Wahrscheinliche obere Schranke???<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 40


Welche Finger zeigen auf mich?<br />

p<br />

k<br />

Position wo Distanz<br />

2 i auf k zeigen würde<br />

(für festes i)<br />

Für ein Interval der Länge p..k gibt<br />

es höchstens p..k Positionen, die<br />

einen Finger Pointer für die Distanz<br />

2 i auf k zeigen lassen würden –egal<br />

wie groß 2 i ist.<br />

Position wo Distanz<br />

2 i vor oder hinter<br />

k zeigen würde<br />

(für festes i)<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 41


Welche Finger zeigen auf mich?<br />

k ● Intervall p…k hat höchstens Länge<br />

p L = O(log(N)/ N) (m.h.Wkeit)<br />

● Anzahl Peers in Intervall der Länge L ist<br />

O( L / (1/N)) = O(log N) (m.h.Wkeit)<br />

(Kann mittels Chernoff Ungleichung<br />

g<br />

gezeigt werden, s. Mahlmann 07)<br />

● Routingtabellen haben höchstens<br />

Länge O(log N)<br />

(m.h.Wkeit)<br />

● → O(log(N)) * O(log(N)) = O(log 2 (N))<br />

Knoten können auf k zeigen.<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 42


Chord: Knotenausfall<br />

● Knoten bemerkt, dass ein Successor ausgefallen ist<br />

● Woher bekommt er neuen Successor?<br />

● Lösung: Liste von x Nachfolgern<br />

● Liste wird regelmäßig gegen den Uhrzeigersinn<br />

weitergegeben <strong>und</strong> aktualisiert<br />

● Wichtig: Routing ist korrekt, auch wenn Finger‐Pointer noch<br />

nicht korrigiert!<br />

● Was passiert bei hohem "Churn"?<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 43


Chord: Hoher Churn<br />

● Beispiel:<br />

20 40<br />

60<br />

1 n.stabilize()<br />

2 x = successor.predecessor;<br />

3 if x in (n, successor)<br />

4 successor = x;<br />

5 successor.notify(n);<br />

30 50<br />

1 n.notify(n')<br />

2 if (predecessor is nil or n' in (predecessor, n))<br />

3 predecessor = n';<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 44


Replika‐Knoten<br />

● Nach Knotenausfall wird der Nachfolger verantwortlich für<br />

den Bereich des ausgefallenen Knotens<br />

● Daher: Replikation der Daten auf Nachfolger<br />

0 = 128<br />

96<br />

105<br />

120<br />

Knoten Root R1 R2<br />

18 18 [121,18] [106,120] [77,105]<br />

40 [19,40] [121,18] [106,120]<br />

32<br />

58 [41,58] [19,40] [121,18]<br />

76<br />

58<br />

40<br />

76 [59,76] [41,58] [19,40]<br />

105 [77,105] [59,76] [41,58]<br />

120 [106,120] [77,105] [59,76]<br />

64<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 45


Speichern von Daten<br />

● Jeder Knoten hat lokale Daten (z.B. Dateien)<br />

● Er publiziert diese Daten / Indizes im Netzwerk<br />

● Das ganze geht über sog. "Soft‐State State Updates"<br />

■ Daten haben auf dem Zielknoten ein Timeout<br />

■ Der Original‐Knoten muss sie regelmäßig erneuern<br />

● Wenn ein Knoten ausfällt, verschwinden seine Daten daher<br />

nach einiger Zeit<br />

● Der für ein Datum verantwortliche Knoten (Root‐Knoten)<br />

verteilt die Daten weiter an die Replika‐Knoten<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 46


Datenfluss<br />

18 40 58 76 105 120<br />

Lokal<br />

Lokal Lokal Lokal Lokal Lokal<br />

Root<br />

Root<br />

Root<br />

Root<br />

Root<br />

Root<br />

Replika<br />

Replika Replika Replika Replika Replika<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 47


Knotenankunft<br />

● Problem: Knoten bekommt Verantwortung für einen<br />

Bereich<br />

● Er hat aber noch keine Daten für diesen Bereich<br />

● Lösungsmöglichkeiten:<br />

■ Solange bis alle Daten vorhanden sind, werden Anfragen an<br />

alten Knoten weitergeleitet<br />

■ Erst ins Netzwerk einhängen, wenn die Daten da sind<br />

■ Problem ignorieren <strong>und</strong> auf Soft‐State Updates warten<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 48


Erweiterung: DHash++<br />

● Frank Dabek, Jinyang Li, Emil Sit, James Robertson, Frans M<br />

Kaashoek, Robert Morris: Designing a DHT for Low Latency<br />

and High Throughput, NSDI 04, pp. 85‐98<br />

? ?<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 49


Erweiterung: DHash++<br />

● Rekursives statt iteratives Routing (geringere Latenz wg.<br />

weniger Nachrichten, erlaubt auch effiziente Nutzung von<br />

TCP trotz Overhead des Handshakes)<br />

Iterativ:<br />

1<br />

3 5<br />

Rekursiv:<br />

1<br />

2 3<br />

2<br />

4 6<br />

4<br />

● Geringere Latenzen durch lokalitätsbasierte Auswahl der<br />

Finger Pointer (wird später in der VL behandelt)<br />

● Erasure Codes statt Replikation für geringeren<br />

Schreibaufwand (aber langsameres Lesen)<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 50


Nachteile von DHTs<br />

● Ohne explizite Behandlung in der Anwendung:<br />

■ Keine Lokalität der Daten: Meier vs. Mayer<br />

■ Un‐exakte Suche unmöglich<br />

■ Bereichssuche unmöglich<br />

● Verwaltungsaufwand beim Knotenankunft/‐weggang<br />

■ Daher schlecht bei hoher Dynamik ("Churn")<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 51


Interfaces zu DHTs<br />

● Zwei Sichtweisen:<br />

■ Pakete zu einer ID Routen<br />

■ Hashtabelle<br />

● Pakete Routen:<br />

■ send(destId, msg)<br />

■ msg receive()<br />

■ Best‐effort effort service<br />

● Hashtabelle<br />

■ put(key, value)<br />

■ value get(key)<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 52


Zusammenfassung<br />

● DHTs verschieben Daten auf wohldefinierte Knoten<br />

● Dadurch ist effiziente Suche nach Daten möglich<br />

● Zur Zuordnung von Daten zu Knoten wird konsistentes<br />

Hashing verwendet<br />

● Fragestellungen für DHTs:<br />

■ Aufbau ID‐Raum<br />

■ Verbindungsstruktur<br />

■ Routing‐Mechanismus<br />

■ Dynamik: Knotenankunft / Knotenausfall<br />

● Interfaces zu DHTs<br />

23.04.2009 Dominic Battré ‐ P2P Netzwerke 53


Vorlesung<br />

P2P Netzwerke<br />

4: Content Addressable Network<br />

Dr. Dominic Battré<br />

Complex and Distributed <strong>IT</strong>‐Systems<br />

dominic.battre@tu‐berlin.de<br />

berlin de


CAN: Content Addressable Network<br />

● Sylvia Ratnasamy, Paul Francis, Mark Handley, Richard Karp,<br />

Scott Shenker: "A Scalable Content‐Addressable Network",<br />

SIGCOMM’01, 2001.<br />

● Alternativer Ansatz:<br />

■ Adresse eines Knotens ist eine 2‐dimensionale Koordinate<br />

● Bereiche werden bei Knotenankunft geteilt<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 2


CAN<br />

(0,1) (1,1)<br />

(0,0) (1,0)<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 3


CAN<br />

(0,1) (1,1)<br />

(0,0) (1,0)<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 4


CAN<br />

(0,1) (1,1)<br />

(0,0) (1,0)<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 5


CAN<br />

(0,1) (1,1)<br />

(0,0) (1,0)<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 6


CAN<br />

(0,1) (1,1)<br />

(0,0) (1,0)<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 7


Verbindungsstruktur<br />

(0,1) (1,1)<br />

Achtung:<br />

d‐torus<br />

(0,0) (1,0)<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 8


CAN<br />

● ID‐Raum ist 2‐Dimensional kontinuierlich [0,1)x[0,1)<br />

● Routing:<br />

■ Wenn Ziel in meine Zone fällt, bin ich fertig<br />

■ Sonst: Schicke Nachricht zu einem Nachbarknoten, der eine<br />

kleinere (euklidische) Distanz zum Ziel hat<br />

● Knotenankunft:<br />

■ Wähle zufällige ID aus [0,1)x[0,1)<br />

[ , )<br />

■ Route Nachricht an diesen Punkt<br />

■ Gebiet des Ziel‐Peers wird geteilt<br />

■ Baue Verbindungen zu allen Nachbarn des alten Peers auf<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 9


Analyse<br />

● Idealisiert: 2D‐Gitter<br />

● Nötige Routing‐Schritte<br />

■ O(sqrt(N))<br />

( ● Anzahl Nachbarn<br />

■ 4 Nachbarn, also O(1)<br />

● Vergleiche mit Chord:<br />

■ beides O(log N)<br />

● Routing langsamer, aber viel weniger Verbindungen <strong>und</strong><br />

damit weniger Verwaltungsaufwand!<br />

● Trotzdem robustes Netzwerk<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 10


● Übungsaufgabe<br />

Wie groß werden die Zonen?<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 11


CAN: Ausfall eines Knotens<br />

● Die Nachbarn entdecken, dass der Peer ausgefallen ist<br />

● Ziel:<br />

■ der Nachbar mit der kleinsten Zone soll den ausgefallenen<br />

Peer übernehmen<br />

● Daher:<br />

■ Jd Jeder Knoten startet einen Timer proportional zur Göß Größe der<br />

eigenen Zone<br />

■ Wenn der Timer abgelaufen ist, sendet er eine Nachricht an<br />

alle anderen Nachbarn<br />

■ Wer die Nachricht empfängt, stoppt seinen Timer<br />

■ Danach übernimmt er die Zone des ausgefallenen Peers<br />

● Kann zu Fragmentierung führen<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 12


Fragmentierung<br />

(0,1) (1,1)<br />

(0,0) (1,0)<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 13


Fragmentierung<br />

(0,1) (1,1)<br />

(0,0) (1,0)<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 14


Defragmentierung Teil 1<br />

● Wenn ein Peer mehr als eine Zone hat:<br />

■ Versuche, kleinste Zone loszuwerden<br />

● Wenn die Nachbarzone ungeteilt ist (beide Knoten Blätter im<br />

Aufteilungsbaum):<br />

■ Übergib die Zone dem Nachbar<br />

A<br />

A<br />

C<br />

D<br />

C<br />

B<br />

D<br />

C<br />

B<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 15


Defragmentierung Teil 2<br />

● Wenn die Nachbarzone aufgeteilt ist:<br />

■ Tiefensuche im Baum, bis zwei benachbarte Blätter gef<strong>und</strong>en<br />

wurden<br />

■ Fasse diese Blätter zusammen<br />

■ der freigewordene Peer übernimmt das Gebiet<br />

A<br />

A<br />

C<br />

D E<br />

C<br />

B<br />

D<br />

E<br />

C<br />

B<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 16


Mehrdimensionales CAN<br />

● Analoge Konstruktion, aber d‐Dimensionaler Schlüsselraum<br />

● Bewirkt:<br />

■ Kürzere Routing‐Zeiten<br />

■ Mehr Nachbarn<br />

● Genauer:<br />

■ O(n 1/d ) Hops<br />

■ 2d Nachbarn, also O(d) Nachbarn<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 17


Mehrere Realitäten<br />

● Es werden gleichzeitig mehrere CAN Netzwerke aufgebaut<br />

● Jedes heißt Realität<br />

● Beim Routing wird zwischen den Realitäten gesprungen<br />

(besonders am Anfang)<br />

● Bewirkt: Schnelleres Routing, Replikation, Robustheit<br />

C<br />

A<br />

B<br />

E<br />

H<br />

E<br />

G<br />

B<br />

D<br />

G<br />

D<br />

J<br />

F I J<br />

F<br />

A<br />

H<br />

I<br />

C<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 18


Dimensionen vs. Realitäten<br />

Quelle: Ratnasamy, Francis, Handley, Karp, Shenker:<br />

A Scalable Content‐Addressable Network, SIGCOMM’01, 2001<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 19


Dimensionen vs. Realitäten<br />

Quelle: Ratnasamy, Francis, Handley, Karp, Shenker:<br />

A Scalable Content‐Addressable Network, SIGCOMM’01, 2001<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 20


Mehrfaches Hashing<br />

● Daten werden mehrfach abgespeichert<br />

■ indem man k unterschiedliche Hash‐Funktionen nimmt<br />

● Dadurch erhöht sich die Robustheit<br />

● Geringere Entfernungen<br />

■ Lookup nur zu nächster Kopie<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 21


Überladen von Zonen<br />

● In jeder Zone werden mehrere Peers platziert<br />

● Alle Peers einer Zone kennen sich untereinander<br />

● Jeder kennt mindestens einen aus der Nachbarschaft<br />

● Bewirkt: Routing konstant schneller, Replikation<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 22


Uniform Partitioning<br />

● Beim Join wird versucht, die Zonengröße besser<br />

auszugleichen<br />

● Jeder Peer kennt die Zonen seiner Nachbarn<br />

● Es wird die größte Zone geteilt<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 23


Latenzen Berücksichtigen<br />

● Bisher haben wir Routing‐Performance nur in Hop‐<br />

Distanzen im Overlay‐Netzwerk gemessen<br />

● Wie sieht es tatsächlich aus?<br />

● Beispiel: Routing mit 3 Hops im Overlay<br />

Knoten<br />

im P2P<br />

Overlay<br />

Logische<br />

Verbindung<br />

im Overlay<br />

Asien<br />

USA,<br />

New York<br />

Router<br />

im<br />

Internet<br />

Europa<br />

Internet<br />

Verbindung<br />

USA,<br />

Boston<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 24


Latenzen<br />

● Die effektive Latenz im Routing hängt also von 2 Faktoren<br />

ab:<br />

■ Anzahl Hops<br />

■ Internet‐Latenzen der einzelnen Hops<br />

● Es kann also evtl. schneller sein, mehr Hops zu machen, die<br />

aber dafür lokaler sind<br />

● Dazu muss das Routing oder die Verbindungsstruktur eine<br />

gewisse Flexibilität haben<br />

● Bei Chord z.B. sind Struktur <strong>und</strong> Routen determiniert<br />

● CAN ist hier flexibler<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 25


Latenzen<br />

● In CAN 3 Ansätze:<br />

■ Im Standard‐CAN den nächsten Hop mit bestem Verhältnis<br />

ID‐Distanz zu Latenz auswählen (statt maximaler ID‐Distanz)<br />

Proximity Route Selection (PRS)<br />

■ Beim Überladen von Zonen Verbindung mit dem "dichtesten"<br />

Knoten in der Nachbarzone eingehen<br />

regelmäßig die anderen Kandidaten prüfen, evtl. wechseln<br />

Proximity Neighbor Selection (PNS)<br />

■ ID nicht zufällig wählen, sondern anhand einer Lokalitäts‐<br />

MtikP Metrik Position im Nt Netzwerk wählen<br />

Proximity Neighbor Selection (PNS)<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 26


Netzwerk an Internet‐Topologie<br />

anpassen<br />

● m spezielle Peers dienen als "Landmarken"<br />

● Latenzzeiten zu diesen Landmarken werden gemessen<br />

● Liste der Latenzzeiten zu den Landmarken wird sortiert<br />

● Diese Sortierung bestimmt Position im CAN<br />

● Dadurch werden nahe Peers auch in CAN nah einsortiert<br />

● Vorteile:<br />

■ Gute Verringerung der Latenzzeiten<br />

● Probleme<br />

■ Wie wähle ich die Landmarken aus?<br />

■ Lastungleichgewichte<br />

■ Gefahr von Partitionierung<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 27


CAN: Gesamt‐Evaluation<br />

Parameter<br />

bare bones<br />

CAN<br />

Dim. 2 10<br />

Realitäten 1 1<br />

Peer / Zone 0 4<br />

Hashfkt. 1 1<br />

Latenz‐Optimiertes Aus An<br />

Routing<br />

Uniform Partitioning Aus An<br />

Landmark Ordering Aus Aus<br />

knobs on full<br />

CAN<br />

Metrik<br />

bare bones<br />

CAN<br />

Pfadlänge 198 5<br />

Grad 4,57 27,1<br />

Peers 0 2,95<br />

knobs on full<br />

CAN<br />

IP Latenz 115,9 ms 82,4 ms<br />

Pfad Latenz 23,008 sec. 135,29 ms<br />

2 18 Knoten, Transit‐Stub Topologie<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 28


CAN: Vorteile/Nachteile<br />

● Vorteile<br />

■ Einfaches Verfahren<br />

■ Balanciert die Datenmenge<br />

■ Kleiner Grad<br />

■ Netzwerk ist stark zusammenhängend, dadurch robust<br />

■ Kennt verschiedene Wege zum Ziel <strong>und</strong> kann dadurch Routen<br />

optimieren<br />

● Nachteile<br />

■ Lange Wege (polynomiell lang)<br />

■ Stabilität durch geringe Nachbarzahl gefährdet<br />

06.05.2009 Dominic Battré ‐ P2P Netzwerke 29


Vorlesung<br />

P2P Netzwerke<br />

5: Pastry<br />

Dr. Dominic Battré<br />

Complex and Distributed <strong>IT</strong>‐Systems<br />

dominic.battre@tu‐berlin.de<br />

berlin de


Inhalte der Vorlesung (vorläufig)<br />

Einleitung<br />

• Was ist P2P?<br />

• Definition<br />

• Einsatzgebiete<br />

Unstrukturierte Netze<br />

• Napster<br />

• Gnutella<br />

• Super‐Peer Netzwerke<br />

• Small‐World Netzwerke etc.<br />

Fortgeschrittenes<br />

• Sicherheit<br />

Strukturierte Netze<br />

• <strong>Verteilte</strong> Hash‐Tabellen<br />

• Gr<strong>und</strong>lagen<br />

• Chord, CAN, Pastry, Kademlia<br />

• Programmieren von DHTs<br />

• Gradoptimierte Netzwerke<br />

• SkipNet, P‐Grid<br />

• Lastverteilung in strukturierten Netzen<br />

Anwendungen<br />

• OceanStore<br />

• BabelPeers<br />

• Amazon<br />

• Multicast<br />

11.05.2009 Dominic Battré ‐ P2P Netzwerke 2


Pastry <strong>und</strong> Tapestry<br />

● Pastry<br />

■ Antony Rowstron and Peter Druschel: "Pastry: Scalable,<br />

decentralized object location and routing for large‐scale peer‐<br />

to‐peer systems" , IFIP/ACM International Conference on<br />

Distributed Systems Platforms (Middleware), 2001<br />

● Tapestry<br />

■ Kirsten Hildrum, John Kubiatowicz, Satish Rao, Ben Y. Zhao,<br />

"Distributed object location in a dynamic network.", SPAA,<br />

2002, pp. 41‐52<br />

● Gr<strong>und</strong>lage: Routing nach Plaxton/Rajaraman/Richa<br />

■ C. Greg Plaxton, Rj Rajmohan Rj Rajaraman, A. W. Richa,<br />

"Accessing Nearby Copies of Replicated Objects in a<br />

Distributed Environment", SPAA, 1997, pp. 311‐320<br />

11.05.2009 Dominic Battré ‐ P2P Netzwerke 3


Gr<strong>und</strong>idee: Präfix‐Routing<br />

● ID wird zur Basis 2 b dargestellt,<br />

■ z.B. b=4 bedeutet Hexadezimaldarstellung<br />

■ bei 160 Bit sind das 40 Ziffern<br />

● Gr<strong>und</strong>idee:<br />

Sende die Nachricht an den Knoten aus der<br />

Routing‐Tabelle, dessen gemeinsamer Präfix mit<br />

der Ziel‐ID maximale Länge hat.<br />

● Was für Einträge braucht man in der Routing‐Tabelle?<br />

11.05.2009 Dominic Battré ‐ P2P Netzwerke 4


Routing‐Tabelle<br />

Knoten 53411721, 10.000 Knoten<br />

b=3, d.h. Oktalziffern<br />

ID‐Länge 8 Ziffern, d.h. 3*8 = 24 Bit<br />

Präfix 0 1 2 3 4 5 6 7<br />

‐ 05113420 10421650 25661215 33561253 42604240 66353254 72621233<br />

5 50652006 51615413 52211242 54116142 55103005 56433314 57767105<br />

53 53021530 53110517 53242072 53351527 53557047 53654314 53740336<br />

534 53403564 53435054 53447620 53452243 53467746 53472422<br />

5341 53410425<br />

53411<br />

534117<br />

5341172<br />

11.05.2009 Dominic Battré ‐ P2P Netzwerke 5


● Beispiel: Graphische<br />

Darstellung eines Teils der<br />

Routing‐Tabelle eines<br />

Knotens mit der ID 021xxxx<br />

● Jeweils ein Zeiger in den<br />

Sektor 1xxx, 2xxx, 3xxx<br />

● Dann je ein Zeiger in die<br />

Sektoren 00xxx, 01xxx,<br />

03xxx<br />

● Dann je ein Zeiger in die<br />

Sektoren 020xxx, 022xxx,<br />

023xxx<br />

● etc.<br />

Routing‐Tabelle<br />

11.05.2009 Dominic Battré ‐ P2P Netzwerke 6


Probleme<br />

● Wie geht das Routing weiter, wenn man auf einen leeren<br />

Eintrag in der Routing‐Tabelle trifft?<br />

● Hier unterscheiden sich Pastry <strong>und</strong> Tapestry<br />

■ Frage: Sind die Routing‐Tabellen konsistent?<br />

■ d.h., gibt es für einen leeren Eintrag niemals einen passenden<br />

Knoten?<br />

■ Antwort von Pastry: Nicht konsistent<br />

■ Antwort von Tapestry: Konsistent<br />

● Entsprechend dieser Annahme unterscheidet sich das<br />

weitere Vorgehen<br />

11.05.2009 Dominic Battré ‐ P2P Netzwerke 7


Pastry<br />

● Zuordnung von Bereichen:<br />

■ Root‐Knoten ist der numerisch dichteste<br />

■ Aufpassen: der numerisch dichteste Knoten kann ein ganz anderes<br />

Präfix haben!<br />

■ Beispiel: Knoten 2700, Ziel 2777, nächster Knoten 3000 (Oktal)<br />

● Dh Daher:<br />

■ Pastry wechselt am Ende auf ein anderes Routing‐Verfahren<br />

■ Dazu wird ein Leaf‐Set verwendet, das die L dichtesten Knoten<br />

beinhaltet<br />

● Also:<br />

■ Mit Präfix‐Routing wird in die Nähe des Ziels gesprungen<br />

■ Die genaue Positionierung geht dann über das Leaf‐Set<br />

11.05.2009 Dominic Battré ‐ P2P Netzwerke 8


Vergleich mit Chord<br />

● In beide Richtungen routen (statt nur im Uhrzeigersinn)<br />

● Restdistanz pro Schritt durch 2 b teilen (statt halbieren)<br />

● Routing‐Einträge werden jeweils aus einem Intervall<br />

ausgesucht (statt deterministisch einen zu nehmen)<br />

● Verantwortlichkeiten werden anders definiert<br />

11.05.2009 Dominic Battré ‐ P2P Netzwerke 9


Pastry: Routing Algorithmus<br />

1 // Knoten A: Route Schlüssel D<br />

2 if LeafSet[‐L/2]


Pastry: Performance<br />

● Anzahl Einträge in der Routing‐Tabelle: O(log 2<br />

b N<br />

)<br />

● Routing‐Performance:<br />

O<br />

(log 2 N)<br />

b<br />

● Wenn Routing‐Tabellen leer: O<br />

( N<br />

/<br />

L<br />

)<br />

11.05.2009 Dominic Battré ‐ P2P Netzwerke 11


Lokalität<br />

● Einträge in der Routing‐Tabelle können frei gewählt werden<br />

(entsprechend den Constraints)<br />

● Tabellen werden mit "nahen" Knoten befüllt<br />

● Art der Distanzbestimmung ist dabei offen gelassen<br />

● Anforderung: es muss eine Metrik sein<br />

● Die Befüllung der Routing‐Tabellen mit "nahen" Knoten<br />

wird durch den Join‐Algorithmus gewährleistet:<br />

■ Annahme dabei: neuer Knoten ist "nahe" zu seinem<br />

Bootstrap‐Knoten A<br />

■ Also sind die Knoten B, C, … auf dem Pfad auch "nahe"<br />

■ Daher ist die so konstruierte Tabelle schon relativ gut<br />

11.05.2009 Dominic Battré ‐ P2P Netzwerke 12


Ankunft eines Knoten<br />

● Route Nachricht an eigene ID id über bekannten Knoten A<br />

● Die Nachricht wird über Knoten B, C, … an Knoten Z<br />

geroutet<br />

● Jeder Knoten auf der Route schickt seine Routing‐Tabelle<br />

zurück<br />

● Daraus baue ich meine eigene Tabelle auf:<br />

■ Zeile 0 wird von Knoten A genommen<br />

■ Zeile 1 wird von Knoten B genommen<br />

■ …<br />

● Leaf‐Set wird von Knoten Z genommen<br />

● Alle jetzt bekannten Knoten werden informiert<br />

11.05.2009 Dominic Battré ‐ P2P Netzwerke 13


Varianten beim Einfügen<br />

● Einfache Variante SL (von vorheriger Folie):<br />

■ Jeweils eine Zeile auf dem Weg vom Join‐Knoten zum Ziel nehmen<br />

● Variante WT:<br />

■ Gesamten Status von jedem Knoten auf dem Weg zum Ziel nehmen<br />

● Variante WTF (in FreePastry implementiert):<br />

■ Eine Ebene weiter gehen, von allen so bekannten Knoten den<br />

Status holen<br />

● In den Varianten WT <strong>und</strong> WTF wird idjeweils die Lokalität geprüft<br />

(RTT‐Messungen)<br />

● Bei mehreren Möglichkeiten, eine Zelle zu füllen, wird jeweils<br />

der dichteste Knoten genommen<br />

11.05.2009 Dominic Battré ‐ P2P Netzwerke 14


Probleme beim Einfügen<br />

● Ich bin der erste Peer mit einem bestimmten Präfix<br />

● Dann müssen potentiell alle Knoten im Netz mich<br />

kennenlernen<br />

● Es lernen mich aber nur Teile des Netzwerkes kennen<br />

● Der Rest wird über den Reparaturmechanismus erledigt,<br />

korrektes Leaf‐Set erlaubt langsames aber korrektes<br />

Routing.<br />

Für korrektes Routing wird nur ein korrektes Leaf‐Set benötigt.<br />

Nur beim Leaf‐Set wird aktiv geprüft,<br />

ob Peers noch anwesend sind.<br />

11.05.2009 Dominic Battré ‐ P2P Netzwerke 15


● Auffüllen der Routing‐Tabelle:<br />

Ausfall eines Knoten<br />

● Um einen Eintrag R[l, d] zu ersetzen, wird zunächst ein<br />

Knoten R[l, i], i != d, gefragt. g Wenn dieser einen passenden<br />

Eintrag hat, wird er genommen.<br />

● Wenn nicht, wird ein Knoten R[l+1, i], gefragt, g etc.<br />

● Mit hoher Wahrscheinlichkeit wird so ein Knoten gef<strong>und</strong>en,<br />

der die Tabelle auffüllen kann<br />

11.05.2009 Dominic Battré ‐ P2P Netzwerke 16


Ausfall eines Knotens<br />

● Wenn ein toter Knoten im LeafSet bemerkt wird:<br />

● Kontaktiere den äußersten lebendigen Knoten im LeafSet,<br />

um das LeafSet wieder aufzufüllen<br />

Mein LeafSet<br />

Dieser Knoten<br />

füllt mein<br />

LeafSet auf<br />

‐4 ‐3 ‐2 ‐1 0 +1 +2 +3 +4 +5 +6 +7 +8<br />

LeafSet von<br />

Knoten 4<br />

11.05.2009 Dominic Battré ‐ P2P Netzwerke 17


Messungen<br />

● Hop‐Anzahl:<br />

● Parameter b=4, L=16<br />

● also log(N) = log 16 (N)<br />

● Gute Übereinstimmung Analyse / Messungen<br />

Quelle: Antony Rowstron and Peter Druschel:<br />

Pastry: Scalable, decentralized object location<br />

and routing for large‐scale peer‐to‐peer systems<br />

11.05.2009 Dominic Battré ‐ P2P Netzwerke 18


Messungen<br />

● Abweichung von der Hop‐Distanz:<br />

Quelle: Antony Rowstron and Peter Druschel:<br />

Pastry: Scalable, decentralized object location and routing for large‐scale peerto‐peer<br />

systems<br />

● Geringe Abweichung von erwarteter Hop‐Distanz<br />

11.05.2009 Dominic Battré ‐ P2P Netzwerke 19


Messungen<br />

● Messung des sog. Stretch: Verhältnis zum optimalen Routing<br />

Quelle: Antony Rowstron and Peter Druschel:<br />

Pastry: Scalable, decentralized object location and routing for large‐scale peerto‐peer<br />

systems<br />

● Latenz nur ca. 40% langsamer als direktes Internet‐Routing<br />

11.05.2009 Dominic Battré ‐ P2P Netzwerke 20


Routing Geschwindigkeit<br />

● Für die Reihe 0 gibt es pro Feld N/2 b Möglichkeiten<br />

● D.h. die Wahrscheinlichkeit, einen nahen Knoten zu finden, ist hoch<br />

● Für Reihe 1 gibt es pro Feld N/2 2b Möglichkeiten<br />

● Für Reihe 2 gibt es pro Feld N/2 3b Möglichkeiten<br />

● …<br />

● Für den Nachbarn im LeafSet gibt es nur eine Möglichkeit sehr weit<br />

entfernt<br />

● Daraus folgt:<br />

■ Die ersten Schritte Shitt sind dbillig<br />

■ Die letzten Schritte sind teuer<br />

Mehr Schritte sind nicht viel teurer, da die<br />

teuren Schritte immer anfallen!<br />

11.05.2009 Dominic Battré ‐ P2P Netzwerke 21


● Qualität der Routing‐Tabellen<br />

Messungen<br />

Quelle: Antony Rowstron and Peter Druschel:<br />

Pastry: Scalable, decentralized object location and routing for large‐scale peer‐<br />

to‐peer systems<br />

b=4, L=16, 5.000 Knoten<br />

11.05.2009 Dominic Battré ‐ P2P Netzwerke 22


Messungen<br />

● Knotenausfall: von 5000 Knoten fallen 500 aus<br />

Quelle: Antony Rowstron and Peter Druschel:<br />

Pastry: Scalable, decentralized object location and routing for large‐scale peer‐<br />

to‐peer systems<br />

11.05.2009 Dominic Battré ‐ P2P Netzwerke 23


Vergleich Tapestry/Pastry<br />

● Basieren beide auf Prefix‐Routing<br />

● Pastry<br />

■ "Lockeres Verfahren": Routing‐Tabellen müssen nicht korrekt<br />

sein<br />

■ Leaf‐Set reicht zum korrekten Routing<br />

■ Tabellen nur zur Beschleunigung<br />

■ In der Praxis besser einsetzbar<br />

● Tapestry<br />

■ Routing‐Tabellen werden immer korrekt gehalten<br />

■ Dadurch beweisbare Eigenschaften<br />

■ Daher theoretisch interessant<br />

11.05.2009 Dominic Battré ‐ P2P Netzwerke 24


Vorlesung<br />

P2P Netzwerke<br />

6: Kademlia<br />

Dr. Dominic Battré<br />

Complex and Distributed <strong>IT</strong>‐Systems<br />

dominic.battre@tu‐berlin.de<br />

berlin de


Inhalte der Vorlesung (vorläufig)<br />

Einleitung<br />

• Was ist P2P?<br />

• Definition<br />

• Einsatzgebiete<br />

Unstrukturierte Netze<br />

• Napster<br />

• Gnutella<br />

• Super‐Peer Netzwerke<br />

• Small‐World Netzwerke etc.<br />

Fortgeschrittenes<br />

• Sicherheit<br />

Strukturierte Netze<br />

• <strong>Verteilte</strong> Hash‐Tabellen<br />

• Gr<strong>und</strong>lagen<br />

• Chord, CAN, Pastry, Kademlia<br />

• Programmieren von DHTs<br />

• Gradoptimierte Netzwerke<br />

• SkipNet, P‐Grid<br />

• Lastverteilung in strukturierten Netzen<br />

Anwendungen<br />

• OceanStore<br />

• BabelPeers<br />

• Amazon<br />

• Multicast<br />

28.05.2009 Dominic Battré ‐ P2P Netzwerke 2


Kademlia<br />

● Kademlia<br />

■ Petar Maymounkov and David Mazierès: "Kademlia: A Peerto‐peer<br />

information System Based on the XOR Metric", 1st<br />

International Workshop on Peer‐to‐peer Systems, 2002<br />

28.05.2009 Dominic Battré ‐ P2P Netzwerke 3


Kademlia<br />

● Populäre DHT (muTorrent, Ktorrent, Vuze, BitTorrent,<br />

Cspace, eDonkey 2000, MLDonkey, … siehe Wikipedia)<br />

● Geringer Wartungsaufwand für konsistente Routing<br />

Tabellen<br />

● Knoten haben genügend g Informationen <strong>und</strong> Flexibilität um<br />

Low‐Latency Pfade zu wählen<br />

● Parallele, asynchrone Anfragen, um Verzögerungen g durch<br />

Timeouts zu umgehen<br />

● Sehr Robust (u.A. gegen gg gewisse Denial of Service Angriffe)<br />

28.05.2009 Dominic Battré ‐ P2P Netzwerke 4


XOR Metrik<br />

● Distanz d(A, B) = A ⊕ B<br />

0<br />

1<br />

0<br />

1 0<br />

1<br />

0 1 0 1 0 1 0<br />

1<br />

000 001 010 011 100 101 110 111<br />

010<br />

100<br />

110 = 4 + 2 = 6<br />

28.05.2009 Dominic Battré ‐ P2P Netzwerke 5


XOR Metrik<br />

● Eigenschaften:<br />

■ d(X,X) = 0<br />

■ d(X,Y) = 0 → X=Y<br />

■ d(X,Y) = d(Y,X) → Anfragen kommen von Knoten, die in Routing Tabelle Tbll<br />

stehen können (→ Verbessern der Tabellen)<br />

■ d(X,Y) ≤ d(X,Z) + d(Z,Y) (,)<br />

■ Zu jedem Knoten gibt es genau einen Knoten mit Distanz d<br />

→ Routingpfade konvergieren am Ende<br />

→ Caching möglich<br />

■ Knoten im gleichen Unterbaum<br />

0<br />

1<br />

sind nah beieinander 0 1 0 1<br />

0 1 0 1 0 1 0 1<br />

000 001 010 011 100 101<br />

110 111<br />

28.05.2009 Dominic Battré ‐ P2P Netzwerke 6


Routing Tabelle<br />

000…<br />

1…<br />

0010…<br />

01…<br />

Quelle: Kademlia: A Peer‐to‐peer Information System Based on the XOR Metric<br />

Petar Maymounkov and David Mayières<br />

28.05.2009 Dominic Battré ‐ P2P Netzwerke 7


Routing Tabelle<br />

● Jeder Knoten kennt mindestens einen Knoten in jedem<br />

Unterbaum, sofern dieser Unterbaum einen Knoten enthält.<br />

● Knoten Id: 011001010011001<br />

● Unterbaum i: 01101…<br />

Präfix der<br />

Länge i<br />

(i+1)‐tes<br />

Bit geflippt<br />

28.05.2009 Dominic Battré ‐ P2P Netzwerke 8


Routing Beispiel<br />

● Routing von 0011… nach 1110…<br />

28.05.2009 Dominic Battré ‐ P2P Netzwerke 9


Routing Tabelle<br />

Quelle: Kademlia: A Peer‐to‐peer Information System Based on the XOR Metric<br />

Petar Maymounkov and David Mayières<br />

28.05.2009 Dominic Battré ‐ P2P Netzwerke 10


k‐Buckets<br />

● Ein k‐Bucket für jede Präfixlänge 0≤i


k‐Buckets<br />

● Bevorzugung alter Knoten verbessert Stabilität<br />

ne)<br />

noch onlin<br />

P(bei t + 60 n<br />

Knoten ist t Minuten online<br />

Quelle: Kademlia: A Peer‐to‐peer Information System Based on the XOR Metric<br />

Petar Maymounkov and David Mayières<br />

28.05.2009 Dominic Battré ‐ P2P Netzwerke 12


Nachrichten<br />

● PING<br />

■ Testet ob Knoten online ist<br />

● STORE<br />

■ Speichert Datum bei Knoten<br />

● FIND_NODE(160 NODE(160 Bit ID)<br />

■ Liefert die k nächstgelegenen bekannten Knoten<br />

(bezüglich XOR Metrik!)<br />

■ Aus einem k‐Bucket, wenn dieser voll ist; sonst aus mehreren<br />

● FIND_VALUE<br />

■ Wie FIND_NODE, aber liefert den Wert, wenn er bekannt ist<br />

28.05.2009 Dominic Battré ‐ P2P Netzwerke 13


Routing Protokoll – Single‐Threaded<br />

1 p.lookup(T)<br />

2 N = PriorityQueue(maximale Länge k)<br />

3 N.add(α nächste Knoten)<br />

4 solange nicht alle Knoten aus N erfolgreich gefragt:<br />

5 k = nächster, nicht gefragter Knoten aus N<br />

6 N' = k.FIND_NODE(T);<br />

7 wenn N' = {}: // Fehler<br />

8 lösche k aus N<br />

9 sonst:<br />

10 N = k nächste Knoten aus N <strong>und</strong> N'<br />

11 wenn N weniger als k Knoten enthält:<br />

12 markiere alle Knoten als ungefragt, goto 3<br />

13 liefere nächsten Knoten aus N<br />

28.05.2009 Dominic Battré ‐ P2P Netzwerke 14


Routing Protokoll –Multi‐Threaded<br />

(wie ich es implementieren würde ‐ Paper sehr ungenau)<br />

1 p.lookup(T)<br />

p( 2 N = PriorityQueue(maximale Länge k)<br />

3 N.add(α nächste Knoten)<br />

4 solange nicht alle Knoten aus N erfolgreich gefragt:<br />

5 warte, bis weniger als α Anfragen ausstehen<br />

6 p' = nächster, nicht gefragter Knoten aus N<br />

7 sende FIND_NODE(T) an p'<br />

8 wenn N weniger als k Knoten enthält:<br />

9 markiere alle Knoten als ungefragt, goto 3<br />

10 liefere nächsten Knoten aus N<br />

1 On FIND_NODE Time Out (k):<br />

2 Lösche k aus N<br />

1 On FIND_NODE Answer (k, N'):<br />

2 N = nächste k Knoten aus N <strong>und</strong> N'<br />

28.05.2009 Dominic Battré ‐ P2P Netzwerke 15


Routing Protokoll –Multi‐Threaded<br />

● Häufig α = 3 (sozusagen die Anzahl Worker Threads)<br />

● Geringere Latenz für höheren Netzwerkverkehr getauscht<br />

● Bevorzugt Routing durch Knoten mit geringer Latenz<br />

● Vermindert Verzögerungen, wenn Knoten offline gegangen<br />

sind<br />

● Korrektheit: s. Paper<br />

28.05.2009 Dominic Battré ‐ P2P Netzwerke 16


Datenspeichern<br />

● Store(key, value)<br />

■ Ermittle k nächste Knoten<br />

■ Sende STORE an jeden dieser Knoten<br />

● Softstate<br />

■ Neueinfügen jede St<strong>und</strong>e<br />

● Lookup<br />

■ FIND_VALUE statt FIND_NODE<br />

■ Daten werden beim zuletzt gefragten Knoten, der sie nicht<br />

speicherte, repliziert<br />

■ Lebenszeit des Replikats: exponentiell antiproportional zu<br />

Anzahl Knoten zwischen aktuellem <strong>und</strong> zur ID nächsten<br />

Knoten<br />

28.05.2009 Dominic Battré ‐ P2P Netzwerke 17


Join<br />

● Neuer Knoten u kennt Knoten w<br />

● u fügt w in entsprechenden k‐Bucket ein<br />

● u macht Lookup nach sich selbst <strong>und</strong> gewinnt neue Knoten<br />

● u wählt sich zufällige IDs in leeren k‐Buckets <strong>und</strong> routet<br />

dorthin<br />

● Während dieser Vorgänge fügt sich u automatisch in k‐<br />

Buckets bei anderen Knoten ein.<br />

28.05.2009 Dominic Battré ‐ P2P Netzwerke 18


Implementierungs Details<br />

● Pings werden nicht wirklich wie beschrieben verschickt (es<br />

wären zu viele)<br />

■ Pings werden verzögert, bis sinnvolle Nachricht geroutet<br />

werden muss<br />

■ Ein Replacement Cache hält Knoten, die ausgefallene Knoten<br />

kompensieren können<br />

● Statt Binärbaum: 2 b ‐ärer Baum, reduziert Tiefe<br />

28.05.2009 Dominic Battré ‐ P2P Netzwerke 19


Zusammenfassung<br />

● In echten Netzen erprobt<br />

● Robust<br />

● Logarithmisches Routing<br />

● Neuer Aspekt: Nebenläufige Anfragen<br />

28.05.2009 Dominic Battré ‐ P2P Netzwerke 20


Ranking nach scholar.google.com<br />

Netzwerk<br />

Chord (2001+2003) 7606<br />

CAN (2001) 5204<br />

Pastry (2001 + 2001) 5338<br />

Tapestry (2001) 1927<br />

Kademlia (2002) 929<br />

Referenzen nach scholar.google.com<br />

28.05.2009 Dominic Battré ‐ P2P Netzwerke 21


Vorlesung<br />

P2P Netzwerke<br />

7: Gradoptimierte Netzwerke<br />

Dr. Dominic Battré<br />

Complex and Distributed <strong>IT</strong>‐Systems<br />

dominic.battre@tu‐berlin.de<br />

berlin de


Inhalte der Vorlesung (vorläufig)<br />

Einleitung<br />

• Was ist P2P?<br />

• Definition<br />

• Einsatzgebiete<br />

Unstrukturierte Netze<br />

• Napster<br />

• Gnutella<br />

• Super‐Peer Netzwerke<br />

• Small‐World Netzwerke etc.<br />

Fortgeschrittenes<br />

• Sicherheit<br />

Strukturierte Netze<br />

• <strong>Verteilte</strong> Hash‐Tabellen<br />

• Gr<strong>und</strong>lagen<br />

• Chord, CAN, Pastry, Kademlia<br />

• Programmieren von DHTs<br />

• Gradoptimierte Netzwerke<br />

• SkipNet, P‐Grid<br />

• Lastverteilung in strukturierten Netzen<br />

Anwendungen<br />

• OceanStore<br />

• BabelPeers<br />

• Amazon<br />

• Multicast<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 2


Inhalt<br />

● Gradoptimierte Netzwerke (Überblick)<br />

■ Viceroy<br />

■ Distance Halving<br />

■ Koorde<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 3


Grad vs. Durchmesser<br />

● Bisher meist O(log N) Grad <strong>und</strong> O(log N) Durchmesser<br />

● Geht der Grad kleiner, ohne den Durchmesser zu erhöhen?<br />

Grad<br />

g,<br />

Durchmesser<br />

d,<br />

Knotenanzahl<br />

N<br />

Nach<br />

Mit<br />

d<br />

x Hops erreiche ich maximal g<br />

Knoten<br />

Hops erreiche ich jeden Knoten im Netz<br />

x<br />

Also : g<br />

d<br />

= N<br />

Nach d aufgelöst :log( g d ) = log( N),d.h.<br />

d =<br />

log(<br />

N<br />

)<br />

log( g)<br />

Es folgt : mit g = log(N) ist bester Durchmesser d =<br />

log(N)<br />

log(log(N))<br />

Mit konstantem Grad ist aber ein logarithmischer Durchmesser möglich!<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 4


Netzwerke mit konstantem Grad<br />

● Viceroy:<br />

■ Dalia Malkhi, Moni Naor and David Ratajczak: "Viceroy: A<br />

Scalable and Dynamic Emulation of the Butterfly", ACM<br />

Symp. Principles of Distributed Computing, 2002<br />

?<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 5


Viceroy<br />

● Idee: Butterfly‐Graph als Basis für P2P Netzwerke nehmen<br />

■ Resultiert in einem Netz mit konstantem Grad<br />

■ Ist aber ein relativ kompliziertes Verfahren<br />

● Interessante "Abfallprodukte":<br />

■ Wie schätze ich log(N)?<br />

■ Wie stelle ich besser verteilte Intervalle her?<br />

♦ Speziell: Maximal konstante Abweichung, also z.B. Länge des<br />

größten Intervalls ist max. 4 mal die Länge des kleinsten<br />

Intervalls<br />

♦ Lösung: Prinzip der mehrfachen Auswahl<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 6


Butterfly‐Graphen<br />

Level 3<br />

Level 2<br />

Level 1<br />

Level 0<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 7


Viceroy Verbindungsstruktur<br />

● Ein Ring mit allen Knoten<br />

■ successor, predecessor<br />

● Ein Ring pro Level<br />

■ nextonlevel, l prevonlevel<br />

l<br />

● Butterfly‐Kanten<br />

■ left: succ(l+1, s)<br />

■ right: succ(l+1, s+1/2 l )<br />

■ up: succ(l‐1, s)<br />

● Notation:<br />

■ succ(s) ist Nachfolger von s<br />

in allgemeinem Ring<br />

■ succ(l, s) ist Nachfolger von<br />

s auf Level l Ring<br />

Quelle: Dalia Malkhi, Moni Naor and David Ratajczak:<br />

"Viceroy: A Scalable and Dynamic Emulation of the Butterfly"<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 8


Routing in Viceroy<br />

● cur: Aktueller Knoten, x: Ziel<br />

● Routing in 3 Phasen<br />

● Phase 1: Gehe zu Level 1<br />

■ Solange dem up‐Pointer folgen, bis cur.level = 1<br />

● Phase 2: Nutzung der Butterfly‐Kanten<br />

■ Wenn der right‐Pointer existiert <strong>und</strong> nicht zu weit zeigt<br />

♦ Folge dem right‐Pointer<br />

■ Wenn der lf left‐Pointer existiert<br />

♦ Folge dem left‐Pointer<br />

■ Sonst mache mit Phase 3 weiter<br />

● Phase 3: Auf dem Ring suchen<br />

■ Folge dem successor‐Pointer, bis Ziel erreicht<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 9


Knotenankunft<br />

● Wähle eine ID s zufällig<br />

● In allgemeinen Ring einfügen<br />

■ Suche per Routing succ(s)<br />

■ Passe Zeiger an (succ, pred, succ.pred, pred.succ)<br />

● Levelauswahl<br />

■ N0 = 1/distanz(s,succ(s)) ‐‐ Schätzung der Anzahl Knoten im Netz<br />

■ Wähle einen Level l aus [1,…,floor(log N0)] uniform zufällig<br />

● In Level‐Ring einfügen<br />

■ Schrittweise Suche über allgemeinen Ring<br />

■ Passe Zeiger an (nextonlevel, predonlevel, etc.)<br />

● Butterfly‐Kanten einfügen<br />

■ up := succ(l‐1, s) (Single‐Stepping)<br />

■ left := succ(l+1, s) (Single‐Stepping)<br />

■ right := succ(l+1, s+(1/2<br />

l+1 ) (Lookup, dann Single‐Stepping) Stepping)<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 10


Abschätzung von log(N)<br />

● Sei d der Abstand zum Nachbarn<br />

● Wenn d=1/N, gilt log(N)=‐log(d)<br />

● Es gilt aber nur:<br />

■ 1/N 2 ≤ d ≤ log(N)/N mit hoher Wahrscheinlichkeit<br />

● Betrachte ‐log(d):<br />

■ Wenn d = 1/N 2 , dann ist ‐log(d) = ‐log(N ‐2 ) = 2log(N)<br />

■ Wenn d = log(N)/N, dann ist ‐log(d) = ‐log(log(N)*N ‐11 ) =<br />

log(N)‐log(log(N))<br />

● Daher gilt:<br />

■ 2log(N) ≥ ‐log(d) ≥ log(N) ‐ log(log(N))<br />

■ Also ist ‐log(d) eine gute Abschätzung für log(N)<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 11


Prinzip der mehrfachen Auswahl<br />

● Problem: wie erreiche ich konstanten Ein‐Grad?<br />

● Dazu müssen die Intervalle besser angepasst sein<br />

● Bisher: Abweichungen sind:<br />

■ um Faktor N kleiner<br />

■ um Faktor log(N) größer<br />

● Ziel:<br />

■ Kleinstes Intervall ist 1/2N, größtes ist 2/N<br />

■ Also Abweichung um max. Faktor 4 (konstant)<br />

● Lösung: mehrfache Auswahl<br />

■ Wähle bei der Knotenankunft zufällig ceil(log(N)) IDs<br />

■ Positioniere den Knoten in der Mitte des größten Intervalls<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 12


Netzwerke mit konstantem Grad<br />

● Distance Halving:<br />

■ Moni Naor, Udi Wieder: "Novel Architectures for P2P<br />

Applications: the Continuous‐Discrete Approach", SPAA 2003<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 13


Distance Halving<br />

● ID‐Bereich ist Intervall [0,1)<br />

● Diesmal nicht zyklisch!<br />

● Jeder Knoten bekommt ein Intervall nach dem Prinzip der<br />

mehrfachen Auswahl zugewiesen<br />

■ Also hat jeder Knoten ein Intervall der Größe<br />

1/2N ≤ I ≤ 2/N<br />

● Sei das Intervall des Knotens [I1, I2)<br />

● Für jedes I aus [I1, I2) hat der Knoten Zeiger auf<br />

I/2 sowie (1+I)/2<br />

● Es werden auch die Rückwärtskanten verwaltet!<br />

● Damit ist sowohl der Ein‐Grad aus auch der Aus‐Grad<br />

konstant!<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 14


Distance Halving<br />

I1/2 = 0.15<br />

I2/2 = 0.2 02<br />

(1+I1)/2 =<br />

0.65<br />

(1+I2)/2 =<br />

0.7<br />

0<br />

I1=0.3 I2=0.4<br />

K2 K3 Intervall von<br />

K4,K5,K6<br />

Knoten K1<br />

Routing‐Tabelle Tbll von K1 enthält Kanten zu jd jedem<br />

Peer in den Ziel‐Intervallen, plus die Rückwärts‐<br />

Kanten. Dies ergibt einen konstanten Grad!<br />

1<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 15


Routing in DH<br />

● Wie erreiche ich vom Knoten I=[I1, I2) eine ID, die im<br />

Intervall von Knoten J=[J1, J2) liegt?<br />

● Verfolge die Links‐Kanten beider Knoten:<br />

■ I trifft auf I1, I1/2, I1/4, I1/8, …<br />

■ J trifft auf J1, J1/2, J1/4, J1/8, …<br />

● Irgendwann liegen beide Zeiger in einem Intervall:<br />

O.B.d.A. sei J<br />

1<br />

> I1<br />

J1<br />

Gesucht ist ein k mit :<br />

k<br />

2<br />

k<br />

J1<br />

−<br />

I<br />

1<br />

2<br />

2<br />

⇔ ≤ ⇔<br />

k<br />

2 N J − I<br />

I1<br />

2<br />

− ≤ (maximale Intervallgröße)<br />

k<br />

2 N<br />

N<br />

k<br />

J<br />

1<br />

−<br />

I<br />

1<br />

≥ ⇔ 2 ≥ N ⇔<br />

k ≥<br />

log(<br />

N<br />

2<br />

2<br />

1 J<br />

1<br />

−<br />

I<br />

1<br />

Ab diesem k sind beide Pointer auf<br />

O(log N) Schritte benötigt!<br />

1<br />

1<br />

dem gleichen Knoten. D.h.es<br />

2<br />

)<br />

werden max.<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 16


Routing in DH<br />

Start<br />

Ziel<br />

Dieses Verfahren kann zu Überlast auf den vorderen Knoten<br />

führen!<br />

Gibt es noch alternative Wege?<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 17


Routing in DH<br />

1 Left‐Routing(Start, Ziel)<br />

2 if Start <strong>und</strong> Ziel benachbart then<br />

3 Leite Nachricht von Start nach Ziel<br />

4 else<br />

5 Neuer‐Start = Links‐Zeiger(Start)<br />

6 Neues‐Ziel = Links‐Zeiger(Ziel)<br />

7 Sende Nachricht von Start nach Neuer‐Start<br />

8 Left‐Routing(Neuer‐Start, Neues Ziel)<br />

9 Sende Nachricht von Neues‐Ziel nach Ziel<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 18


Alternative Routen<br />

● Beobachtung:<br />

■ I/2‐J/2 = (I‐J)/2<br />

■ (1+I)/2‐(1+J)/2 ( ) = (I‐J)/2<br />

● D.h., egal ob ich einen Doppel‐Sprung nach Links oder nach<br />

Rechts mache:<br />

■ Die Restdistanz wird immer halbiert<br />

● Daher:<br />

■ Zur Lastbalancierung wird die Reihenfolge zufällig bestimmt<br />

■ zB:Recht z.B.: – Links – Links – Rechts – Links etc.<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 19


Netzwerke mit konstantem Grad<br />

● Koorde:<br />

■ M. Frans Kaashoek, David R. Karger: "Koorde: A simple<br />

degree‐optimal distributed hash table", Proceedings of the<br />

2nd International Workshop on Peer‐to‐Peer Systems (IPTPS<br />

'03), 2003<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 20


Koorde<br />

● Betrachte folgende Operationen auf Bit‐Strings:<br />

■ Shuffle: Bits um eine Stelle zyklisch rotieren<br />

■ Shuffle‐Exchange: Bits um eine Stelle zyklisch rotieren, dabei<br />

ein Bit invertieren<br />

Shuffle<br />

Shuffle‐Exchange<br />

h<br />

1 0 1 1 0 1 0 1 1 0 1 1 0 1 0 1<br />

Exchange<br />

0 1 1 0 1 0 1 1<br />

0 1 1 0 1 0 1 0<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 21


Koorde<br />

Jd Jede Bitfolge kann über<br />

Shuffle (‐Exchange) Operationen<br />

in jede andere Bitfolge übersetzt<br />

werden<br />

Quelle: Mahlmann, Schindelhauer<br />

Peer‐to‐Peer Netzwerke<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 22


Der DeBruijn Graph<br />

SE<br />

100<br />

S<br />

S<br />

000 001<br />

SE<br />

SE<br />

S<br />

010 101<br />

SE<br />

S<br />

S<br />

S<br />

011 110<br />

SE<br />

SE<br />

SE<br />

111<br />

Der Graph ist verb<strong>und</strong>en <strong>und</strong> hat<br />

konstanten Ein‐ <strong>und</strong> Ausgrad!<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 23


DeBruijn Graph als P2P Netz<br />

● Knoten werden auf Ring angeordnet (wie Chord)<br />

● Statt Chord‐Fingerzeigern werden DeBruijn‐Kanten<br />

eingesetzt<br />

000<br />

111<br />

001<br />

110<br />

010<br />

101<br />

011<br />

100<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 24


Imaginäre Knoten<br />

● Peer‐to‐Peer Netzwerke haben selten genau 2 m Knoten<br />

● Im Beispiel m=4 ist Netz schon bei 16 Knoten voll<br />

● Daher m=128 oder m=160<br />

● Sei n tatsächliche Knotenanzahl im Netz, dann gibt es<br />

2 m – n virtuelle Knoten<br />

● Kanten auf virtuelle Peers werden auf vorangehenden<br />

echten Knoten umgebogen (dies ist der für den virtuellen<br />

Peer verantwortliche Knoten)<br />

● Äquivalent: Jeder Peer ist für die nachfolgenden virtuellen<br />

Peers zuständig<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 25


Wohin zeigen die DeBruijn‐Kanten?<br />

Shuffle mit führender 0 Shuffle mit führender 1<br />

0 0 1 1 0 1 0 1 1 0 1 1 0 1 0 1<br />

0 1 1 0 1 0 1 0<br />

0 1 1 0 1 0 1<br />

ergibt (2*x)<br />

ergibt (2*x+1) mod 2 m<br />

1<br />

SE mit führender 0 SE mit führender 1<br />

0 0 1 1 0 1 0 1 1 0 1 1 0 1 0 1<br />

0 1 1 0 1 0 1<br />

1<br />

0 1 1 0 1 0 1<br />

0<br />

ergibt (2*x+1)<br />

ergibt (2*x) mod 2 m<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 26


Wohin zeigen die DeBrujin‐Kanten?<br />

● Mit hoher Wahrscheinlichkeit zeigen<br />

2*x mod 2 m<br />

<strong>und</strong><br />

2*x + 1 mod 2 m<br />

auf den selben realen Knoten.<br />

● Daher nur eine DeBrujin Kante pro Knoten<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 27


Routing<br />

● Jeder Knoten p kennt<br />

■ Vorgänger<br />

■ Nachfolger<br />

■ Knoten 2*p mod 2 m , bzw. Knoten, der dafür verantwortlich ist<br />

● Datenzuordung wie bei Chord (Datum bei Nachfolger von ID<br />

gespeichert) ih ● Routing zwischen 2 m wird auf reale Knoten abgebildet<br />

■ Route über DB DeBrujin Kanten zu nächstem äht Knoten<br />

■ Erreichen in jedem Schritt Knoten, der für entsprechenden<br />

imaginären Knoten zuständig ist, oder<br />

■ Landen vor Knoten, der für entsprechenden imaginären<br />

Knoten zuständig ist, dann auf Ring Nachricht weiterleiten<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 28


Routing in Koorde<br />

1 n.lookup(k, kshift, i)<br />

2 if k in (n, successor]<br />

3 return successor;<br />

4 else if i in (n, successor] then<br />

5 return d.lookup(k, (kshift o 0) mod 2^m,<br />

(i o topBit(kshift)) mod 2^m)<br />

6 else<br />

7 return successor.lookup(k, kshift, i)<br />

Erklärungen:<br />

n<br />

Aktueller Knoten<br />

k<br />

Key, zu dem geroutet wird<br />

successor Nachfolger von n auf dem Ring<br />

d<br />

Vorgänger von 2n (DeBruijn‐Kante)<br />

i<br />

Imaginärer DeBruijn‐Knoten<br />

kshift Anfangs kshift=k, dann immer weiter geshiftet<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 29


Imaginärer Startknoten<br />

● Routing‐Schritte bisher:<br />

■ Anzahl Bits im Identifier (m)<br />

■ plus Anzahl successor‐Schritte<br />

● Wie erreiche ih ihl ich log(N) (N)Routing?<br />

● In der Wahl des imaginären Startknotens habe ich Freiheiten:<br />

■ die unteren Bits können frei gewählt werden<br />

■ Ich kann sie an die oberen Bits des Schlüssels anpassen:<br />

durch n vorgegeben<br />

frei<br />

i<br />

0 0 1 1 0 1 0 1<br />

k<br />

1 0 1 0 1 1 1 0<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 30


Koorde<br />

0 15 1<br />

14 2<br />

13 3<br />

12<br />

4<br />

11<br />

5<br />

10<br />

6<br />

9<br />

8<br />

7<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 31


Koorde<br />

0 15 1<br />

14 2<br />

13 3<br />

12<br />

4<br />

11<br />

5<br />

10<br />

6<br />

9<br />

8<br />

7<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 32


Koorde<br />

0 15 1<br />

14 2<br />

13 3<br />

12<br />

4<br />

11<br />

5<br />

10<br />

6<br />

9<br />

8<br />

7<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 33


Koorde<br />

15 0 1 Route von 13 nach 12:<br />

12<br />

14 2<br />

13 3<br />

4<br />

Quelle kann sein:<br />

1101 (13)<br />

1110 (14)<br />

Ziel ist<br />

1100 (12)<br />

11<br />

10<br />

5<br />

Imaginäre Route:<br />

1110 ‐> (SE) ‐> 1100<br />

14 ‐> 12<br />

6<br />

Tatsächliche Route:<br />

9 7<br />

13 ‐> 9 ‐> 11 (‐> 13)<br />

8<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 34


Zusammenfassung<br />

● Gradoptimierte Netze:<br />

■ Bei Grad O(1) ist Durchmesser O(log(N)) erreichbar!<br />

● Ansätze:<br />

■ Viceroy: Butterfly‐Graph simulieren<br />

■ Distance Halving: Distanz in jedem Schritt halbieren<br />

■ Koorde: DeBruijn‐Graph simulieren<br />

● Bewertung:<br />

■ Interessante Ansätze, in der Praxis nicht erprobt<br />

■ Stabilisierung, Lokalität etc. schwierig bzw. nicht erforscht<br />

■ Höherer Grad für Zusammenhalt durchaus wünschenswert<br />

● "Abfallprodukte":<br />

■ Schätzung von log(N)<br />

■ Prinzip der mehrfachen Auswahl<br />

02.06.2009 Dominic Battré ‐ P2P Netzwerke 35


Vorlesung<br />

P2P Netzwerke<br />

8: SkipNet, P‐Grid<br />

Dr. Dominic Battré<br />

Complex and Distributed <strong>IT</strong>‐Systems<br />

dominic.battre@tu‐berlin.de<br />

berlin de


SkipNet<br />

● Nicholas J.A. Harvey, Michael B. Jones, Stefan Saroiu,<br />

Marvin Theimer, Alec Wolman: "SkipNet: A Scalable Overlay<br />

Network with Practical Locality Properties", Proceedings of<br />

US<strong>IT</strong>S, 2003<br />

?<br />

● James Aspnes, Gauri Shah: "Skip Graphs" , Fourteenth<br />

Annual ACM‐SIAM Symposium on Discrete Algorithms,<br />

2003, pp. 384–393<br />

● William Pugh: "Skip Lists", Commun. ACM, 33:6, pp. 668‐<br />

676, 1990<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 2


Probleme mit DHTs<br />

● DHTs "zerhacken" die Daten (wie normale Hash‐Tabellen<br />

auch)<br />

● Daten "Meyer" <strong>und</strong> "Meier" landen auf völlig<br />

unterschiedlichen Knoten<br />

● Daher sind keine Bereichsanfragen möglich (z.B.: Alle Daten<br />

die mit "M" beginnen)<br />

● Eine Lösung dafür: SkipNet<br />

● SkipNet basiert auf der Idee der Skip‐Graphen, die<br />

wiederum auf Skip‐Listen basieren<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke<br />

3


Skip‐Listen<br />

● Ausgangspunkt: Verkettete Liste, aufsteigend sortiert<br />

● Hier: direkt zu einem Ring verb<strong>und</strong>en<br />

● Suche ist in nur in linearer Zeit möglich<br />

● Zur Beschleunigung: Weiter entfernte Listenelemente<br />

"verzeigern"<br />

A C D G I L X<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 4


Skip‐Listen<br />

● Elemente bekommen eine zufällige Höhe<br />

● Zusätzliche Verzeigerung in jeder Höhe<br />

A<br />

I<br />

A<br />

D<br />

I<br />

X<br />

A C D G I L X<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 5


Skip‐Listen<br />

● Skip‐Liste als P2P Netzwerk?<br />

● Jedes Listenelement ist ein Knoten?<br />

● Wie route ich von C nach X?<br />

● Probleme: Knotenausfälle, Last<br />

A<br />

I<br />

A<br />

D<br />

I<br />

X<br />

A C D G I L X<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 6


Skip‐Listen Skip‐Graphs<br />

● Idee: Durch weitere Verbindungen Zusammenhang stärken<br />

Höhe<br />

4<br />

A L<br />

3<br />

G C A L D<br />

2<br />

C<br />

G<br />

A D L I X<br />

1<br />

A C D G L I X<br />

0<br />

A C D G I L X<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 7


Routing<br />

1 // route a msg by name ID<br />

2 RouteByNameID(msg)<br />

3 h = localNode.maxHeight<br />

4 while h >= 0<br />

5 nbr = localNode.RouteTable[h]<br />

l 6 if nbr.nameID in [localNode.nameID, msg.nameID]<br />

7 SendToNode(msg, nbr)<br />

8 return<br />

9 h = h ‐ 1;<br />

10 // h


Skip‐Net: Num‐ID<br />

A L<br />

0 1<br />

C G A L D<br />

0 1 0<br />

0<br />

1<br />

0 1<br />

0 0 1 1 0<br />

1 0 1 0 0 1 1<br />

0 0 0 0 1 0 1<br />

A C D G I L X<br />

C<br />

G<br />

A D L<br />

I<br />

X<br />

0 0 1<br />

1<br />

1<br />

0 1<br />

A C D G L I X<br />

0 0 0 0<br />

0 1<br />

1<br />

A C D G I L X<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 9


In welche Ringe wird ein Knoten<br />

aufgenommen?<br />

● numID eines Knotens bestimmt die Ring‐Teilnahme<br />

● Zufällige Bitfolge (128 Bit)<br />

● Wird beim Start vom Knoten ausgewürfelt<br />

● Wie findet der Knoten die Ringe?<br />

■ Ein Knoten des Netzwerkes muss bekannt sein<br />

■ Dieser wird kontaktiert<br />

■ Über eine Nachricht wird ein Knoten gesucht, dessen numID<br />

möglichst weit mit der des neuen Knotens übereinstimmt<br />

■ Routing nach numID<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 10


Routing nach numID<br />

● A will an 0111 routen<br />

Höhe<br />

4<br />

A<br />

L<br />

3<br />

000 001 010 011<br />

G C A L D<br />

2<br />

1<br />

00<br />

C G<br />

01<br />

A D L<br />

10<br />

I<br />

11<br />

X<br />

0<br />

A C D G L<br />

1<br />

I X<br />

0<br />

A C D G I L X<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 11


Routing nach numID<br />

● Statusinformationen:<br />

■ ringLvl (Anfangswert 0)<br />

♦ Auf welchem Level bewegt sich die Nachricht?<br />

■ startNode (Anfangswert nil)<br />

♦ Bei welchem Knoten begann der Durchlauf im aktuellen Ring?<br />

■ bestNode (Anfangswert nil)<br />

♦ Welcher Knoten ist der bisher dichteste?<br />

■ finalDestination (Anfangswert false)<br />

♦ Hat die Nachricht bereits den Zielknoten erreicht?<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 12


Routing nach numID<br />

1 // route msg via numeric ID<br />

2 RouteByNumericID(msg)<br />

3 if msg.numID == localNode.numID || msg.finalDestination<br />

4 DeliverMessage(msg)<br />

5 return<br />

6 if localNode == msg.startNode<br />

7 msg.finalDestination = true<br />

8 SendToNode(msg.bestNode)<br />

9 return<br />

10 h = CommonPrefixLen(msg.numID, localNode.numID)<br />

11 if h > msg.ringLvl<br />

g<br />

12 msg.ringLvl = h<br />

13 msg.startNode = msg.bestNode = localNode<br />

14 else if |localNode.numID‐msg.numID| <<br />

|msg.bestNode.numID‐msg.numID|<br />

15 msg.bestNode = localNode<br />

16 nbr = localNode.RouteTable[msg.ringLvl]<br />

17 SendToNode(nbr)<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 13


IDs in SkipNet<br />

● Jeder Knoten hat eine Name‐ID <strong>und</strong> eine Num‐ID<br />

● Die Name‐ID ist frei wählbar, die Num‐ID ist eine gewürfelte<br />

Bitfolge<br />

● Die Name‐ID bestimmt die Reihenfolge im Root‐Ring<br />

● Die Num‐ID bestimmt, in welchen Ringen auf höheren<br />

Ebenen der Knoten partizipiert<br />

● Routing ist über beide IDs möglich<br />

● Name‐IDs können ungleich verteilt sein<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 14


Hinzufügen von Knoten<br />

● Über bekannten Knoten wird Nachricht an die Num‐ID des neuen<br />

Knotens geschickt<br />

● Dieser kennt alle Ringe, in die der neue Knoten eingefügt wird<br />

● Einfügen von Oben nach unten<br />

1 While ( current Level > 0 )<br />

2 If Name Id between current Node and next on level<br />

3 Insert between;<br />

4 current level = current level – 1;<br />

5 Else<br />

6 Forward to next node on current level<br />

● Aber: Die Nachbarn werden zunächst nur aufgesammelt<br />

● Am Ende wird in einer Operation überall der Insert durchgeführt<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 15


Stabilisierung des Root‐Rings<br />

● Im Root‐Ring Liste von x Nachfolgern sammeln (z.B. x=8)<br />

● Wenn der Nachfolger ausfällt, ist der neue Nachfolger<br />

bekannt<br />

● Neuer Nachfolger wird über seinen neuen Vorgänger<br />

informiert<br />

● Liste der Nachfolger wird jeweils an den Vorgänger<br />

weitergegeben gg<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 16


Stabilisierung der höheren Ringe<br />

● In den höheren Ringen ist nur jeweils ein Nachfolger<br />

bekannt<br />

● Wenn dieser ausfällt, ist der Ring zunächst defekt<br />

● Routing ist trotzdem möglich<br />

■ wie?<br />

● Ein höherer Ring wird repariert, indem der neue Nachfolger<br />

im niedrigeren Ring gesucht wird<br />

● D.h., die Ringe werden nacheinander "von unten nach<br />

oben" repariert<br />

● Alternative: Auch in höheren Ringen mehrere Nachfolger<br />

speichern<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 17


Aufwand<br />

● Routing nach name ID:<br />

■ O(log N)<br />

● Routing nach num ID:<br />

■ O(log N)<br />

● Intuition:<br />

■ Die Zeiger in der Routing‐Tabelle sind exponentiell verteilt,<br />

daher wird in jedem Schritt die Hälfte der restlichen Distanz<br />

übersprungen<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 18


Zusammenfassung<br />

● SkipNet: Strukturiertes P2P Netzwerk ohne Hashing<br />

● Daten werden sortiert auf einem Ring abgelegt<br />

● Zur schnelleren Suche wird der Ring rekursiv in Teilringe<br />

aufgeteilt<br />

● Knoten haben eine Name‐ID <strong>und</strong> eine numerische ID<br />

● Suche ist nach beiden IDs möglich<br />

● Name‐ID Suche durchläuft die Ringe von oben nach unten<br />

● Num‐ID Suche durchläuft die Ringe von unten nach oben<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 19


P‐Grid<br />

● Karl Aberer, Anwitaman Datta, Manfed Hauswirth, Roman<br />

Schmidt: "Das P‐Grid‐Overlay‐Netzwerk: Von einem einfachen<br />

Prinzip zu einem komplexen System", Datenbank‐Spektrum 13,<br />

2005<br />

● Karl Aberer: "P‐Grid: A Self‐Organizing gAccess Structure for P2P<br />

Information Systems", Sixth International Conference on<br />

Cooperative Information Systems (CoopIS 2001), Trento, Italy,<br />

Lecture Notes in Computer Science 2172, Springer Verlag,<br />

Heidelberg, 2001.<br />

● www.p‐grid.org<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 20


P‐Grid<br />

● Gr<strong>und</strong>idee:<br />

■ Shlü Schlüssel lwerden nicht ih gehasht<br />

h<br />

■ Schlüssel werden auf binäre Zeichenketten abgebildet (ASCII‐<br />

/Huffman‐Kodierung)<br />

■ Routing erfolgt über einen Binärbaum<br />

0 1<br />

0 1 0 1<br />

0 1 0 1 0 1 0 1<br />

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 21


Aufbau von P‐Grid<br />

0 1<br />

Buckets mit jeweils<br />

gleichen Datenmengen<br />

Zugeordnete Peers<br />

0 1 0 1<br />

0 1 0 1 0 1<br />

0 1 0 1 0 1<br />

0 1 0 1<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 22


Routing in P‐Grid<br />

● Die ID eines Peers ist seine eindeutige Kennung im Netz<br />

■ Kennung hat nichts mit der Position im Baum zu tun<br />

● Die Position wird dynamisch festgelegt <strong>und</strong> verändert<br />

● Die Position nennt sich der Pfad des Peers<br />

● Der Pfad ist eine binäre Zeichenkette beliebiger Länge<br />

● Für jedes Präfix seines Pfades hat der Peer einen (oder<br />

mehrere) Zeiger auf andere Peers mit<br />

■ gleichem Präfix aber dann anderer Fortsetzung<br />

(0 → 1, 1 → 0)<br />

■ falls so ein Peer existiert<br />

● Woran erinnert das?<br />

● Wie funktioniert das Routing?<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 23


Routing in P‐Grid<br />

Peer‐Identifikation<br />

Datenschlüssel<br />

1 : 2 Routing‐Tabelleneintrag<br />

0 1<br />

00 01<br />

2 1*<br />

0 : 1<br />

1 00*<br />

1 : 2<br />

01 : 3<br />

7 00*<br />

1 : 6<br />

01 : 8<br />

010<br />

011<br />

4 010* 3 011*<br />

1 : 2<br />

00 : 7<br />

011 : 3<br />

5 010*<br />

1 : 6<br />

00 : 1<br />

011 : 4<br />

8 011*<br />

6 1*<br />

0 : 3<br />

1 : 6 1 : 2 Quelle: K. Aberer, et al.:<br />

00 : 1 00 : 1 "Das P‐Grid‐Overlay‐Netzwerk: Von einem<br />

011 : 8 010 : 5 einfachen Prinzip zu einem komplexen System"<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 24


Routing in P‐Grid<br />

● Präfixrouting wie bei Pastry / Tapestry<br />

● Pfade können aber beliebig lang werden<br />

■ Maximale Routingtabellen‐Größe garantiert nicht mehr<br />

O(log N)<br />

● Routing ist trotzdem schnell:<br />

■ Zufällige Knoten werden für Routingtabelleneinträge gewählt<br />

■ Es können häufig mehrere Bits in einem Schritt aufgelöst<br />

werden<br />

● Bereichsanfragen erlaubt<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 25


Aufbau von P‐Grid<br />

● Gr<strong>und</strong>idee:<br />

■ Knoten sind über unstrukturiertes Netz verb<strong>und</strong>en<br />

■ Neuer Index (P‐Grid Struktur) wird über dieses Netz gelegt<br />

● Bootstrapping: t Baum nur mit Wurzel, alle Peers <strong>und</strong> alle Daten Dt<br />

befinden sich in der Wurzel<br />

● Rekursive Aufteilung:<br />

■ Solange genügend Peers in einem Bucket:<br />

■ Teile Bucket in zwei Hälften (0‐Pfad, 1‐Pfad)<br />

■ Verteile Peers zahlenmäßig entsprechend der Datenmengen<br />

● Dann dynamische Operationen<br />

■ Peers kommen <strong>und</strong> gehen<br />

■ Daten kommen <strong>und</strong> gehen<br />

■ hier nicht weiter betrachtet<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 26


Zusammenfassung<br />

Strukturierte P2P Netze<br />

●<br />

●<br />

●<br />

●<br />

●<br />

Chord<br />

■ log(N)‐Routing bei bil log(N)‐Grad<br />

■ Intuitiv <strong>und</strong> einfach, gut zum Einstieg<br />

CAN<br />

■ Fülle Interessanter Ideen, aber<br />

polynomielles Routing<br />

Pastry, Tapestry<br />

■ Ähnlich zu Chord, berücksichtigen<br />

Lokalität kl<br />

■ Pastry: Praktisch gut einsetzbar,<br />

Tapestry: Theorie interessant<br />

Kademlia<br />

■ Fehlertollerant, parallele Lookups<br />

Viceroy, Distance Halving, Koorde<br />

■ Gradoptimierte Netze<br />

■ Interessante Ansätze, aber nicht<br />

praxistauglich<br />

■ Wichtige Abfallprodukte<br />

●<br />

●<br />

SkipNet<br />

■ Interessante Alternative zum<br />

Hashing, aber keine Lokalität<br />

P‐Grid<br />

■ Präfix‐Ansatz ohne Hashing,<br />

Lokalität könnte berücksichtigt<br />

werden<br />

■ Konzept des Bootstrappings eines<br />

Netzwerkes<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 27


Zusammenfassung<br />

Strukturierte P2P Netze<br />

●<br />

●<br />

●<br />

●<br />

●<br />

Chord<br />

■ log(N)‐Routing bei bil log(N)‐Grad<br />

■ Intuitiv <strong>und</strong> einfach, gut zum Einstieg<br />

CAN<br />

■ Fülle Interessanter Ideen, aber<br />

polynomielles Routing<br />

Pastry, Tapestry<br />

■ Ähnlich zu Chord, berücksichtigen<br />

Lokalität kl<br />

■ Pastry: Praktisch gut einsetzbar,<br />

Tapestry: Theorie interessant<br />

Kademlia<br />

■ Fehlertollerant, parallele Lookups<br />

Viceroy, Distance Halving, Koorde<br />

■ Gradoptimierte Netze<br />

Hashing<br />

■ Interessante Ansätze, aber nicht<br />

praxistauglich<br />

■ Wichtige Abfallprodukte<br />

●<br />

●<br />

SkipNet<br />

■ Interessante Alternative zum<br />

Hashing, aber keine Lokalität<br />

P‐Grid<br />

■ Präfix‐Ansatz ohne Hashing,<br />

Lokalität könnte berücksichtigt<br />

werden<br />

■ Konzept des Bootstrappings eines<br />

Netzwerkes<br />

Kein<br />

Hashing<br />

11.06.2009 Dominic Battré ‐ P2P Netzwerke 28


Vorlesung<br />

P2P Netzwerke<br />

9: Lastverteilung<br />

Dr. Dominic Battré<br />

Complex and Distributed <strong>IT</strong>‐Systems<br />

dominic.battre@tu‐berlin.de<br />

berlin de


Inhalte der Vorlesung (vorläufig)<br />

Einleitung<br />

• Was ist P2P?<br />

• Definition<br />

• Einsatzgebiete<br />

Unstrukturierte Netze<br />

• Napster<br />

• Gnutella<br />

• Super‐Peer Netzwerke<br />

• Small‐World Netzwerke etc.<br />

Fortgeschrittenes<br />

• Sicherheit<br />

Strukturierte Netze<br />

• <strong>Verteilte</strong> Hash‐Tabellen<br />

• Gr<strong>und</strong>lagen<br />

• Chord, CAN, Pastry, Kademlia<br />

• Programmieren von DHTs<br />

• Gradoptimierte Netzwerke<br />

• SkipNet, P‐Grid<br />

• Lastverteilung in strukturierten Netzen<br />

Anwendungen<br />

• OceanStore<br />

• BabelPeers<br />

• Amazon<br />

• Multicast<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 2


Inhalt Lastbalancierung<br />

● Welche Last balancieren?<br />

● Balancierungseigenschaften von DHTs<br />

● Techniken:<br />

■ I: Replikation, Bereichsgrenzen ändern<br />

■ II: Power of Two Choices<br />

■ III: Virtuelle Peers<br />

■ IV: Relokation<br />

● Erkennung von Ungleichgewichten<br />

■ Schätzverfahren<br />

● Lastbalancierung in SkipNet<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 3


Literatur<br />

● John Byers, Jeffrey Cosidine, Michael Mitzenmacher:<br />

"Simple Load Balancing for Distributed Hash Tables",<br />

Second International Workshop on Peer‐to‐Peer Systems,<br />

2003<br />

● André Höing: "Lastbalancierung von Speicherbedarf <strong>und</strong><br />

Anfragen in BabelPeers", Diplomarbeit, Universität<br />

Paderborn, 2006<br />

● Prasanna Ganesan, Mayank Bawa, Hector Garcia‐Molina:<br />

"Online Balancing of Range‐Partitioned Data with<br />

Applications to Peer‐to‐Peer Systems", Proceedings of the<br />

30th VLDB Conference, 2004<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 4


Lastverteilung<br />

● Welche Ressource ist das Problem?<br />

■ Ressourcen:<br />

♦ Netzwerklast: Bandbreitenverbrauch<br />

♦ Speicherlast: Festplattenverbrauch / Hauptspeicher<br />

♦ Rechenlast: Verbrauch von CPU‐Zyklen<br />

■ Netzwerklast <strong>und</strong> Rechenlast sind momentbezogen<br />

■ Speicherlast ist dauerhaft<br />

■ Welche Last das Problem ist, ist anwendungsabhängig<br />

● Was soll erreicht werden?<br />

■ Ist die ideale Lastverteilung die Gleichverteilung?<br />

■ Oder eher angepasst gp an die Leistungfähigkeit g des Knotens?<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 5


Lastverteilung beim Routen<br />

● Muss jeder Peer in etwa die gleiche Anzahl Nachrichten<br />

weiterleiten?<br />

● Normalerweise durch die Symmetrie des Netzwerkaufbaus<br />

gegeben<br />

● Probleme evtl. bei:<br />

■ Viceroy: höheren Schichten evtl. mehr belastet<br />

■ Skip‐Listen als P2P‐Netzwerk (daher Skip‐Graphen)<br />

p ■ Super‐Peer Netzwerken<br />

● Wird von meisten P2P Netzwerken sichergestellt <strong>und</strong> hier<br />

nicht weiter betrachtet<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 6


Lastbalancierung von DHTs<br />

● DHTs haben folgende Annahme:<br />

■ Die Bereiche der Knoten sind ähnlich groß<br />

■ Prinzip der mehrfachen Auswahl<br />

■ Die Hashfunktion liefert jede ID mit gleicher<br />

Wahrscheinlichkeit<br />

■ Damit sind die Daten "gleichmäßig" über die Knoten verteilt<br />

● Probleme:<br />

■ "gleichmäßig" heißt nicht, dass alle genau gleich viele Daten<br />

haben<br />

■ Nicht jeder Knoten kann gleich viel speichern<br />

■ Evtl. sind die Daten nicht gleichverteilt (andere Hashfkt)<br />

■ Hot‐Spots: Schlüssel mit sehr vielen Daten<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 7


Ungleiche Last<br />

● Beispiel‐Verteilung:<br />

Anzahl<br />

Elemente<br />

bzw. Größe<br />

bzw. Abrufe<br />

P1 P2 P3 P4 P5<br />

ID‐Raum<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 8


Ungleiche Last<br />

● Beispiel‐Verteilung:<br />

Anzahl<br />

Elemente<br />

bzw. Größe<br />

bzw. Abrufe<br />

P1 P2 P3 P4 P5<br />

ID‐Raum<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 9


Ungleiche Last<br />

● Ziel ist nicht mehr, dass jeder Knoten einen gleichen Teil vom IDbk<br />

bekommt<br />

Raum<br />

● Sondern: Gleich viel Last!<br />

■ dh:großer d.h.: ID‐Raum mit wenig Last<br />

■ oder kleiner ID‐Raum mit großer Last<br />

● Problem allerdings:<br />

■ Hot‐Spots, d.h. Schlüssel mit sehr viel Last<br />

■ Diese können nicht aufgelöst werden, wenn nur die ID‐Bereiche<br />

verschoben werden<br />

● Lösungsansätze<br />

■ Schlüssel eindeutig machen Range‐Queries<br />

■ Vergleiche mit P‐Grid Lösung, bzw. mit SkipNet<br />

■ Lösungen in der Anwendung: z.B. Datei in Blöcke aufteilen<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 10


● Bereichsgrenzen anpassen<br />

Techniken I<br />

■ Besonders belastete Bereiche verkleinern<br />

■ Unausgelastete Bereiche vergrößern<br />

■ Kann Hot‐Spots an einer ID nicht ausgleichen<br />

■ Schiebt "Last‐Wellen" um den Ring<br />

■ Daher: wenig ausgelastete Knoten neu Positionieren<br />

Anzahl<br />

Elemente<br />

bzw. Größe<br />

bzw. Abrufe<br />

P1 P2 P3 P4 P5<br />

ID‐Raum<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 11


Techniken I<br />

● Replikation<br />

■ Systemweiter Replikations‐Faktor<br />

♦ z.B. jedes Datum auf 4 Knoten<br />

♦ "Glättet" die Speicherlast, aber erhöht sie<br />

♦ wird allerdings sowieso benötigt<br />

♦ Wenn bei Abfragen zufällig ein Replika‐Knoten ausgewählt wird,<br />

wird auch Bandbreite / CPU balanciert<br />

♦ Allerdings immer nur begrenzt<br />

■ Replikation auf Anfragepfaden bei häufigen Anfragen<br />

♦ hier nicht ihtweiter bt betrachtet htt<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 12


Techniken II:<br />

Power of Two Choices<br />

● Idee: Verwende mehrere Hash‐Funktionen h 1 bis h d<br />

● Speichern eines Datums mit Schlüssel k:<br />

■ Kontaktiere parallel alle Peers h 1 (k) bis h d (k)<br />

■ Speichere das Dt Datum auf dem am wenigsten ausgelasteten t Peer<br />

■ Speichere auf allen anderen Peers Verweise zum Datum<br />

● Beim Abrufen eines Datums mit Schlüssel k:<br />

■ Wähle ein i aus [1,d] zufällig<br />

■ Kontaktiere Peer h i(k)<br />

● Es kann alles balanciert werden:<br />

Speicher, CPU, oder Bandbreite<br />

● Alternative: keine Verweise speichern, sondern alle Fragen<br />

● Wichtig:<br />

■ Wit Weiterleitung lit muss billiger als selber machen sein<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 13


Techniken III:<br />

Virtuelle Peers<br />

● Jeder physische Knoten hat mehrere virtuelle Peers<br />

● Naiv:<br />

■ Wenn Last zu hoch: Stoppe einige der Peers<br />

■ Wenn Last zu klein: Starte t neue Peers<br />

● Gesteuert: freie Knoten suchen sich überlastete Knoten<br />

■ Knoten finden sich durch Random Walk oder Verzeichnisse<br />

● Vorteile: einfach zu realisieren<br />

● Nachteile:<br />

■ Verwaltungsaufwand beim Starten / Stoppen<br />

■ Netz wird virtuell größer <strong>und</strong> damit langsamer<br />

■ Der Grad erhöht sich. Bei log(N) virtuellen Peers wird der Grad<br />

eines reellen Peer log²(N)<br />

● Auch hier können individuelle Hot‐Spots nicht aufgelöst werden<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 14


Techniken IV:<br />

Relokation<br />

Netzwerk<br />

Wurzelknoten<br />

≈ 50.000 Daten<br />

Kind 1 Level 1 Kind 2 Level 1<br />

≈ 25.000 Daten<br />

≈ 25.000 Daten<br />

Kind 1 Level 2 Kind 2 Level 2<br />

≈ 12.500 Daten<br />

≈ 12.500 Daten<br />

Quelle: André Höing<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 15


Techniken IV:<br />

Relokation<br />

Wurzelknoten<br />

Kind 1 Level 1 Kind 2 Level 1<br />

Kind 1 Level 2 Kind 2 Level 2<br />

Quelle: André Höing<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 16


Lasterkennung I<br />

● Gr<strong>und</strong>sätzliches Problem:<br />

■ Globale Informationen schätzen, ohne jeden Knoten zu<br />

fragen<br />

● Woher weiß ein Knoten, ob er Überlast hat?<br />

■ Gleichverteilung der ID‐Bereiche erkennen:<br />

■ Jeder Peer speichert 50 Keys zufällig im DHT<br />

■ Wer >>50 Keyserhält, hat einen zu großen Bereich<br />

■ Wer


Lasterkennung II<br />

● Knoten versenden<br />

Lastinformationen an<br />

andere Knoten<br />

■ Anzahl Daten<br />

■ Verbrauchte Bandbr.<br />

■ Mittlere Wartezeit<br />

StatusQueue (SS)<br />

● SampleSize (SS)<br />

■ Samplegröße<br />

● SampleFactor (SF)<br />

■ Multiplikator<br />

● Überlastet, wenn<br />

■ myLoad > SF *<br />

otherLoad<br />

Quelle: André Höing<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 18


Lastbalancierung in SkipNet<br />

● Knoten N i ist für Daten<br />

im Bereich [R i‐1 , R i )<br />

verantwortlich<br />

● Die Bereiche haben<br />

beliebige Größe<br />

● Wichtig ist, dass die<br />

Datenmenge<br />

ausgeglichen ist<br />

Last<br />

● Die Bereichsgrenzen R i N 1 N 2 N 3 N 4 N 5 N 6 N 7 N 8 N 9<br />

werden ständig<br />

angepasst<br />

R 0 R 1 R 2 R 3 R 4 R 5 R 6 R 7 R 8 R 9<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 19


Lastbalancierung in SkipNet<br />

● Operation NeighborAdjust:<br />

● Zwei benachbarte Knoten passen ihre Bereichsgrenzen an<br />

Last<br />

Last<br />

N 1 N 2 N 3 N 4 N 5 N 6 N 7 N 8 N 9 N 1 N 2 N 3 N 4 N 5 N 6 N 7 N 8 N 9<br />

R 0 R 1 R 2 R 3 R 4 R 5 R 6 R 7 R 8 R 9 R 0 R 1 R 2 R 3 R 4 R 5 R 6 R 7 R 8 R 9<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 20


Lastbalancierung in SkipNet<br />

● Operation Reorder:<br />

● Ein leerer Knoten sucht sich eine neue Position<br />

Last<br />

Last<br />

N 1 N 2 N 3 N 4 N 5 N 6 N 7 N 8 N 9 N 1 N 3 N 4 N 5 N 2 N 6 N 7 N 8 N 9<br />

R 0 R 1 R 2 R 3 R 4 R 5 R 6 R 7 R 8 R 9 R 0 R 1 R 2 R 3 R 4 R 5 R 6 R 7 R 8 R 9<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 21


Verfahren<br />

● Iteratives Vorgehen<br />

● Wir starten mit leerem Netzwerk<br />

● Bei jeder Insert‐ <strong>und</strong> jeder Delete‐Operation wird eine<br />

Balancierung ausgeführt<br />

● Betrachte Schwellenwerte:<br />

■ T 1 =c, T 2 =2c, T 3 =4c, T 4 =8c, T 5 =16c, etc.<br />

■ Genau dann, wenn die Last einen Knotens über einen<br />

Schwellwert kommt, wird Balancierung angestoßen<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 22


Algorithmus<br />

1 // Rufe nach insert eines Datums auf N i auf<br />

2 AdjustLoad(Node N i )<br />

3 Sei L(N i ) = x in (T m , T m+1 ] // hier bestimmen wir m (!)<br />

4 Sei N j der weniger belastete von N i‐1 <strong>und</strong> N i+1<br />

5 if L(N j )


Beispiel<br />

T i‐1 i =2 , wir führen AdjustLoad nur aus, wenn m≥3, damit T m‐2 definiert ist<br />

T5<br />

m=4<br />

T4<br />

m=3<br />

T3<br />

T2<br />

T1<br />

0 K0 250 K1 500 K2 750 K3<br />

1000<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 24


Beispiel<br />

Einfügen: 9, 115, 1, 11, 19<br />

T5<br />

m=4<br />

T4<br />

m=3<br />

T3<br />

T2<br />

T1<br />

0 K0 250 K1 500 K2 750 K3<br />

1000<br />

Liegen in (T m , T m+1 ] = (T 3 , T 4 ] → Prüfen ob Nachbar Last ≤ T m‐1 = T 2 hat → Ja → NbrAdjust<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 25


Beispiel<br />

NeighborAdjust<br />

T5<br />

m=4<br />

T4<br />

m=3<br />

T3<br />

T2<br />

T1<br />

0 K0 19 K1 500 K2 750 K3<br />

1000<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 26


Beispiel<br />

Einfügen: 0, 2<br />

T5<br />

m=4<br />

T4<br />

m=3<br />

T3<br />

T2<br />

T1<br />

0 K0 19 K1 500 K2 750 K3<br />

1000<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 27


Beispiel<br />

NeighborAdjust<br />

T5<br />

m=4<br />

T4<br />

m=3<br />

T3<br />

T2<br />

T1<br />

0 K0 11 K1 500 K2 750 K3<br />

1000<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 28


Beispiel<br />

Einfügen: 281, 53<br />

T5<br />

m=4<br />

T4<br />

m=3<br />

T3<br />

T2<br />

T1<br />

0 K0 11 K1 500 K2 750 K3<br />

1000<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 29


Beispiel<br />

NeighborAdjust<br />

T5<br />

m=4<br />

T4<br />

m=3<br />

T3<br />

T2<br />

T1<br />

0 K0 11 K1 115 K2 750 K3<br />

1000<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 30


Beispiel<br />

Einfügen: 13, 432, 40<br />

T5<br />

m=4<br />

T4<br />

m=3<br />

T3<br />

T2<br />

T1<br />

0 K0 11 K1 115 K2 750 K3<br />

1000<br />

Liegen in (T m , T m+1 ] = (T 3 , T 4 ] → Prüfen ob Nachbar Last ≤ T m‐1 = T 2 hat → Nein<br />

Hat Knoten mit geringster g Last ≤ T m‐2 = T 1 Daten? → Ja<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 31


Beispiel<br />

Reorder<br />

T5<br />

m=4<br />

T4<br />

m=3<br />

T3<br />

T2<br />

T1<br />

0 K0 11 K1 115 K3 115 K2<br />

1000<br />

K3 gibt gesamte Last an Nachbarn K2 ab, sortiert sich neben K1,<br />

übernimmt Hälfte der Last von K1<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 32


Beispiel<br />

NeighborAdjust(K2)<br />

T5<br />

m=4<br />

T4<br />

m=3<br />

T3<br />

T2<br />

T1<br />

0 K0 11 K1 40 K2 115 K3<br />

1000<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 33


Beispiel<br />

Einfügen: 137, 205<br />

T5<br />

m=4<br />

T4<br />

m=3<br />

T3<br />

T2<br />

T1<br />

0 K0 11 K1 40 K2 115 K3<br />

1000<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 34


Beispiel<br />

NeighborAdjust<br />

T5<br />

m=4<br />

T4<br />

m=3<br />

T3<br />

T2<br />

T1<br />

0 K0 11 K1 40 K2 137 K3<br />

1000<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 35


Beispiel<br />

Einfügen: 82, 130<br />

T5<br />

m=4<br />

T4<br />

m=3<br />

T3<br />

T2<br />

T1<br />

0 K0 11 K1 40 K2 137 K3<br />

1000<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 36


Beispiel<br />

Keine Balancierung!<br />

T5<br />

m=4<br />

T4<br />

m=3<br />

T3<br />

T2<br />

T1<br />

0 K0 11 K1 40 K2 137 K3<br />

1000<br />

Liegen in (T m , T m+1 ] = (T 3 , T 4 ] → Prüfen ob Nachbar Last ≤ T m‐1 = T 2 hat → Nein<br />

Hat Knoten mit geringster g Last ≤ T m‐2 = T 1 Daten? → Nein<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 37


Beispiel<br />

Einfügen: 26, 78, 41, 110, 679, 49:<br />

T5<br />

m=4<br />

T4<br />

m=3<br />

T3<br />

T2<br />

T1<br />

0 K0 11 K1 40 K2 137 K3<br />

1000<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 38


Beispiel<br />

NeighborAdjust<br />

T5<br />

m=4<br />

T4<br />

m=3<br />

T3<br />

T2<br />

T1<br />

0 K0 11 K1 49 K2 137 K3<br />

1000<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 39


Beispiel<br />

Einfügen: 7, 69, 163, 197, 506, 6, 3, 8, 182, 173, 416, 133, 42,<br />

108, 18, 56, 556, 123<br />

T5<br />

m=4<br />

T4<br />

m=3<br />

T3<br />

T2<br />

T1<br />

0 K0 11 K1 49 K2 137 K3<br />

1000<br />

Je größer die Bereiche, um so seltener Balancierung<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 40


Lastbalancierung in SkipNet<br />

● Durch lokale Entscheidungen wird globale Balancierung<br />

erreicht<br />

● Durch Anpassen der Bereichsgrenzen wird neue Last<br />

passend einsortiert<br />

■ Solange das Lastprofil gleich bleibt!<br />

● Beweisbar gutes Verfahren<br />

■ Kosten sind max. O(X) bei X eingefügten g Daten<br />

■ Garantiert, dass min i {L(N i )} ≤ 8 * max i {L(N i )} + c 0<br />

● Problem beim P2P‐Einsatz: Wie finde ich den am wenigsten<br />

belasteten Knoten?<br />

■ Lösung: Zweite SkipGraph‐Struktur, Struktur, nach Last sortiert<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 41


Quantifizierung von Last<br />

Ungleichgewicht<br />

Knoten 1 2 3 4 5 6<br />

Schritt 1: ermitteln der Last 3 2 5 3 1 2<br />

Schritt 2: sortieren 1 2 2 3 3 5<br />

Schritt 3: akkumulieren 1 3 5 8 11 16<br />

100%<br />

Last<br />

Lorenz‐Kurve<br />

0%<br />

0% Knoten<br />

100%<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 42


Quantifizierung von Last<br />

Ungleichgewicht<br />

Knoten 1 2 3 4 5 6<br />

Schritt 1: ermitteln der Last 3 2 5 3 1 2<br />

Schritt 2: sortieren 1 2 2 3 3 5<br />

Schritt 3: akkumulieren 1 3 5 8 11 16<br />

100%<br />

Last<br />

Gini‐Index =<br />

0%<br />

Fläche unter Dreieck,<br />

0% Knoten 100% immer 0.5<br />

21.06.2009 Dominic Battré ‐ P2P Netzwerke 43


Zusammenfassung<br />

● Last‐Arten: CPU, Speicher, Bandbreite<br />

● Automatische Balancierung von DHTs<br />

● Techniken:<br />

■ I: Bereichsgrenzen ändern, Replikation<br />

■ II: Power of Two Choices<br />

■ III: Virtuelle Peers<br />

■ IV: Relokation<br />

● Erkennung von Ungleichgewichten<br />

● Lastbalancierungng in SkipNet nach Ganesan et al.<br />

16.06.2009 Dominic Battré ‐ P2P Netzwerke 44


Vorlesung<br />

P2P Netzwerke<br />

10: Multicast<br />

Dr. Dominic Battré<br />

Complex and Distributed <strong>IT</strong>‐Systems<br />

dominic.battre@tu‐berlin.de<br />

berlin de


Inhalt<br />

● Application‐Layer Multicast<br />

● Scribe<br />

● SplitStream<br />

● BitTorrent<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 2


Multicast<br />

● IP Multicast ist eine tolle Idee, aber<br />

■ kaum unterstützt<br />

■ daher nicht praktisch einsetzbar<br />

● Alternativen?<br />

● Application‐Layer Multicast!<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 3


Application‐Layer Multicast<br />

P1<br />

R1 R2 P2 P1 R1 R2 P2<br />

P4 R4 R3 P3 P4 R4 R3 P3<br />

Max Stress = 1 Max Stress = 3<br />

Avg Stretch = 1 Avg Stretch = 1<br />

P1<br />

R1 R2 P2 P1 R1 R2 P2<br />

P4 R4 R3 P3 P4 R4 R3 P3<br />

Max Stress = 1<br />

Avg Stretch = 2<br />

Max Stress = 2<br />

Avg Stretch = 1,33<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 4


Scribe: Literatur<br />

[1] M. Castro, P. Druschel, A‐M. Kermarrec, A. Rowstron:<br />

"SCRIBE: A large‐scale and decentralised application‐level<br />

multicast infrastructure", IEEE Journal on Selected Areas in<br />

Communications (JSAC) (Special issue on Network Support<br />

for Multicast Communications), 2002.<br />

[2] M. Castro, P. Druschel, A‐M. Kermarrec, A. Nandi, A.<br />

Rowstron, A. Singh: "SplitStream: High‐bandwidth<br />

multicast li in a cooperative environment", OSP'03,Lake<br />

Bolton, New York, October, 2003.<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 5


Scribe: Basis<br />

● Baut auf Pastry auf<br />

● Multicast‐Kommunikation in Gruppen<br />

● Jede Gruppe hat eine ID grpID<br />

● Der Root‐Knoten für grpID in Pastry verwaltet die Gruppe<br />

● Join von Knoten n:<br />

■ Sende Nachricht JOIN an grpID<br />

■ Jeder Knoten auf dem Weg überprüft, ob er in der Gruppe ist<br />

■ Falls ja: Füge n zur Kinder‐Liste für grpID hinzu<br />

■ Nachricht htwird idnur weitergeleitet, t wenn der Knoten noch<br />

nicht in der Gruppe war<br />

● Es wird dadurch ein Baum für jede Gruppe aufgebaut<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 6


Scribe <strong>und</strong> SplitStream<br />

0100<br />

1111<br />

1100<br />

1101<br />

Root‐Knoten<br />

für grpID<br />

1001<br />

Subscriber<br />

Subscriber, auch wenn sie selbst nicht<br />

am Topic interessiert sind ("Forwarder")<br />

0111<br />

Quelle: [1]<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 7


Scribe <strong>und</strong> SplitStream<br />

1111<br />

Subscriber<br />

0100<br />

1100<br />

1101<br />

Root‐Knoten<br />

für grpID<br />

1001<br />

Subscriber<br />

Subscriber, auch wenn sie selbst nicht<br />

am Topic interessiert sind ("Forwarder")<br />

0111<br />

Quelle: [1]<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 8


Scribe:<br />

Verlassen einer Gruppe<br />

● Leave von Knoten n aus Gruppe grpID:<br />

■ Wenn Kinder‐Liste leer ist, route Leave‐Message Richtung<br />

Root‐Knoten<br />

■ Sonst Markiere Gruppe nur als "verlassen"<br />

● Wenn eine Leave‐Nachricht von einem Kind empfangen<br />

wurde:<br />

■ Lösche Kind aus Kinder‐Liste<br />

■ Wenn Kinder‐Liste leer ist, <strong>und</strong> der Knoten selbst nicht in der<br />

Gruppe ist:<br />

♦ Sende Leave‐Nachricht an Parent <strong>und</strong> lösche die Gruppe lokal<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 9


Scribe:<br />

Senden einer Nachricht<br />

● Kanonische Lösung:<br />

■ Nachrichten werden immer zur Wurzel geschickt<br />

■ Dazu wird das NodeHandle gecacht<br />

■ Wenn es falsch oder unbekannt ist, wird per Pastry‐Routing die<br />

Wurzel gesucht<br />

■ Von der Wurzel aus sendet jeder Knoten die Nachricht an seine<br />

Kind‐Knoten<br />

● Alternative:<br />

■ Verteilen der Nachricht htdirekt vom aktuellen Knoten aus<br />

■ Jede Nachricht beinhaltet eine Liste von Knoten, die die Nachricht<br />

bereits gesehen haben<br />

■ Die Nachricht wird an den Parent‐Knoten <strong>und</strong> an alle Kind‐Knoten<br />

verschickt<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 10


Scribe:<br />

Reparatur<br />

● Die Wurzel sendet regelmäßig "Heartbeat"‐Nachrichten<br />

● Normale Nachrichten sind implizit Heartbeats<br />

● Wenn der Heartbeat vom Parent‐Knoten ausbleibt, sendet<br />

er eine neue JOIN‐Nachricht<br />

● Dadurch wird der Baum repariert<br />

● Die Wurzel repliziert ihren Zustand (wie gewohnt) über das<br />

Leafset<br />

● Ein neuer Root‐Knoten übernimmt direkt nach dem Ausfall<br />

der Wurzel das Verteilen <strong>und</strong> Aussenden der Heartbeats<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 11


Scribe<br />

0100<br />

1111<br />

1100<br />

1101<br />

1001<br />

0111<br />

Quelle: [1]<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 12


Scribe<br />

0100<br />

1111<br />

1100<br />

1101<br />

1001<br />

0111<br />

Quelle: [1]<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 13


Scribe: Probleme<br />

● Innere Knoten des Baumes müssen weiterleiten<br />

● Blattknoten müssen nur empfangen<br />

● Für Baum mit Fanout f, i inneren Knoten, b Blättern gilt:<br />

■ (f‐1) ∙ i + 1 = b<br />

■ Anteil an inneren Knoten ca. 1/f<br />

● Last der inneren Knoten:<br />

■ Ausgangs‐Bandbreite f‐mal der Datenstrom<br />

● Sehr ungleiche Lastverteilung im Baum<br />

● Lösung: SplitStream<br />

● Gr<strong>und</strong>idee:<br />

■ Aufteilen des Datenstroms in mehrere Teilströme<br />

■ Für jeden Teilstrom einen eigenen Baum aufbauen<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 14


SplitStream<br />

1<br />

3 5<br />

2 8<br />

4 6<br />

7<br />

Quelle: [2]<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 15


SplitStream<br />

1<br />

3 5<br />

2 8<br />

4 6<br />

7<br />

Quelle: [2]<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 16


SplitStream<br />

1<br />

3 5<br />

2 8<br />

4 6<br />

7<br />

Quelle: [2]<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 17


SplitStream<br />

● Datenstrom mit Bandbreite B wird verteilt<br />

● Der Datenstrom wird in k Stripes eingeteilt<br />

● Für jeden Stripe wird ein eigener Baum aufgebaut<br />

● Es muss nicht jeder Knoten alle Stripes empfangen<br />

■ Warum macht das Sinn?<br />

● Jeder Knoten kann seine Upload‐ <strong>und</strong> Download‐Bandbreite<br />

in Schritten von B/k kontrollieren<br />

● Dadurch Berücksichtigung von:<br />

■ Knoten mit unterschiedlicher h Bandbreite<br />

■ Ungleiche Up‐ <strong>und</strong> Download‐Bandbreite<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 18


Aufbau der Bäume<br />

● Jeder Stripe bekommt eigene ID<br />

● Die ID's unterscheiden sich in der höchsten Ziffer<br />

● Jeder Empfänger‐Knoten meldet sich bei allen Stripe‐IDs an<br />

● Zu jeder ID wird ein eigener Scribe‐Baum aufgebaut<br />

● Je dichter ein Knoten an der Wurzel ist, desto länger ist der<br />

gemeinsame Präfix<br />

● Ideal für diese Konstruktion ist: k = 2 b<br />

● Jede Route von einem Knoten zu einer Stripe‐ID stellt im ersten<br />

Schritt Übereinstimmung in der ersten Stelle sicher<br />

● Die weitere Route verläuft nur über Knoten mit der gleichen<br />

ersten Stelle<br />

● Alle Bäume haben also disjunkte Mengen innerer Knoten<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 19


Aufbau der Bäume<br />

Peer mit Präfix 0 Peer mit Präfix 1<br />

A<br />

A<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 20


Kontrolle der Bandbreite<br />

● Die eingehende Bandbreite entspricht der Menge der<br />

abonnierten Stripes, oder<br />

● max. 1, wenn kein Stripe abonniert wurde, aber der Knoten<br />

innerer Knoten eines Stripe‐Baumes ist<br />

● Aber: die ausgehende Bandbreite könnte überschritten werden<br />

● Methode in Scribe zur Kontrolle:<br />

■ Wenn ein Knoten einen neuen Kind‐Knoten K bk bekommt, tder die<br />

Bandbreite überschreitet:<br />

■ Sende dem Knoten bisherige Kind‐Liste<br />

■ Der Knoten versucht sich bei dem Kind mit der geringsten Latenz<br />

anzumelden<br />

■ Dies wird rekursiv fortgesetzt<br />

● Diese Methode führt in SplitStream zu Problemen! (Blatt Knoten<br />

kann evtl. kein Kind annehmen, weil er in anderem Baum innerer<br />

Knoten <strong>und</strong> damit ausgelastet ist)<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 21


Kontrolle der Bandbreite<br />

● Jeder Knoten nimmt jedes neue Kind zunächst an<br />

● Wenn seine Bandbreite überschritten wird:<br />

■ Selektiere das Kind mit dem kürzesten gemeinsamen Präfix<br />

■ Hänge diese Kind ab<br />

● Das verwaiste Kind muss sich einen neuen Parent‐Knoten suchen<br />

■ Zunächst rekursiver Versuch, sich bei den anderen Kindern des<br />

alten Parent‐Knoten einzuhängen<br />

■ Dbi Dabei werden nur Kinder mit zum Stripe passenden Päfi Präfix genutzt tt<br />

■ Sonst nutze die "Spare capacity group"<br />

● Spare Capacity Group<br />

■ Scribe‐Gruppe in der alle Knoten mit freien Kapazitäten sind<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 22


Wie verwende ich SplitStream?<br />

● Jeder einzelne Stripe könnte "Aussetzer" haben:<br />

● Reparaturzeiten nach Knotenausfall, Umorganisation, etc.<br />

● Daher: Einsatz von fehlertoleranter Kodierung<br />

■ Empfang aller k Stripes ist nicht nötig<br />

■ Ausfall einzelner Stripes kann kompensiert werden<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 23


BitTorrent: Literatur<br />

[1] Bram Cohen: "Incentives Build Robustness in BitTorrent",<br />

2003.<br />

[2] Ashwin R. Bharambe, Cormac Herley, Venkata N.<br />

Padmanabhan: "Analyzing and Improving BitTorrent<br />

Performance", Microsoft Research Technical Report MSR‐<br />

TR‐2005‐03, 2005.<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 24


BitTorrent<br />

Web‐Server mit<br />

.torrent‐Datei<br />

Seeder<br />

Seeder<br />

Leecher<br />

Leecher<br />

Tracker<br />

Seeder<br />

Leecher<br />

Leecher<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 25


BitTorrent: Funktionsweise<br />

● Ein Peer lädt eine Torrent‐Datei von einem Webserver<br />

■ Dateiinfos: Name, Länge etc.<br />

■ URL des Trackers<br />

■ SHA1‐Werte der Dateiblöcke<br />

● Es muss mind. einen Seeder anfänglich geben<br />

● Ein Peer meldet sich beim Tracker an<br />

● Der Tracker schickt eine zufällige Auswahl an Peers (ca. 40)<br />

● Der Peer baut Direktverbindungen zu diesen Peers auf<br />

● Der Peer lädt jetzt die Datei blockweise von seinen Nachbar‐<br />

Peers runter<br />

● Wenn ein Peer weniger als 20 Nachbarn hat, holt er neue vom<br />

Tracker<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 26


BitTorrent: Details<br />

● Versendung der Blöcke über TCP‐Verbindungen<br />

● Jeder Block wird in Sub‐Blöcke aufgeteilt (16 KB)<br />

● Diese werden im Pipelining‐Verfahren verschickt<br />

● Bevor ein neuer Block angefordert wird, werden erst<br />

fehlende Sub‐Blöcke von alten Blöcken angefordert<br />

● Welches Paket wird als nächstes angefordert?<br />

■ Zufällige Auswahl genügt nicht<br />

■ Coupon Collector Problem<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 27


Coupon Collector’s Problem<br />

● Datei besteht aus m Teilen<br />

● Jeder Peer hat genau einen zufällig ausgewählten Teil<br />

■ Es müssen Ω(m ( log m) Peers teilnehmen, damit mit<br />

konstanter Wahrscheinlichkeit jeder Teil verfügbar ist<br />

● Verteilt man m Teile auf m Peers,<br />

■ haben 1/e der Peers gar keine Teile<br />

■ einige Peers O(log m) Teile<br />

● Ungleichgewicht<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 28


BitTorrent: Details<br />

● Welches Paket wird als nächstes angefordert?<br />

■ "Random First Piece": Erstes Paket wird zufällig gewählt<br />

♦ Um schnell an Daten zum Weiterverteilen zu kommen<br />

♦ Sobald erstes Paket vollständig, wechsel zu Rarest First<br />

■ "Rarest First": Paket, welches am wenigsten repliziert ist<br />

unter den bekannten Peers<br />

■ "Endgame Mode": Am Ende alles von überall anfordern<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 29


BitTorrent: Tit for Tat<br />

● Wie verhindere ich, dass jemand nicht weiterverteilt?<br />

● Gr<strong>und</strong>sätzliche Idee:<br />

■ Ich schicke nur denen etwas, die auch selbst etwas<br />

weiterverteilen<br />

● Probleme:<br />

■ Peers, die noch nichts zum Verteilen haben<br />

■ Peers, die eine schlechte Anbindung haben, <strong>und</strong> von denen<br />

daher niemand etwas runterladen möchte<br />

■ Woher bekomme ich die Informationen?<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 30


BitTorrent: Choking<br />

● Eine Verbindung kann aktiv oder passiv sein (choking, keine Anfragen<br />

werden beantwortet)<br />

● Es sind immer nur 4 Verbindungen aktiv (unchoking)<br />

● 3 werden über die besten Download‐Raten bestimmt<br />

■ 20 sec. rollierender Durchschnitt<br />

● Alle 10 sec. werden die aktiven Verbindungen neu gewählt<br />

■ wegen TCP ramp up<br />

● Zusätzlich: Ein "Optimistic Unchoke"<br />

■ Eine zufällige Verbindung wird aktiviert<br />

■ Für neue Peers <strong>und</strong> solche mit schlechter Upload‐Bandbreite<br />

■ Rotiert alle 30 sec.<br />

● Wenn keine Pakete mehr ankommen<br />

■ Mehr als ein Optimistic Unchoke<br />

● Wenn Download komplett<br />

■ Wähle aktive Peers mit höchster erzielbarer Upload‐Rate<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 31


Zusammenfassung<br />

● Problemstellung: Multicast, d.h. Verteilung von Daten an eine<br />

große Empfängergruppe<br />

● IP‐Level Multicast wäre optimal<br />

● hat sich aber nicht durchgesetzt<br />

t<br />

● Daher: Application‐Level Multicast<br />

● Mit P2P gut zu realisieren<br />

● Prinzip: Baumförmige Struktur aufbauen<br />

● Probleme: Fairness sowie gute Ausnutzung der vorhandenen<br />

Kapazitäten<br />

● Lösungen: Daten in mehrere Teile zerhacken, für jeden Teil<br />

eigenen Baum aufbauen<br />

● <strong>Systeme</strong>: Scribe, SplitStream, BitTorrent<br />

20.06.2009 Dominic Battré ‐ P2P Netzwerke 32


Vorlesung<br />

P2P Netzwerke<br />

11: Sicherheit<br />

Dr. Dominic Battré<br />

Complex and Distributed <strong>IT</strong>‐Systems<br />

dominic.battre@tu‐berlin.de<br />

berlin de


Inhalt<br />

● Sicherheit<br />

■ Gr<strong>und</strong>lagen<br />

■ Modell<br />

■ Ziel<br />

● Vergabe von Node‐ID's<br />

● Sicheres Befüllen von Routing‐Tabellen<br />

● Sicheres Routing<br />

■ Fehler‐Test für das Routing<br />

■ Red<strong>und</strong>antes Routing<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 2


Sicherheit: Gr<strong>und</strong>lagen<br />

● In P2P können alle bekannten Sicherheits‐Technologien zum<br />

Einsatz kommen:<br />

■ Symmetrische <strong>und</strong> asymmetrische Kryptographie<br />

■ Public‐Key Verfahren<br />

■ Digitale Unterschriften<br />

■ Zertifikate<br />

■ CA‐Hierarchien<br />

● Es gibt aber zusätzliche Problemen gegenüber Client/Server<br />

<strong>Systeme</strong>n<br />

● Das ist Thema dieser Vorlesung:<br />

■ Spezifische Sicherheitsprobleme von P2P Netzwerken<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 3


Literatur<br />

● Emil Sit and Robert Morris: "Security Considerations for<br />

Peer‐to‐Peer Distributed Hash Tables", 1st International<br />

Workshop on Peer‐to‐Peer Systems, 2002.<br />

● John R. Douceur: "The SbilAtt Sybil Attack", 1tI 1st International<br />

ti Workshop on Peer‐to‐Peer Systems, 2002.<br />

● Miguel Castro, Peter Druschel, Ayalvadi Ganesh, Antony<br />

Rowstron, Dan S. Wallach: "Secure routing for structured<br />

peer‐to‐peer p overlay networks", Proc. of the 5th Usenix<br />

Symposium on Operating Systems Design and<br />

Implementation, 2002.<br />

● Nikita Borisov: "Computational Puzzles as Sybil Defenses",<br />

Sixth IEEE International Conference on Peer‐to‐Peer<br />

Computing, 2006.<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 4


Modelle<br />

Böse<br />

Server<br />

(z.B. für Online‐<br />

Banking)<br />

Gut<br />

Internet<br />

Der eigene<br />

Rechner<br />

Client<br />

(z.B. das eigene<br />

Notebook)<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 5


● System mit N Knoten<br />

Modell<br />

● Anteil von 0 ≤ f ≤ 1 bösen Knoten<br />

● Böse Knoten verhalten sich beliebig <strong>und</strong> operieren in<br />

Koalitionen von max. cN Knoten.<br />

● Allgemein: c ≤ f, wenn c<br />

= f dann sind alle bösen Knoten<br />

eine große Koalition<br />

● Unterscheide:<br />

■ Network‐Level Kommunikation<br />

■ Overlay‐Level Kommunikation<br />

● Gr<strong>und</strong>‐Absicherung durch Kryptographie<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 6


Was soll erreicht werden?<br />

● Ein bösartiger Knoten könnte Daten, für die er verantwortlich ist:<br />

■ Modifizieren, Löschen, alte Kopien ausliefern, etc.<br />

● Er könnte geroutete Pakete löschen, ändern, etc.<br />

● Daher:<br />

Sicheres Routing<br />

Sicheres Routing stellt sicher, dass eine Nachricht, h die<br />

ein gutartiger Knoten an den Schlüssel k sendet, mit<br />

hoher Wahrscheinlichkeit alle gutartigen Replika‐<br />

Knoten für k erreicht.<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 7


Schritte zum<br />

sicheren Routing<br />

● Sicheres Vergeben von Knoten‐IDs<br />

■ Verhindere, dass ein Angreifer seine Knoten‐ID selbst<br />

auswählen kann<br />

● Sicheres Bestücken der Routing‐Tabellen<br />

■ Stelle sicher, dass der Anteil von bösartigen Knoten in jeder<br />

Routing‐Tabelle nicht größer ist als der Anteil bösartiger<br />

Knoten im gesamten Netzwerk<br />

● Sicheres Weiterleiten von Nachrichten<br />

■ Stelle sicher, dass mindestens eine Kopie einer Nachricht<br />

jeden gutartigen Replika‐Knoten für einen Schlüssel erreicht<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 8


Angriffe I: Besetzen einer ID<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 9


Angriffe II: Sybil<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 10


Angriffe II: Sybil<br />

● Ermöglicht:<br />

■ Zusammenhang des Netzwerkes stören<br />

■ Mehrheitsabstimmungen sabotieren<br />

■ Anfragen im Netz beobachten<br />

■ Netzwerk absichtlich verlangsamen<br />

■ DDoS Angriffe<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 11


Node‐ID Vergabe: Angriffe<br />

● Koalition besetzt bestimmtes ID‐Gebiet (inkl. aller Replika‐<br />

Knoten)<br />

■ Koalition kann dann ein bestimmtes Datenelement<br />

kontrollieren<br />

● Koalition aus Knoten versucht, alle Einträge in der Routing‐<br />

Tabelle eines Opfers zu füllen<br />

■ Koalition kontrolliert dann sämtliche ausgehenden<br />

Nachrichten des Opfers (Eclipse‐Attacke)<br />

● Sybil Attacken: Einzelner Knoten nimmt über viele virtuelle<br />

Knoten unter vielen IDs am Netzwerk teil<br />

■ Gleiche Angriffe wie oben, aber auch ohne Koalition<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 12


Sichere Node‐ID Vergabe<br />

● Externe Infrastruktur mit Certificate Authorities<br />

● CA wählt eine zufällige Knoten‐ID<br />

● Es wird ein Zertifikat erstellt mit:<br />

■ Öffentlichen Schlüssel des Knotens<br />

■ ID des Knotens<br />

■ IP‐Adresse des Knotens<br />

● Einbindung der IP‐Adresse nötig<br />

■ Sonst könnten Zertifikate zwischen unterschiedlichen Knoten<br />

getauscht werden, um sicherzustellen, dass der Knoten<br />

überall latenzmäßig lokal erscheint<br />

■ Bereitet Schwierigkeiten bei DHCP<br />

● Fälschung von IP‐Adressen Rückweg testen<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 13


Abwehr der Sybil‐Attacke<br />

● Ein Knoten könnte sich immer noch sehr viele Zertifikate mit<br />

vielen il unterschiedlichen h Knoten‐IDs besorgen<br />

● Lösung 1: Zertifikate müssen bezahlt werden<br />

● Lösung 2: Zertifikate an Objekte der realen Welt binden (Person,<br />

Organisation)<br />

● Lösung 3: (umstritten, aber auch ohne Zertifikat möglich)<br />

■ Ausgabe eines Challenge, dessen Beantwortung Rechenzeit kostet<br />

■ Muss regelmäßig wiederholt werden<br />

■ Verschwendet aber CPU‐Zeit<br />

■ Wie berücksichtige ich Heterogenität?<br />

■ Aber: Heterogenität Ht itätführt immer zu Angriffsmöglichkeiten<br />

it<br />

■ Beispiel: finde x, sodass SHA‐1(SHA‐1(ipaddr, x), nodeId) genau p<br />

führende Nullen hat<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 14


Computational Puzzles<br />

7<br />

n(1), c n(1)<br />

1<br />

8<br />

Puzzle:<br />

Zu gegebenem Y<br />

berechne X, s.d.<br />

H(X || Y) = Z<br />

<strong>und</strong> Z hat p führende Null‐Bits<br />

2<br />

n(2): Sequenznummer<br />

c n(2) : Challenge zur Seq.‐Nummer<br />

r n(2) : Zufallszahl<br />

3<br />

dabei ist:<br />

c n(2) = H( 1 || n(1) || c n(1) ||<br />

3 || n(3) || c n(3) ||<br />

r n(2) || c n(2)‐1 )<br />

n(3), c n(3)<br />

6<br />

4<br />

Die Challenges werden periodisch<br />

neu berechnet <strong>und</strong> ihre Aktualität ist<br />

für jeden Knoten nachprüfbar!<br />

5<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 15


Eclipse‐Angriff<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 16


Routing‐Tabelle:<br />

Eclipse Attacke<br />

● Versuche, die Links eines Peers auf böse Peers umzulegen<br />

● Damit wird das echte Netz vor einem attackierten Peer<br />

verborgen, er sieht nur noch böse Peers<br />

● Das geht um so einfacher, je mehr Freiheiten ein Knoten<br />

hat, seine Nachbarn auszuwählen:<br />

■ Gnutella: Nachbarn können beliebig gewählt werden<br />

■ Pastry: Nachbarn können eingeschränkt gewählt werden<br />

■ Chord: Nachbarn sind vollständig determiniert<br />

● Dementsprechend ist Gnutella am anfälligsten<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 17


Beispiel<br />

● Immer wieder Suche neuer Nachbarn aus den Nachbarlisten der<br />

aktuellen Nachbarn (insgesamt X Knoten)<br />

● Anteil böser Knoten ist f, Anteil guter ist g=1‐f<br />

● Böser Knoten schickt nur böse Knoten als potentielle Nachbarn<br />

● Guten Knoten mit zufälligen Nachbarn schickt mit W‘keit f einen<br />

bösen Knoten <strong>und</strong> mit W’keit g einen guten Knoten<br />

● Nach einer R<strong>und</strong>e Updates aller Routingtabelleneinträge t i t enthält<br />

Tabelle eines guten Knoten nur noch Anteil von<br />

■ g*g guter Knoten <strong>und</strong><br />

■ f * 1 + g * f = f * (1+g) böser Knoten<br />

● Der Anteil guter Knoten ist also von g auf g² gesunken!<br />

● Der Anteil ilböser Knoten itjttd ist jetzt deutlich größer!<br />

● Beispiel: 90% gutartiger Knoten wird zu:<br />

■ 81%, 66%, 43%, 19%, 3%<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 18


Routing‐Tabelle: Abwehr<br />

● Je beschränkter die Routing‐Tabelle, desto schwerer der Angriff<br />

● Beispiel: Bei Chord gibt es für jeden Eintrag der Routing‐Tabelle bll<br />

nur einen passenden Knoten<br />

● Daher ist Chord per se gut gewappnet<br />

● Diese Abwehrstrategie verhindert aber PNS<br />

● Lösung: Zwei Routing‐Tabellen<br />

■ Eine beschränkte Tabelle<br />

♦ pro Eintrag nur eine Möglichkeit<br />

♦ In Pastry‐Knoten i, Eintrag auf Ebene l, Ziffer d:<br />

dichtester Knoten zu einer ID p mit<br />

p hat gemeinsames Präfix der Länge l mit i<br />

p hat Ziffer d an Position l+1<br />

p hat die nächsten Ziffern wieder identisch mit i<br />

■ Eine unbeschränkte Tabelle<br />

♦ Ausnutzung von Lokalität<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 19


Befüllen der beschränkten<br />

Routing‐Tabelle<br />

● Einfache, aber teure Methode:<br />

■ Sicheres Routing nutzen, um Einträge neu zu füllen<br />

● Menge von Boot‐Knoten verwenden<br />

■ Groß genug, dass mindestens ein gutartiger Knoten enthalten ist<br />

● Routing‐Tabellen von allen Boot‐Knoten holen<br />

● Jeden Slot mit dem besten Knoten füllen, der die<br />

Bedingungen erfüllt<br />

● Von diesen Knoten wiederum die Tabellen holen<br />

● Einträge dann eventuell durch bessere Knoten ersetzen<br />

● Stabilisierung:<br />

i<br />

■ Regelmäßige Kommunikation mit den Nachbarn<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 20


Sicheres Routing<br />

● Die bisherigen Maßnahmen garantieren:<br />

■ Jede beschränkte Routing‐Tabelle beinhaltet nur einen Anteil von f<br />

bösartigen Knoten<br />

● Aber: ein bösartiger Knoten auf einer Route ist genug!<br />

■ Er könnte behaupten, dass er der Root‐Knoten ist<br />

■ Er könnte die Nachricht stillschweigend löschen<br />

■ Er könnte sie an einen anderen (falschen) Knoten weiterleiten<br />

● Wahrscheinlichkeit für erfolgreiches Routing: (1‐f) h‐1<br />

■ h ist dabei die Anzahl Knoten auf dem Pfad<br />

● Der Root‐Knoten selbst könnte bösartig sein<br />

■ Verwendung von Replika‐Knoten<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 21


Sicheres Routing: Lösung<br />

● Mit hoher W’keit soll mindestens eine Kopie der Nachricht<br />

jeden Replikaknoten des Zieles erreichen<br />

● Zunächst Standard‐Routing nutzen (für Effizienz, d.h.<br />

Ausnutzung von Lokalität)<br />

● Der Root‐Knoten antwortet mit einer Menge von Replika‐<br />

Knoten<br />

● Jetzt wird ein Fehlertest angewendet<br />

● Wenn der Fehlertest anschlägt:<br />

■ Verwende red<strong>und</strong>antes Routing<br />

■ Es werden mehrere Kopien der Nachricht auf verschiedenen<br />

Routen an die unterschiedlichen Replika‐Knoten gesendet<br />

■ Dies ist teuer, aber die Erfolgswahrscheinlichkeit ist höher<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 22


Fehler‐Test für das Routing<br />

● Wenn keine Antwort nach einem Timeout<br />

zurückkommt, antwortet der Test positiv<br />

● Sonst: Eingabe für den Test ist der Ziel‐Schlüssel plus<br />

eine Menge von potentiellen Replika‐Knoten<br />

● Beobachtung:<br />

■ Die durchschnittliche Dichte von Knoten pro ID‐Distanz ist<br />

höher als die durchschnittliche Dichte von bösartigen Knoten<br />

● Daher wird verglichen:<br />

■ Dichte der Knoten in der Nachbarschaft des aktuellen Knoten<br />

■ Dichte der Replika‐Knoten<br />

● Wenn ein Knoten nur bösartige Knoten aus seiner Koalition<br />

zurückliefert, ist die Dichte geringer als die normale Dichte<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 23


Fehler‐Test für das Routing<br />

Korrekte Menge von Replika‐Knoten<br />

B: Bösartiger Knoten<br />

G: Gutartiger Knoten<br />

B<br />

G B G G B G G G B G G B G<br />

Von bösartigem Knoten zurückgelieferte Menge<br />

Dichte ist itviel ilgeringer<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 24


Exkurs: Nonce<br />

● Nonce = Number used once, Schutz vor Replay Attacks<br />

Client<br />

Server<br />

getNonce()<br />

nonce<br />

login(username, cnonce,<br />

hash(cnonce+nonce+password))<br />

token<br />

Quelle: Wikipedia<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 25


Red<strong>und</strong>antes Routing I<br />

● p sendet r Nachrichten über verschiedene Nachbarn an das<br />

Ziel x.<br />

● Jede Nachricht beinhaltet ein nonce.<br />

● Es wird nur die beschränkte Tabelle verwendet.<br />

● Wenn ein Knoten die Nachricht erhält, x im LeafSet enthält,<br />

schickt er sein NodeId‐Zertifikat <strong>und</strong> das nonce,<br />

unterschrieben mit seinem Privaten Schlüssel, zurück.<br />

● Der Original‐Knoten sammelt die zu x dichtesten Node‐ID‐<br />

Zertifikate in einer Liste N, aber nur wenn sie gültig<br />

g<br />

unterschieben sind. Alle stehen zunächst auf "Pending".<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 26


Red<strong>und</strong>antes Routing II<br />

● Nach einem Timeout oder nachdem r Antworten kamen,<br />

sendet der Knoten die Liste N an jeden Knoten, der noch<br />

auf "Pending" steht <strong>und</strong> setzt ihn auf "Done".<br />

● Jeder Knoten leitet die Originalnachricht an Nachbarn<br />

weiter, die nicht in der Liste stehen. Ansonsten sendet er<br />

eine Bestätigung, dass es keine weiteren Knoten gibt. Die<br />

neuen Knoten kommen auch auf die Liste.<br />

● Wenn von jedem Knoten eine Bestätigung erhalten wurde,<br />

oder 3 R<strong>und</strong>en vorbei sind, wird aus N die Menge der<br />

Replika‐Knoten lk gebildet. bld<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 27


Zusammenfassung<br />

● P2P hat besondere Sicherheitsanforderungen im Vergleich<br />

zu Client/Server<br />

● "Standard"‐Sicherheitsmaßnahmen sind notwendig, aber<br />

nicht hinreichend<br />

● Man muss immer mit bösartigen Knoten rechnen<br />

● Das gesamte Netzwerk soll auch dann noch funktionieren,<br />

wenn ein gewisser Anteil der Knoten bösartig ist<br />

● Typische Angriffe:<br />

■ Sybil: Viele virtuelle Knoten<br />

■ Eclipse: Verdecken des Netzes durch bösartige Knoten<br />

● Abwehrmaßnamen sind möglich, aber teuer<br />

01.07.2009 Dominic Battré ‐ P2P Netzwerke 28

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!