Computerkommunikation

Das Internet ist heute allgegenwärtig! Professionelles Arbeiten ohne Internet ist in vielen Bereichen gar nicht mehr möglich. Und natürlich macht das Internet auch in der Freizeit Spass.
Wir stellen in diesem Kurs das Internet ins Zentrum. Wir wollen uns aber höchstens am Rande mit den Dingen befassen, die den Anwender im Alltag interessieren. Das Ziel ist, hinter die Kulissen zu schauen und verstehen zu lernen, wie das Internet funktioniert. Wir werden dabei grundlegende Mechanismen und Prinzipien antreffen, die für die Kommunikation zwischen Computern allgemein eine grosse Bedeutung haben.

Internet

Wir beginnen mit einer einfach verständlichen Übersicht. Dabei werden Begriffe wie Schichtenmodell, Protokoll, Service, Verbindung, Router etc. geklärt.

In einem anschliessenden Teil wird spezifisch auf die Anwendungsschicht eingegangen. Es handelt sich um den Teil, wo die vielen mächtigen Applikationen wie World Wide Web, E-Mail etc. aber auch solche, die weniger offensichtlich täglich wahrgenommen werden, wie verteilte Datenbanksysteme, vernetzte Steuerungen etc. angesiedelt sind. Es wird das Client-Server Modell vorgestellt und grossen Wert auf die Programmierung verteilter Applikationsbeispiele gelegt. Wir werden einen eigenen Web-Server, der sogar dynamische Webseiten unterstützt, wie auch einen Mail-Client programmieren.

Bei der Behandlung der Anwendungsschicht werden wir feststellen, dass verteilte Applikationen ähnliche Dienstanforderungen haben oder anders ausgedrückt, dass es viel einfacher ist, verteilte Applikationen zu programmieren, wenn Dienste wie Remote Procedure Call (RPC) oder Remote Method Invocation (RMI) zur Verfügung stehen würden. Kurz gesagt kann man mit RMI Methoden eines entfernten Objekts (remote object), welches auf einer anderen Maschine lokalisiert ist, nach einem gewissen Initialisierungsaufwand genau so einfach benutzen, wie solche lokaler Objekte. Die erwähnten Dienste fast man heute unter dem Begriff Middleware zusammen. Auch in diesem Teil werden wir selbst Programmbeispiele entwickeln.

Natürlich beschränken wir uns nicht allein auf die Applikationsschicht. Wir behandeln auch alle unteren Schichten des Internet. Ganz tief unten geht dort um Fragen, wie Bits über ein Medium (Draht, Glasfasern, Funkäther) übertragen werden können, wie der Zugriff mehrerer Stationen auf ein gemeinsames Medium geregelt wird, wie verhindert werden kann, dass ein Sender einen Empfänger mit Daten überflutet. Nebst allgemein gültigen Verfahren werden wir u.a. auf Ethernet eingehen, welches heute die dominierende drahtgebundene Netztechnologie ist. Weiter oben wenden wir uns dem Routing zu, klären, was ein Router, ein Switch ist oder was unter NAT zu verstehen ist, etc. etc. Schliesslich studieren wir auch die recht komplexe Funktionsweise des Transmission Control Protocols TCP.

Drahtlose und mobile Kommunikation

Dem heutigen Trend zu mobiler, drahtloser Kommunikation folgend, werden wir mobile Kommunikation speziell betrachten. Es beginnt damit, dass die spezifischen Eigenschaften des "Äthers" studiert werden und geeignete Übertragungsverfahren behandelt werden. Konkret werden wir auf GSM (Natel), GPRS, UMTS sowie WLAN und Bluetooth eingehen und diese interessanten Systeme kennen lernen.

Verteilte Systeme

Verteilte Systeme gliedern sich in Teilsysteme (Knoten), die auf verschiedene Rechnerplattformen verteilt sind. Die Knoten können miteinander kommunizieren. Gemeinsam gewährleisten sie das Funktionieren des Gesamtsystem.

Wir realisieren von Grund auf eine verteilte Applikation. Nachdem wir Remote Method Invocation (RMI) als sehr mächtigen Kommunikationsmechanismus kennen gelernt haben, verwenden wir hauptsächlich diesen, ergänzend aber auch Web Services. 

Verteilte Spiele bieten sich als Studienobjekte an, weil an ihnen interessante Mechanismen studiert werden können und weil sie gegenüber irgendwelchen trockenen Beispielen auch mehr Spass machen.

In den letzten Kursdurchführungen haben wir uns auf Kartenspiele konzentriert. Der Grundaufbau der meisten Kartenspiele kann gleich gewählt werden. Konkrete Spiele, wie in unserem Beispiel "Jass", benötigen dann noch ein paar spezifische Ergänzungen.

 

Bei unserem Jass muss sich jeder Spieler zuerst mit Namen und Photo auf unserem zentralen LDAP-Server registieren.

Irgend ein Spieler kann eine Spielrunde starten. Das Spiel wird dann im LDAP-Server eingetragen und damit für alle anderen potentiellen Mitspieler sichtbar. Wer Lust hat, eine Runde zu jassen, startet auf seiner Maschine das GUI (siehe Bild), schliesst sich einer Spielrunde an und kann dann mitspielen. Als verteiltes Spiel funktioniert es selbstverständlich weltweit.

Verteilte Algorithmen

Verteilte Systeme weisen spezielle Eigenheiten auf, die sich in entsprechenden Algorithmen niederschlagen.

Beispielsweise werden Daten oft nicht an einer Stelle zentral, sondern über die Knoten verteilt verwaltet. Um die Sicherheit gegen Datenverlust und die Verfügbarkeit zu erhöhen, werden sie oft sogar redundant gespeichert. Es gibt also für jedes Datum mehrere Kopien. Sofern nicht gerade alle Knoten, die Kopien speichern, ausfallen und somit wenigstens noch eine Kopie übrig bleibt, sind die Daten für den noch funktionierenden Rest des Gesamtsystems immer noch verfügbar. Schalten sich temporär ausgefallene Knoten nach einer gewissen Zeit wieder zu, sind in der Zwischenzeit veraltete Kopien nachzuführen. Dies muss im Betrieb geschehen, also in einer Situation, in der ständig Daten gelesen und auch neu geschrieben werden. Natürlich sind besondere Algorithmen vorzusehen, damit den Benützern gegenüber eine sogenannt konsistente Sicht geboten werden kann. Darunter versteht man beispielsweise, dass einem Benutzer nicht vom einen Datum ein aktueller und von einem anderen ein veralteter Wert ausgeliefert werden darf.

Das Beispiel der Datenverwaltung soll zeigen, dass verteilte Systeme redundant ausgelegt werden können, so dass in einem gewissen Mass Konten ausfallen können, ohne die Funktion des funktionierenden Rests total zu beeinträchtigen.

Ein weiteres Charakteristikum sind parallele Abläufe. Jeder Benutzer startet eine Aktivität, die sich als Prozess über die Knoten hinweg zieht. Verteilte Algorithmen müssen diese Prozesse koordinieren.

Diese, natürlich sehr unvollständige Aufzählung spezifischer Eigenschaften verteilter Systeme soll zeigen, dass zu deren Beherrschung ein fundierter theoretischer Background nötig ist.

Aus der Fülle der verteilten Algorithmen greifen wir zuerst das Thema logische Zeit und logische Uhren heraus. Logische Uhren können Zeiten (Zeitstempel) liefern, die mit den realen Zeitangaben wenig zu tun haben, aber trotzdem gewisse, für viele Algorithmen ausreichende Bedingungen erfüllen. Beispielsweise muss es so sein, dass ein Ereignis a, welches vor dem Ereignis b stattfindet, einen kleineren Zeitstempel ts(a) kriegen muss, wie derjenige ts(b) des Ereignisses b.

Mit Hilfe logischer Uhren können wir dann die Synchronisation verteilter Transaktionen nach den Timestamp-Ordering Verfahren betrachten. Verteilte Transaktionen sind Operationsfolgen, die gewisse Eigenschaften aufweisen. Beispielsweise wird verlangt, dass entweder alle oder dann halt gar keine Operation ausgeführt wird. "Halbe" Transaktionen sind nicht erlaubt, da sie zu inkonsistenten Zuständen führen können.

IT - Security

Leider ist heute das Internet auch Ziel permanenter Attacken. Die Sicherheit ist deshalb zu einem zentralen Thema geworden. Wir werden uns hier zuerst überlegen, welche Sicherheitsbedürfnisse denn abgedeckt werden müssen und dann symmetrische und Public-Key-Verfahren kennen lernen. Die Sicherheit betrifft alle Ebenen des Internets. Wir werden also Sicherheitsmechanismen von GSM (Natel) über Bluetooth, IPSec, Virtual Private Network (VPN) bis zur digitalen Unterschrift einer E-Mail antreffen.