Hinweise Aufgabe 1 Aufgabe 2 Aufgabe 3 (*) - TU Berlin
Hinweise Aufgabe 1 Aufgabe 2 Aufgabe 3 (*) - TU Berlin
Hinweise Aufgabe 1 Aufgabe 2 Aufgabe 3 (*) - TU Berlin
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
VL Peer-2-Peer Netzwerke<br />
SS 2009<br />
Dr. Dominic Battré<br />
Ausgabe 23.4.2009<br />
Abgabe 30.4.2009<br />
Besprechung 8.5.2009<br />
Übungszettel 2<br />
<strong>Hinweise</strong><br />
• Übungen können in Gruppen beliebiger Größe bearbeitet werden<br />
• Abgabe per e-Mail an dominic.battre@tu-berlin.de<br />
• Alle abgegebenen Zettel werden korrigiert<br />
• Übungen werden nicht benotet – die Bearbeitung wird aber dringend empfohlen!<br />
• Der Stoff der Übungen ist grundsätzlich prüfungsrelevant! Ausnahmen sind mit<br />
Stern gekennzeichnete <strong>Aufgabe</strong>n.<br />
• Homepage der Vorlesung: http://www.cit.tu-berlin.de/?id=51290<br />
<strong>Aufgabe</strong> 1<br />
Zeichne einen Graphen mit Cluster-Koeffizient 1 und zwei Graphen mit Cluster-Koeffizient<br />
0 bestehend aus 5 Knoten. Welche Durchmesser und Charakteristischen Pfadlängen haben<br />
diese Graphen?<br />
<strong>Aufgabe</strong> 2<br />
Ein ungerichteter G(n, p) Graph ist ein zufälliger ungerichteter Graph mit n Knoten,<br />
wobei die Wahrscheinlichkeit, dass eine Kante zwischen 2 Knoten existiert gleich p ist.<br />
Ein ungerichteter G(n, k) Graph ist ein zufälliger ungerichteter Graph mit n Knoten und<br />
genau k Kanten.<br />
Wie kann ich für gegebene Werte (n, p) die Werte für (n, k) finden, sodass die beiden<br />
Graphen G(n, p) und G(n, k) im Erwartungswert gleich viele Kanten besitzen?<br />
<strong>Aufgabe</strong> 3 (*)<br />
Diese <strong>Aufgabe</strong> ist sehr programmieraufwändig und für diejenigen gedacht, die den<br />
erlernten Stoff zu P2P Netzwerken praktisch ausprobieren möchten. Die Bearbeitung ist<br />
daher noch freiwilliger als die Bearbeitung der anderen <strong>Aufgabe</strong>n. ;-) In der Übung am<br />
24.4.09 werden noch weitere Tipps zu dieser <strong>Aufgabe</strong> gegeben.<br />
1
Lade das Quellcode-Archiv uebung2.tar.gz von der Vorlesungswebseite und entpacke<br />
es. Mittels File → Import kannst du das Projekt z.B. in Eclipse importieren.<br />
1. In der Vorlesung haben wir die Definitionen von Charakteristischer Pfadlänge und<br />
dem Clustering-Koeffizienten kennengelernt. Im ersten Schritt sollen diese beiden<br />
Metriken implementiert werden.<br />
Du findest im Projekt ein Paket p2p.uebung2.graph, das einen sehr simplen ungerichteten<br />
Graphen implementiert. Desweiteren findest Du ein Paket p2p.uebung2.<br />
generators mit einem Interface GraphGenerator mit dem Graphen generiert werden<br />
können.<br />
Du findest ein Interface p2p.uebung2.analysis.Analyzer, mit zwei Methoden<br />
zum Bestimmen von Charakteristischer Pfadlänge und dem Clustering-Koeffizienten.<br />
Implementiere dieses Interface in der Klasse p2p.uebung2.analysis.AnalyzerImpl.<br />
Führe den JUnit Test p2p.uebung2.analysis.AnalyzerTest im Ordner test aus.<br />
Wenn er erfolgreich ist, sollte diese <strong>Aufgabe</strong> erledigt sein.<br />
Tipp: Für die charakteristische Pfadlänge musst du die kürzesten Wege zwischen<br />
zwei Punkten bestimmen. Dies ist mit einer Breitensuche möglich.<br />
2. In der Vorlesung haben wir weiterhin, die Generierung von Graphen nach dem<br />
Barabási-Albert Modell und dem Watts-Strogatz Modell kennengelernt.<br />
Implementiere diese Modelle in den Klassen p2p.uebung2.generators.Graph-<br />
GeneratorBarabasiAlbert und p2p.uebung2.generators.GraphGeneratorWatts-<br />
Strogatz. Die JUnit Tests im Paket p2p.uebung2.generators können zum Testen<br />
genutzt werden. Es könnte insb. beim passieren Watts-Strogatz Modell passieren,<br />
dass die Ergebnisse leicht abweichen, wenn das rewiring unterschiedlich implementiert<br />
wird.<br />
Tipp: Die Klassen GraphGeneratorGnp und GraphGeneratorRing zeigen, wie man<br />
Graphgeneratoren erzeugt.<br />
3. Nutze die Klassen aus (a) und (b) und vergleiche die Ergebnisse mit denen aus der<br />
Tabelle in den Folien (Eigenschaften von Gnutella, Untersuchung von 2000).<br />
<strong>Aufgabe</strong> 4<br />
In der Vorlesungen habt ihr die grundlegenden Operationen von distributed hash tables<br />
(DHTs) kennengelernt:<br />
• Jeder Knoten im Netz ist für einen bestimmten Bereich von IDs zuständig.<br />
• Es gibt eine Routing-Funktion, die eine Nachricht an einen Knoten sendet, der für<br />
eine gegebene ID zuständig ist.<br />
Überlege, wie ein Instant-Messenger-Programm mit Hilfe eines DHT-Netzes realisiert<br />
werden kann. Dabei soll folgende Funktionalität vorhanden sein (analog zu Skype):<br />
2
• Jeder Teilnehmer hat einen Namen, beim Programmstart loggt man sich mit Name<br />
/ Passwort ein.<br />
• Jeder Teilnehmer hat eine Liste von Bekannten.<br />
• Nach Programmstart sehe ich eine Liste meiner Bekannten, und es ist jeweils<br />
gekennzeichnet, ob der Bekannte gerade Online oder Offline ist.<br />
• Ich kann einen Chat mit einem Bekannten starten. Jede Nachricht, die ich tippe,<br />
wird sofort an den Bekannten übermittelt. Wenn er nicht online ist, werden die<br />
Nachrichten gepuffert, bis er online ist.<br />
• Ich kann weitere Bekannte zu einem Chat einladen. Auch diese bekommen die<br />
Nachrichten angezeigt.<br />
• Wenn ich einen Chat später fortsetze, kann ich die alten Nachrichten wieder ansehen.<br />
Skizziere jeweils kurz, wie diese Funktionen im DHT-Netz umgesetzt werden können.<br />
Was muss passieren, wenn ein Knoten das Netzwerk betritt bzw. wenn er es wieder<br />
verlässt? Auf welchem Knoten werden welche Daten gespeichert?<br />
Anmerkung 1: Normalerweise ist die Routing-Funktion unzuverlässig (Nachrichten<br />
können dupliziert werden oder verloren gehen). Für diese <strong>Aufgabe</strong> nehmen wir an, dass<br />
sie zuverlässig ist.<br />
Anmerkung 2: Sicherheitsaspekte können erstmal vernachlässigt werden.<br />
3