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
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