Prof. Dr. Thomas Schmidt
HAW Hamburg, Dept. Informatik Raum 780, Tel.: 42875 - 8452
Email: schmidt@informatik.haw-hamburg.de Website:
www.informatik.haw-hamburg.de/~schmidt/p2p
Peer-to-Peer Netzwerke
Praktikumsteil 1 (1. - 4. Termin):
Zielstellung des ersten Praktikumsteils ist die Implementierung einer DHT-Middleware auf der Basis des Chord Protokolls, welche dann von einer darüber liegenden Applikation benutzt werden kann.
Die Kernkomponenten der Chord Middleware bestehen aus:
Î einem Interface als Zugriffsschnittstelle für Applikationen Î einer gemeinsamen Hash-Funktion: SHA-1 (160 bit)
Î dem Kernsystem bestehend aus den DHT Datenstrukturen (Predecessor- Successors, Fingertable, Keytable) nebst Routingfunktionalität
Î einem Chord Protokoll-Stack
Î den Chord Selbstorganisationsprozeduren für die eigene An- bzw. Abmeldung sowie Routing-Tabellenpflege (stabilize, fix_fingers)
Î dem Bootstrapping.
Implementierungsplan:
Workpackage 1 - Grundsystem:
Konzipieren und implementieren Sie die Grundstruktur eines DHT-Knotens, also das Interface zur Applikationsschicht, das Hashing, die DHT Datenstrukturen und ihre Verwaltung.
Testen Sie Ihre Implementierungen mit statischen Werten.
Meilenstein 1: Ein isolierter DHT-Knoten kann lokale Schlüssel- und Knoteninformationen speichern und verwalten.
Workpackage 2 - Chord Protokoll:
Implementieren und testen Sie folgenden Protokollstack. Jeder Chord Knoten kann Messages der folgenden Form empfangen und versenden:
1 5 9 17 byte T sourceIP sourcePort TID Data
Protokollelemente:
T Type of message (byte[1] ← int)
sourceIP die IP-Adresse des Absenders (byte[4] ← InetAddress) sourcePort die Port-Adresse des Absenders (byte[4] ← String) TID TransaktionsID - zufällig durch Sender (byte[8] ← random) Data Message-Type abhängig
Message Types:
Code Wert Data
1 status OK / ERROR (8 byte String)
2 put Hash (byte[20]), corresp. IP (byte[4])+ Port (byte[4]) 3 get Hash (byte[20])
4 join (my) Hash (byte[20])
5 leave (predecessor's) Hash (byte[20]), corresp. IP (byte[4])+ Port (byte[4]) 6 reply IP (byte[4])+ Port (byte[4])
7 successor -
Die Knoten-IDs im Chord-Ring werden einheitlich in folgender Weise ermittelt:
Die jeweils vier Bytes aus IP-Adresse und Port werden unmittelbar konkateniert und mittels der o.g. Hash-Funktion abgebildet. (Hinweis: Indem Sie 16 bit Port-Nummern < 10.000 als 4- byte Strings kodieren, lassen sich in Java bequem Bytearrays erzeugen).
Protokollverhalten:
Die initiierenden Protokollmessages put/get/join/leave erhalten synchron (in derselben TCP-Session) eine Statusmeldung über die erfolgreiche Message-Bearbeitung zurück, alle anderen Antworten geschehen durch reply und sind asynchron (in aufeinander folgenden, verschiedenen TCP-Sessions).
Die Messages put und leave erhalten kein reply, während die Message get im reply die Adresswerte des Datenhalters (also die zum gesuchten Key korrespondierende IP-Adresse + Port) von dem Besitzer des Keys erhält bzw. ein leeres Antwortpaket, wenn der Schlüssel nicht vorhanden ist. Auf ein join (mykey) hin wird vom bisherigen Zuständigen für mykey, mykey's neuer Nachfolger, der bisherige Vorgänger mitgeteilt (also mykey's neuer
Vorgänger).
Die Message successor wird für Chord's stabilize Prozedur benötig. Sie wird ohne Argumente an den gegenwärtigen successor (aus dem leave set) gesandt und mit reply (predecessor) beantwortet.
Einen Protokollsimulator (Reflektor auf Port 8888) mit Verarbeitungsprotokollierung, den
"SimpleServer" finden Sie hier.
Meilenstein 2: DHT Knoten kann protokollgerecht kommunizieren.
Workpackage 3 - Bootstrapping, Routing & Forwarding, Tabellenaufbau
Implementieren und testen Sie ein einfaches Bootstrapping, welches auf einem
gelegentlichen Multicast Advertising jedes Knotens in der Gruppe 239.238.237.17 und dem Port 9017 basiert. Hierzu kann die reply message mit den eigenen
Netzwerkadressen verwendet werden.
Implementieren Sie weiterhin ein Routing und Paket-Forwarding, welches der Chord Algorithmik gehorcht. Füllen Sie dabei auch die Routing-und Schlüsseltabellen.
Ergänzen Sie Ihr Routing durch eine Vervollständigung der Join Operationen.
Meilenstein 3: Die DHT ist nun voll funktionsfähig, aber noch nicht selbstheilend.
Workpackage 4 - DHT Maintenance
Implementieren Sie die Pflegeprozeduren fix_fingers und stabelize gem. Chord-
Publikation. Erhöhen Sie die Robustheit durch ein 'freundliches' leave. Testen Sie die DHT gemeinsam unter wachsender Last.
Meilenstein 4: Die DHT Middleware ist fertig und bereit zum Einsatz in einer Anwendung.