
| Datum | Autor | Änderung | Version |
|---|---|---|---|
| 28.02.2006 | Dr. Oliver Wellnitz | Initiale Version | 1.0 |
In diesem Jahr soll ein Chatsystem für mobile und drahtlose Netze erstellt werden, dass ohne Infrastruktur wie zum Beispiel einen zentralen Server auskommt. Dabei werden die Nachrichten ähnlich wie in einem Peer-to-Peer Netz direkt vom Absender an den bzw. die Empfänger geschickt. Ist ein Empfänger nicht direkt erreichbar, so kann gegebenenfalls ein anderer Netzteilnehmer die Nachricht stellvertretend entgegennehmen und seinerseits an den Empfänger weiterleiten.
Im Internet existieren bereits verschiedene Arten von Chatsystemen. Das bekannteste davon ist der Internet Relay Chat (IRC). In den letzten Jahren sind mobile Geräte und Anwendungen über drahtlose Netze stark im Kommen. Dabei versprechen Ad-hoc Netze eine direkte, drahtlose Kommunikation der Teilnehmer untereinander ohne dabei auf eine Infrastruktur wie zum Beispiel einen WLAN-Accesspoint angewiesen zu sein. Solchen Ad-hoc Netze können spontan und an beliebigen Orten entstehen. In diesem Praktikum wollen wir nun ein Chatsystem für diese Art von Netzen erschaffen. Hierbei soll es möglich sein von einem beliebigen Ort aus an einem Chat teilzunehmen, solange man eine drahtlose Verbindung zu mindestens einem Teilnehmer des Netzes aufrecht erhält. Teilnehmer können sich also auch während einer Chatverbindung beliebig bewegen, das Chatsystem findet automatisch einen neuen Weg durch das Netz zu allen Teilnehmern. Und sollte doch einmal die Verbindung abreissen, dann werden trotzdem keine wichtigen Nachrichten verpasst. Die fehlenden Informationen werden im Netz solange gespeichert bis der Teilnehmer wieder erreichbar ist. Dieses Praktikumsthema berührt dabei forschungsrelevante Themen des Instituts wie z.B. der Umgang mit der Mobilität von Teilnehmern, der Wegewahl durch das Netz und der Paritionierung von Ad-hoc Netzen.
Das Programm ist wahlweise in der Programmiersprache C, C++ oder Java zu erstellen. Die Wahl der Programmiersprache ist dabei gruppeneinheitlich zu treffen.
Für die einzelnen Phasen des Praktikums gibt es pro Gruppe jeweils einen Phasenverantwortlichen, der für das Erreichen des Phasenziels verantwortlich ist.
Dieses Dokument beschreibt das Ad-hoc Chatsystem für mobile Netze, das als Aufgabe des Softwareentwicklungspraktikums im Sommersemester 2007 durchgeführt wird. Die zu implementierenden Fähigkeiten des Programms werden in den nachfolgenden Abschnitten beschrieben.
Die Aufgabe wird von allen Gruppen parallel bearbeitet. Die jeweiligen Lösungen sollen zueinander kompatibel sein. Aus diesem Grund gibt es eine gemeinsame Protokollspezifikation (kommt demnächst), die Teil dieses Lastenheftes ist. Interoperabilitätstests mit den Programmen der anderen Gruppen sind spätestens am Ende der Implementationsphase geeignet durchzuführen.
Da wir leider nicht jeder Gruppe für die Dauer des Praktikums Notebooks zum Testen zur Verfügung stellen können, wird die Entwicklung an stationären Rechnern im CIP-Pool (Raum G40) unter Mac OS X durchgeführt. In einem Abschlusstest soll die entwickelte Software jedoch auf Notebooks demonstriert werden, die unter Linux laufen. Aus diesem Grund ist auf eine plattformunabhängigkeit des zu entwickelnden Programms zu achten. Der Zugang zu Linux Rechnern zum Testen des eigenen Programms unter Linux wird während des gesamten Praktikums gegeben sein.
Mit dem Programm sollen Benutzer in der Lage sein miteinander Daten auszutauschen. Hierbei können sowohl Textnachrichten wie auch Binärdaten ausgetauscht werden. Alle Benutzer sind innerhalb des Ad-hoc Chatsystems mit einem eindeutigen Namen zu identifizieren.
Die Kommunikation zwischen Benutzern geschieht dabei immer innerhalb eines expliziten Kommunikationskanals, der im gesamten System eindeutig zu identifizieren ist. Der Benutzer des Programms muss die Möglichkeit haben einen neuen Kommunikationskanal zu eröffnen, die Liste aller aktuell verfügbaren Kommunikationskanäle anzuzeigen, einem existierenden Kommunikationskanal beizutreten sowie ihn wieder zu verlassen. Nachrichten von einem Benutzer eines Kommunikationskanals werden immer an alle Mitglieder dieses Kanals gesendet. Die Gesamtanzahl von Kommunikationskanälen ist dabei nicht begrenzt. Die Übertragung von Nachrichten an die Mitglieder eines Kanals geschieht dabei bestätigt. Das bedeutet, dass jedes Mitglied den Empfang einer Nachricht quittiert. Diese Quittungen sind dem Sender innerhalb des Programmes geeignet anzuzueigen. Ein Benutzer kann gleichzeig Mitglied in mehreren Kommunikationskanälen sein.
Details zum Nachrichtenformat sowie zum vorgehen der Weiterleitung von Nachrichten sind in der Protokollspezifikation (kommt demnächst) zu finden.
Da das Versenden von Nachrichten im Chatsystem in einem drahtlosen Ad-hoc Funkübertragungssystem stattfindet, kann nicht immer gewährleistet werden, dass alle Empfänger zu jeder Zeit erreichbar sind. Sollte ein Mitglied eines Kommunikationskanals zum Zeitpunkt des Versendens einer Nachricht nicht erreichbar sein, so ist die Nachricht geeignet zu speichern und an das Mitglied auszuliefern, sobald es wieder im Netz erreichbar ist. Verzögert empfangene Nachrichten sind dem Benutzer in geeigneter Weise anzuzeigen.
Nachrichten werden durch das Netz Hop-by-hop vom Sender der Nachricht zu den Empfängern (den Mitgliedern des Kommunikationskanals) weitergeleitet. Dabei ist es möglich den Datenverkehr auf den weiterleitenden Stationen mitzulauschen. Um dies zu verhindern, soll die Möglichkeit geschaffen werden Kommunikationskanäle zu verschlüsseln. Hierbei existiert ein gemeinsamer Schlüssel für einen Kommunikationskanal, der den Mitgliedern beim Betreten des Kanals mitgeteilt wird. Die Verwaltung des Schlüssels geschieht dabei durch ein beliebiges Mitglied des Kanals. Zur Implementation der Verschlüsselung kann auf einen existierende Bibliothek mit Verschlüsselungsroutinen zurückgegriffen werden.
Da die Entwicklung und das Testen des Programms in einem drahtlosen Funknetz nur umständlich möglich ist und auch die hierfür benötigte Hardware den Gruppen dauerhaft nicht zur Verfügung gestellt werden kann, soll zusätzlich eine Peerverwaltung in das Chatsystem eingebaut werden.
In dieser Peerverwaltung kann durch den Benutzer festgelegt werden, welche anderen Instanzen des Programms direkt erreichbar sind. Beispiel: Drei Instanzen des Programms werden auf den Rechner A, B und C gestartet. In der Peerliste von A und C wird jeweils nur Rechner B angegeben. In der Peerliste von B steht sowohl A als auch C. Somit entsteht das folgende Netz im Chatsystem:
In diesem Beispiel können Rechner A und C also nicht direkt, sondern nur über den Rechner B kommunizieren. Die Peerverwaltung soll Einträge von Rechnernamen bzw. IP-Adressen sowie Ports erlauben. Während des Betriebs des Programmes müssen beliebige Änderungen an der Peerverwaltung möglich sein. Ebenso muss die Peerverwaltung über einen Schalter ein- sowie ausgeschaltet werden können. Im ausgeschalteten Zustand ist die direkte Kommunikation mit allen erreichbaren Rechner möglich.
Das zu entwickelnde Programm soll sich dem Benutzer mittels einer graphischen Benutzeroberfläche präsentieren und komfortabel bedienbar sein. Hierbei ist zu beachten, dass die Oberfläche sowohl unter MacOS X als auch unter Linux lauffähig sein soll. Mit Java sollte eine portable GUI wenig Probleme machen. Bei der Benutzung von C++ kann auf die WxWidgets Bibliothek zurückgegriffen werden, die gleichwohl unter Mac OS wie auch unter Linux funktioniert.