Lösungen zu Blatt 1 - KIT

Werbung
Vorlesung Verteilte Systeme
Übungsblatt 1
Aufgabe 1:
Erläutern sie einige der Vor- bzw. Nachteile von Thin-Client Lösungen.
Aufgabe 2:
Welche der folgenden Aussagen sind wahr oder falsch?
a) Das UDP-Protokoll ist ein verbindungsorientiertes Protokoll.
b) Die Java Socket-Klasse nutzt TCP als Übertragungsprotokoll.
c) Bei der UDP-Übertragung werden keine Portnummern benötigt.
d) Ein Server-Socket kann an mehrere IP-Adressen gebunden werden.
e) Die bind() C API-Funktion nutzt man, um sich von einem Client auf einen Server zu
verbinden.
f) Manche Formen von Sockets erlauben Broadcast-Übertragung von Daten.
g) Die accept() C-API-Funktion nutzt man bei UDP-basierten Sockets, um Datenpakete zu
empfangen.
h) Die Fehlerbehandlung der C Socket-API erfolgt durch Ausnahmebehandlung
(Exceptions).
i) Binäre Datenstrukturen lassen sich transparent über Sockets übertragen.
j) Wenn ein Kommunikationspartner Daten von einem Socket liest, wird nach einer
gewissen Timeout-Zeit automatisch das Lesen abgebrochen, wenn der andere
Kommunikationspartner keine Daten mehr sendet.
Aufgabe 3:
Erläutern Sie die wesentlichen Unterschiede (Eigenschaften) zwischen paketorientierter und
verbindungsorientierter Socketkommunikation.
Aufgabe 4:
a) Was müssen Sie in einem Protokoll alles spezifizieren, um die Kommunikation über
Sockets einigermaßen zu definieren?
b) Wie können sie dabei das Problem der nicht binären Transparenz von Sockets leicht
umgehen?
Aufgabe 5: (Programmieraufgabe)
a) Überlegen sie sich ein einfaches text-basiertes Datenformat, mit dem sie Wetterdaten
(z.B. Temperatur, Druck und Luftfeuchtigkeit) von einer Wetterstation auf einen
zentralen Server übertragen können, der diese Daten in einer Datenbank speichert.
Überlegen sie sich hierzu die Struktur einer Datenbanktabelle, um diese Daten zu
speichern.
b) Schreiben sie dann einen UDP-basierten Server, der Daten in ihrem Format
entgegennimmt, die Daten aus den Nachrichten extrahiert und optional in eine SQLDatenbank, z.B. mySQL, einträgt.
c) Schreiben Sie weiter einen einfachen UDP-Client, der eine Wetterstation emuliert und
periodisch (z.B. alle 10 Sekunden) Messwerte generiert und an den Server sendet.
d) Testen sie dann das Ganze mit einer Instanz des Servers und mehreren parallelen
Wetterstation-Clients.
Vorlesung Verteilte Systeme
Musterlösungen zu Übungsblatt 1
Aufgabe 1:
Bei einer Thin-Client Lösung ist die Applikationslogik (und Datenlogik) auf einem Server
konzentriert. Die Clientseite enthält nur die Präsentationslogik, die im Fall von
Webanwendungen typischer Weise auf dem Server automatisch generiert wird. Dies
vereinfacht zunächst einmal das sogenannte Deployment-Problem. Updates der
Nutzeroberfläche können direkt über das Web an die Clients verteilt werden und benötigen
keine gesonderte Installation. Updates der Applikationslogik können entsprechend einfach
durchgeführt werden, ohne dass die Clientinstallationen „Out of Sync“ zu der Serverseite
sind. Eine Thin-Client Lösung ist auch für Sicherheitsaspekte häufig von Vorteil, da
sicherheitskritische Daten zentral auf dem Server liegen und daher hier geeignet geschützt
werden können.
Wenn innerhalb der Oberfläche einer Applikation komplexe Interaktionen mit dem
Benutzer stattfinden müssen, dabei evtl. lokal auf dem Rechner des Klienten vorliegende
größere Datenmengen eine Rolle spielen und die Vorgänge längere Zeit benötigen, dann ist
eine reine Thin-Clientlösung evtl. nicht geeignet, da eine Übertragung aller
Nutzerinteraktionen auf den Server und die dortige Bearbeitung auch den dauernden
Transfer größerer Datenmengen zum Server sowie eine großen Sessionkontext auf dem
Server bedingen, der diesen unnötig belasten würde (Beispiel: Fotobuch-Software, mit der
Nutzer zunächst ein Fotobuch auf Client erzeugt, dass er dann durch einen Internetanbieter
drucken lassen möchte). In solchen Fällen ist es besser, den Teil der Applikationslogik, der
mit den lokalen Daten auf dem Clientrechner umgehen muss, auf der Clientseite zu
implementieren (in unserem Beispiel die Erstellung des Fotobuchs – nur am Schluss vor
dem Drucken wird dann das gesamte Buch auf den Server übertragen, allerdings in einer
bereits für den Druck optimierten Form).
Aufgabe 2:
a) Falsch
b) Wahr
c) Falsch
d) Wahr
e) Falsch
f) Wahr
g) Falsch
h) Falsch
i) Falsch
j) Falsch
Aufgabe 3:
Bei einer verbindungsorientierten Kommunikation muss zunächst zwischen Client und
Server eine Verbindung aufgebaut werden. Dann lassen sich Daten über read()/write()
Aufrufe als Bytestrom über die stehende Verbindung übertragen. Dabei sorgt die
Flusskontrolle des TCP-Protokolls dafür, dass keine Bytes verloren gehen, und die Bytes in
der Reihenfolge empfangen werden, in der sie abgesendet werden (Strom von Bytes). Bei
der paketorientierten Kommunikation wird keinerlei Verbindung aufgebaut. Stattdessen
werden vollständige Datenpakete mit Adressdaten versehen und dann abgesendet. Der
Absender wartet dabei nicht darauf, dass das Datenpaket auch den Empfänger erreicht. Das
zum Transport benutzte UDP-Protokoll garantiert dabei weder, dass ein Datenpaket
ankommt, noch dass der Absender benachrichtigt wird, wenn das Paket nicht ankommt. Bei
der paketorientierten Kommunikation kann auch die zeitliche Reihenfolge von Paketen (und
damit von Daten) bei Ankunft vertauscht sein.
Aufgabe 4:
a) In einem Protokoll muss zunächst mal die physische Kodierung / Dekodierung der
auszutauschenden Protokollnachrichten spezifiziert werden. Dann muss für jede
Nachricht deren exakter Aufbau und die Reihenfolge der Abläufe (wer sendet welche
Nachricht wann, was muss darauf an Aktion passieren, welcher Returnwert muss
zurückgeliefert werden) definiert werden. Hierbei müssen auch sämtliche
Fehlersituationen, und wie diese behandelt und gemeldet werden, festgelegt werden.
b) Das Problem der nicht-binären Transparenz kann man sehr einfach dadurch umgehen,
dass man alle Nachrichten in Textform gemäß einer festgelegten Zeichensatzkodierung
kodiert.
Aufgabe 5: (10 Pkte)
Der Programmcode für die Aufgabenlösung befindet sich auf der Website der Vorlesung.
Als Format für die Datenübertragung wurde ein textbasiertes Format im ASCII Zeichensatz
verwendet, bei dem ein Datenpaket aus einer Textzeile besteht, die den folgenden Aufbau
hat.
Stationsname Zeitstempel Messgröße Wert
Dabei darf die Gesamtgröße eines Paketes nicht die maximale Größe von UDP-Paketen
überschreiten. Die einzelnen Informationen in der Textzeile sind durch weiße Zeichen
(Whitespace-Zeichen) separiert. D.h. insbesondere, dass sie selbst keine Leerzeichen, etc.
enthalten dürfen. Das Ende der Zeile wird durch ein Newline (\n) gebildet. Der
Stationsname sollte nur aus ASCII-Buchstaben und Zahlen bestehen. Der Zeitstempel ist im
Standardausgabeformat für Timestamp-Angaben in Java. Mögliche Werte für die Angabe
der Messgröße sind „temperature“ (Temperatur), „pressure“ (Luftdruck) und „humidity“
(relative Luftfeuchtigkeit in %). Diese List könnte natürlich auch noch vervollständigt
werden. Die Messwerte selbst sind in englischer Notation (d.h. Nachkommastellen sind
durch Punkt und nicht durch Komma getrennt. Weder Client noch Server führen irgendeine
Fehlerbehandlung durch. Datenpakete mit fehlerhaftem Format werden vom Server einfach
ignoriert.
Die obige Beschreibung definiert das Protokoll der Client-Server Kommunikation.
Der von mir bereitgestellte Beispielserver speichert die Messdaten in einer
Datenbanktabelle, die ebenfalls die im Protokoll aufgeführten Informationen enthält. Über
den Stationsnamen können die Messdaten mit weiteren Informationen zur Messstation
selbst, wie z.B. den geographischen Standort, innerhalb der Datenbank verknüpft werden.
Eine weitere Tabelle könnte für die physikalischen Messgrößen weitere Informationen, wie
z.B. Einheit, etc. festhalten. Der Beispielclient erzeugt über ein Random-Verfahren
Temperaturdaten und schickt sie protokollgemäß an den Server. In einem realen Szenario
würden die Messdaten natürlich von einer Hardware-Wetterstation kommen, die z.B. über
USB an einem Rechner angeschlossen ist und ihre Werte von einer Außenstation per Funk
enthält.
Herunterladen