Technische Universität Ilmenau Fakultät für Elektrotechnik und Informationstechnik Studienarbeit Multicastrouting in Ad-hoc-Netzwerken vorgelegt von: eingereicht am: Falk Ahlendorf 09. 12. 2008 geboren am: Studiengang: Studienrichtung: Ingenieurinformatik Informatikkomponenten für Intelligente Systeme Anfertigung im Fachgebiet: Kommunikationsnetze Fakultät für Elektrotechnik und Informationstechnik Verantwortlicher Professor: Wissenschaftlicher Betreuer: Prof. Dr. rer. nat. habil. Jochen Seitz Dipl.-Ing. Maik Debes Kurzfassung Immer mehr mobile Geräte mit Funknetzwerkfunktionen dominieren den Markt. Diese Geräte arbeiten meist mit stromsparender Hardware und damit ist ihre Reichweite begrenzt. Auf Grund dessen steigt auch das Interesse Multihop-Kommunikation zwischen diesen Geräten zu gewährleisten, um die Reichweite der Kommunikation zu vergrößern. Das Ad hoc On-Demand Distance Vektor Routing (AODV) wurde extra entwickelt, um in solchen mobilen Netzwerken Unicast- und Multicast-Kommunikation zu ermöglichen. Diese Arbeit beschäftigt sich speziell mit der Multicasterweiterung des AODVProtokolls. Im Weiteren wird diese Erweiterung mit Hilfe des modularen Routingwerkzeuges Click“ implementiert. Anschließend werden die dabei entstandenen Soft” waremodule in den Demonstartor für kontextsensitives Routing integriert und auf ihre Funktionsfähigkeit hin untersucht. Damit schafft diese Arbeit die Grundlage für eine Multicast-Kommunikation im Demonstartor. Inhaltsverzeichnis i Inhaltsverzeichnis 1 Überblick 1.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Grundlagen 2.1 Theoretische Grundbegriffe . . . . . . . . . . . . . . . . . . . 2.1.1 Routing . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.2 Kommunikationsformen in einem Netzwerk . . . . . . 2.1.3 Ad-hoc-Netzwerke . . . . . . . . . . . . . . . . . . . 2.2 Die Netzwerkprotokolle . . . . . . . . . . . . . . . . . . . . . 2.2.1 AODV-Protokoll . . . . . . . . . . . . . . . . . . . . 2.2.2 Multicast AODV . . . . . . . . . . . . . . . . . . . . 2.2.2.1 Die Routingtabelle . . . . . . . . . . . . . . 2.2.2.2 RREQ-Nachrichtenformat . . . . . . . . . . 2.2.2.3 Das RREP-Nachrichtenformat . . . . . . . . 2.2.2.4 MACT-Nachricht . . . . . . . . . . . . . . . 2.2.2.5 GRPH-Nachricht . . . . . . . . . . . . . . . 2.2.2.6 Der Group Leader . . . . . . . . . . . . . . 2.2.2.7 Beitreten einer Multicastgruppe . . . . . . . 2.2.2.8 Verlassen einer Multicastgruppe . . . . . . . 2.2.2.9 Netzwerkpartitionierung . . . . . . . . . . . 2.2.2.10 Wiedervereinigung von Netzwerkpartitionen 2.2.2.11 Weiterleiten von Datenpaketen . . . . . . . 3 Implementierung 3.1 Schwachstellen des MAODV Protokoll 3.1.1 Verlorene MACT-Nachrichten . 3.1.2 Asymetrischer Linkausfall . . . 3.1.3 Tote Äste“ . . . . . . . . . . . ” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 2 . . . . . . . . . . . . . . . . . . 4 4 4 5 6 7 7 8 9 10 13 14 15 17 17 19 20 22 23 . . . . 25 25 25 26 26 Studienarbeit Falk Ahlendorf Inhaltsverzeichnis 3.2 3.3 3.4 3.5 ii 3.1.4 Lösungsansätze der Probleme . . . . . . Die verwendete Software . . . . . . . . . . . . . Die neuen Elemente . . . . . . . . . . . . . . . . 3.3.1 Das Element MulticastRoutingTabelle . 3.3.2 Das Element Multicastactivationmessage 3.3.3 Das Element GroupHello . . . . . . . . . 3.3.4 Das Element Controler . . . . . . . . . . 3.3.5 Das Element Forwarder . . . . . . . . . Angepasste Elemente . . . . . . . . . . . . . . . 3.4.1 Das Element AODVDestinationClassifier 3.4.2 Das Element AODVKnownClassifier . . 3.4.3 Das Element AODVGenerateRREP . . . 3.4.4 Das Element AODVGenerateRREQ . . . Anpassungen im Clickroutergraph . . . . . . . . 4 Tests 4.1 Einleitung . . . . . . . . . . . . . . . . . . 4.2 Test der Initialisierungsprozedur . . . . . . 4.3 Multicastbaum Aufbau- und Reperaturtest 4.4 Test des Kontextrouters . . . . . . . . . . 4.5 Nachweis der Multicastkommunikation . . 4.6 Kontextrouter Multicasttest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 28 28 29 30 32 33 33 34 34 34 34 35 35 . . . . . . 37 37 39 40 43 44 47 5 Zusammenfassung und Ausblick 50 A Software und Konfigurationsdateien A.1 Clickscript des Kontextrouters . . . . . . . . . . . . . . . . . . . . . . . A.2 Clickscript der Zwischenknoten . . . . . . . . . . . . . . . . . . . . . . 51 51 64 Literaturverzeichnis 70 Abbildungsverzeichnis 72 Tabellenverzeichnis 74 Abkürzungsverzeichnis und Formelzeichen 75 Erklärung 76 Studienarbeit Falk Ahlendorf 1 Überblick 1 1 Überblick Dieses Kapitel soll dem Leser einen Überblick über das Thema der Arbeit geben. Im Weiteren wird auf die detaillierte Aufgabenstellung der Studienjahresarbeit genannt. 1.1 Einführung Die Entwicklung von mobilen Geräten schreitet stetig voran. Es werden immer noch stromsparendere Komponenten entwickelt. Die Batterien machen den größten Teil des Gewichtes eines solchen Gerätes aus. Durch die effizienteren Komponenten können auch kleinere Baterien verwendet werden. Daraus resultiert, dass das Gewicht solcher Geräte immer stärker abnimmt. Die Leistungsfähigkeit dieser Geräte nimmt hingegen immer weiter zu. Deshalb werden die Geräte auch immer attraktiver für den Endverbraucher. Eine Vielzahl dieser Geräte verfügt heutzutage standardmäßig über Bluetooth und WLAN. Damit einhergehend steigt natürlich auch das Interesse, Kommunikation zwischen den Geräten zu betreiben. Aufgrund ihres mobilen Charakters, ist die Reichweite der Geräte sehr eingeschränkt. Eine kostengünstig Variante die Reichweite zu erhöhen, ist ein Ad-Hoc-Netzwerk mit Multihop-Kommunikation. Um für die Weiterleitung der Datenpakete die richtigen Wege zu finden, benötigt man auch ein speziell angepasstes Routingverfahren. Das Ad hoc On-Demand Distance Vektor (AODV) Routing (RFC 3561) ist eine mögliche Realisierung eines solchen Routingverfahrens. Es ermögliche unicast und multicast Routing in einem Ad-hoc-Netzwerk. Da jeder Knoten in dem Netzwerk die Nachrichten für andere Knoten weiterleiten muss, sollte darauf geachte werden, dass die Kommunikation möglichst effizient gestaltet wird. Multicast ist eine solche effiziente Möglichkeit, um eine Nachricht an mehrere Knoten zuzustellen. Deshalb beschäftigt sich diese Arbeit vor allem mit der Multicasterweiterung des AODV-Protokolls, welche auch als MAODV bezeichnet wird. Die Protokollerweiterung wird in dieser Arbeit ausführlich erläutert und anschließend mit Hilfe des Click1 -Routers implementiert. Der letzte Teil der Arbeit beschäftigt sich anschließend mit dem ausführlichen Test der Protokollerweiterung. 1 Click ist ein am MIT entwickeltes Softwarepaket, zur Programmierung von Netzwerkroutern. Studienarbeit Falk Ahlendorf 1 Überblick 2 1.2 Aufgabenstellung Ein Forschungsbereich des Fachgebietes Kommunikationsnetze beschäftigt sich mit der Untersuchung vermittlungstechnischer Prozesse in Kommunikationsnetzen. Dabei stehen vor allem paketvermittelte Netze im Vordergrund. Es wird nach neuen Wegen gesucht, die Wegewahl effzienter und an die Bedürfnisse des Nutzers angepasst zu gestalten. Damit dieses Ziel erreicht wird, soll beispielsweise auch der Kontext des Nutzers in die Routingentscheidung einfließen. Ein Konzept sieht deshalb vor, dass sich innerhalb eines Kommunikationsnetzes spezielle Router - die so genannten Kontextrouter befinden, die Informationen über dort eingebundene kontextsensitive Server enthalten. Mit diesem Wissen können die Router, dann Diensteanfragen, an den am besten für den Nutzer geeigneten Server weiterleiten. Zur Untersuchung der Prozesse in einem solchen Netzwerk wurde der DekoR (Demonstrator für kontextsensitives Routing) entwickelt. Als Basis dient hier das Routingprotokoll AODV (Ad hoc On-Demand Distance Vector). Dieses Protokoll wurde zwar für das kontextsensitive Routing erweitert, ist aber auch weiterhin kompatibel zur unmodifizierten Version. Aktuell werden die Kommunikationsprozesse im DekoR mit Hilfe von Uni- und Broadcasts realisiert. Zur Optimierung ist nun in einem nächsten Entwicklungsschritt vorgesehen, die Broadcast- durch Multicast-Kommunikation zu ersetzen. Hierbei soll mit den Kontextroutern begonnen werden. Als Arbeitspunkte sind daher anzugehen: • Einarbeitung Die komplexe Thematik erfordert eine Einarbeitung in das Konzept des kontextsensitiven Routings, in die DekoR-Umgebung sowie in das AODV (RFC 3561) und die dazu gehörige Erweiterung zur Unterstützung von Multicasts. • Konzept Es ist ein Konzept zu erstellen, das die Funktionen einer Multicast-Umgebung realisiert. Zu berücksichtigen ist, dass der DekoR sowohl Ad-hoc-Netze als auch Insfrastrukturnetze unterstützt. Das Konzept muss den aktuellen Standards der jeweiligen Netzwerke entsprechen. • Realisierung Das Konzept ist für den im DekoR eingebundenen Kontextrouter umzusetzen. Dieser wurde bereits mit dem Softwarewerkzeug Click realisiert und ist entsprechend zu erweitern. Studienarbeit Falk Ahlendorf 1 Überblick 3 • Verifizieren Verschiedene Tests sollen die Erweiterungen verifizieren. Dazu sind aussagekräftige Szenarien zu entwickeln und durchzuführen. Studienarbeit Falk Ahlendorf 2 Grundlagen 4 2 Grundlagen Dieses Kapitel gibt einen Einblick in die theoretischen Grundlagen der Arbeit. Es enthält eine Einführung in den Begriff des Multicast-Routings und seine Bedeutung in Bezug auf Ad-hoc-Netzwerke. Im Weiteren folgt dann eine Erläuterung über die Funktionsweise des MAODV Protokolls. 2.1 Theoretische Grundbegriffe 2.1.1 Routing Wie in [Wiki08f] nachzulesen ist, kommt der Begriff des Routings aus dem Englischen und bedeutet Lotsen“, Wegewahl“ oder auch Verkehrslenkung“. Das Routing ” ” ” in paketvermittelten Netzwerken ist dafür verantwortlich, dass die Pakete einen Weg von Sender zum Empfänger finden. Dazu müssen sie meist von anderen Teilnehmern des Netzes weitergeleitet werden. Damit die Datenpakete am Empfänger ankommen, müssen die beteiligten Netzteilnehmern den Weg zum Ziel kennen. Die so genannten Routen bezeichnen dabei die möglichen Wege, die ein Paket durch ein Netzwerk nehmen kann. Es ist möglich, diese Routen manuell festzulegen. Die so festgelegten Wege werden als statisches Routen bezeichnet. In Netzwerken bei denen es schnell zu Änderungen kommen kann, ist dies allerdings mit einem hohen Aufwand verbunden. Für solche Netzwerke gibt es Algorithmen, die die bestmögliche Route zu finden versuchen. Die so festgelegten Routen werden als dynamische Routen bezeichnet. Damit die Routen zwischen den Knoten1 nicht bei jedem eintreffenden Paket neu ermittelt werden müssen, werden diese in einer Routingtabelle im Knoten abgelegt. Der Knoten muss dann bei einem eintreffenden Paket nur noch in der entsprechenden Tabelle nachschlagen, an welchen nächsten Knoten das Paket weitergeleitet werden soll. 1 Ein Knoten ist ein Teilnehmer eines Netzwerkes. Studienarbeit Falk Ahlendorf 2 Grundlagen 5 2.1.2 Kommunikationsformen in einem Netzwerk In einem Netzwerk gibt es verschiedene Möglichkeiten Pakete auszuliefern und zu verteilen. 1. Unicast bezeichnet dabei das Zustellen der Nachricht an einen ausgewählten Knoten im Netzwerk, wie in [Wiki08g] nachzulesen ist. Bei dieser Kommunikationsform komuniziert ein Sender mit genau einem Empfänger. 2. Broadcast beschreibt nach [Wiki08c] die Möglichkeit, an alle Knoten im Netzwerk eine Nachricht zu schicken. Bei dieser Kommunikationsform stehen einem Sender viele Empfänger gegenüber. 3. Multicast ist die Möglichkeit, eine Nachricht nur an eine ausgewählte Gruppe in einem Netzwerk zuzustellen. Nachzulesen ist dies in [Wiki08e]. Es gibt bei dieser Kommunikationsform wieder nur einen Sender aber eine Gruppe von Empfängern. 4. Anycast ist eine Auslieferungsmethode, bei der ein Paket an einen beliebigen Knoten aus einer Gruppe von möglichen Knoten zugestellt wird. Typischerweise wird der dem Senderknoten am nächsten liegende Knoten gewählt. Wie in [Wiki08b] dargelegt ist, gibt es wieder nur einen möglichen Sender aber eine Gruppe von potentiellen Empfängern. Bei Multicast werden Datenpakete nicht durch den Absender mehrfach verschickt, sondern alle Empfänger werden mit einmal addressiert. Unterstützt das zugrundeliegende Netzwerk Multicast, wird die Vervielfachung der Datenpakete meist im Netzwerk vorgenommen(siehe [Wiki08e]). Damit ist Multicast ein sehr effizienter Weg, um die gleichen Datenpakete an verschiedene Empfänger zu senden. Vor allem bei Netzwerken, bei denen auf Übertragungsbandbreite geachtet werden muss. In Ad-Hoc-Netzwerken kommt dem Multicast außerdem noch eine besondere Bedeutung zu. Es wird dazu genutzt, um ein Netzwerk zu fluten. Das heißt, dass eine Nachricht an alle Knoten in einem Netzwerk zugestellt werden soll. In einem normalen Netzwerk kann das mit Hilfe der limited broadcast“-Adresse passieren oder aber ” mit der directed broadcast“-Adresse. In einem Ad-hoc-Netzwerk geht dies aber nicht. ” Wie in [Bake95] erläutert ist, darf die limited broadcast“ Adresse nicht geroutet wer” den. Daher erreicht man mit ihr lediglich seine Nachbarn. Für die directed broadcast“ ” Adresse wird einen Routingpräfix benötigen. Aus [PeBRD01] ist zu entnehmen, dass dieser in einem Ad-Hoc-Netzwerk nicht ausgewählt werden kann. Studienarbeit Falk Ahlendorf 2 Grundlagen 6 Der DekoR verwendet für das bekanntmachen und auffinden von Kontextroutern ICMP-Advertisements und ICMP-Solicitation Nachrichten, nachzulesen in [Debe07]. Diese Nachrichten werden per Broadcast versendet und unterliegen deshalb den oben bereits genannten Restriktionen. Diese Einschränkungen könnten umgangen werden, wenn die ICMP-Advertisements und die ICMP-Solicitations nicht mehr per Brodacst sondern per Multicast versendet werden würden. 2.1.3 Ad-hoc-Netzwerke Laut [Wiki08a] ist, dass Ad-hoc eine lateinische Bezeichnung ist und soviel bedeute wie für diesen Augenblick gemacht“. Bei Ad-hoc-Netzwerken handelt es sich um ” Funknetze, die aus mindestens zwei Endgeräten (auch als Netzwerkknoten bezeichnet) bestehen. Verwendung findet diese Art von Netzwerken immer dann, wenn man mobile Geräte wie Mobieltelefone, PDA’s oder aber auch Notebooks ohne einen zentralen Zugangspunkt miteinander verbinden will. Dabei gewinnt vor allem die Klasse der mobilen Ad-hoc-Netze immer mehr an Einfluss. Als mobile Ad-hoc-Netzwerke werden nach [Wiki08d] Ad-hoc-Netzwerke bezeichnet, welche aus mobilen Knoten bestehen, die in der Lage sind sich selbstständig zu konfigurieren und ein Ad-hoc-Netzwerke aufzubauen. In einem Ad-hoc-Netzwerk wird zwischen zwei Verbindungsmöglichkeiten der Knoten unterschieden. Dies ist zum einen die direkte Verbindung, bei der sich der Start und Ziel Knoten einer Kommunikation direkt erreichen können. Zum anderen gibt es noch die indirekte Verbindung. Dabei können zwei Knoten nur Nachrichten austauschen, wenn diese über Zwischenknoten weitergeleitet werden. Damit dies funktioniert, muss jeder Knoten in einem Ad-hoc-Netzwerk neben seiner Funktion als Endgerät auch immer die Funktion eines Routers übernehmen. Hinzu kommt noch, dass sich die Knoten in einem solchen Netzwerk bewegen können. Das führt dazu, dass auch die Wege, welche Datenpakete durch ein solches Netzwerk nehmen, ständigen Änderungen unterworfen sind. Um in einem solchen Netzwerk Nachrichten austauschen zu können, benötigt man ein speziell angepasstes Routingverfahren. Diese müssen möglichst schnell auf Änderungen reagieren und die Netzwerkknoten dabei aber nicht übermäßig stark belasten. Das AODV-Protokoll ist eine mögliche Realisierung eines solchen Routingprotokolls. Studienarbeit Falk Ahlendorf 2 Grundlagen 7 2.2 Die Netzwerkprotokolle 2.2.1 AODV-Protokoll Das AODV-Protokoll ist ein Verfahren, welches die Kommunikation von mobilen Knoten in einem Ad-hoc-Netzwerk ermöglicht. AODV übernimmt dabei in einem Netzwerk das Finden und Erhalten von Routen. Ist erst einmal ein Weg durch ein Netzwerk gefunden, so spielt AODV bei der Übertragung der Datenpakete keine Rolle mehr. Die Wege durch ein Netzwerk werden dann ermittelt, wenn sie benötigt werden. Dabei wird mit Hilfe von Sequenznummern sichergestellt, dass die gefundenen Wege schleifenfrei sind. Das Protokoll wurde bereits 1997 von Charles Perkins, Elizabeth M Royer und Samir Ranjan Das entwickelt und im Juli 2003 als RFC 3561 [PeBRD03] verabschiedet. Bei der Entwicklung dieses Protokolls wurde von vornherein darauf geachtet, dass es sich durch geringe Netzwerkbelastung und niedrigen Speicherverbrauch in den Netzwerkknoten auszeichnet. Damit eignet sich dieses Routingprotokoll hervorragend für kleine mobile Geräte, die meist keine große Leistungsfähigkeit besitzen. Die Kontrollinformationen werden zwischen den Knoten mit Hilfe des User Data” gram Protocol“ (UDP) und dem Internet Protokoll“ (IP) ausgetauscht. Das AODV” Protokoll definiert dafür vier verschiedene, Nachrichtentypen die die Knoten untereinander austauschen können: • Route Request (RREQ) • Route Reply (RREP) • Route Error (RERR) • Reply Acknowledgement (RREP-ACK) Sucht ein Knoten einen Weg durch das Netzwerk, schickt er ein RREQ mit seinem gewünschten Ziel an seine Nachbarn. Können die Nachbarn diese Anfrage nicht beantworten, so leiten sie das RREQ wiederum an ihre Nachbarn weiter. Dies wird so lange wiederholt, bis das RREQ einen oder mehre Knoten erreicht, die die Anfrage beantworten können. Diese beantworten die Anfrage mit einem RREP und schicken es auf dem Weg des RREQ zurück. Beim Versenden und Empfangen der beiden Nachrichten, aktualisieren die Knoten ihre Routingtabellen und erzeugen somit einen Weg durch das Netzwerk. Studienarbeit Falk Ahlendorf 2 Grundlagen 8 Fällt in dem Netzwerk eine Verbindung zwischen zwei Knoten aus, wird dies mit Hilfe der RERR-Nachricht den Nachbarn mitgeteilt. Somit wissen diese Knoten, dass sie einen neuen Weg suchen müssen, wenn sie Daten an einen Knoten hinter der Ausfallstelle senden wollen. Ein Nachteil dieses Protokolls ist, dass es nicht in der Lage ist, fehlerhaft funktionierende Knoten zu erkennen. AODV geht davon aus, dass allen Knoten zu jedem Zeitpunkt vertraut werden kann. Wie in [NiSu05] gezeigt wird, ist es nicht sehr aufwendig mit Hilfe eines manipulierten Knotens Verbindungen umzuleiten und abzuhören oder die Kommunikation im Netz ganz und gar zu stören. 2.2.2 Multicast AODV 1999 stellten Elizabeth M. Royer und Charles E. Perkins in ihrem Paper Multicast ” operation of the Ad-hoc On-Demand Distance Vektor Routing Protocol“ [RoPe99] die Multicast-Funktionalität des AODV-Protokolls vor (auch Multicast AODV gennant oder kurz MAODV). Dabei wurde die Multicast-Funktionalität nicht auf das Protokoll aufgesetzt, sondern in dieses integriert. Damit kann ein Knoten, der auf der Suche nach einer Multicastgruppe ist, nicht nur einen Weg zu dieser finden, sondern er kann auch seine Unicast-Routingtabelle um zusätzliche Routen erweitern. Das Gleiche gilt natürlich auch umgekehrt. Dadurch kann die zusätzliche Netzwerkbelastung gering gehalten werden, was vor allem bei mobilen Geräten wichtig ist. MAODV organisiert alle Knoten einer Multicastgruppe in einer Baumstruktur, allerdings besitzt kein Knoten aus dem Baum Wissen über alle Teilnehmer der Gruppe. Die Wurzel dieses Baums bildet der so genannte Group Leader“. Dieser wird wie jeder ” andere Knoten in dem Baum behandelt. Er hat lediglich ein paar Sonderrecht und Pflichten (Siehe 2.2.2.6), kann aber jeder Zeit, durch einen anderen Knoten aus dem Multicastbaum abgelöst werden. Damit gibt es bei diesem Protokoll keinen single ” point of failure“. Wie auch schon AODV ist MAODV ein reaktives Protokoll. Solange alle Mitglieder einer Gruppe in dem Multicastbaum verbunden sind, spielt das Protokoll keine Rolle. Es tritt nur zu Tage, wenn ein Knoten einer Gruppe beitreten will, sie verlassen möchte oder es zu Störungen im Multicastbaum kommt. Um Wege zu einem Multicastbaum zu finden oder zu reparieren nutzt MAODV die bereits im AODV-Protokoll vorhandenen Nachrichtentypen RREQ und RREP. Diese wurden um ein paar Flags erweitert. Außerdem definiert das Protokoll drei Erweiterungen für diese Nachrichten, um die nötigen Zusatzinformationen transportieren zu Studienarbeit Falk Ahlendorf 2 Grundlagen 9 können. Des Weiteren werden, neben den vier bereits im AODV Protokoll vorhandenen Nachrichtentypen, zwei neue Nachrichtenformate definiert. Das ist die Multicast Activation ” Message“ (MACT)-Nachricht und die Group Hello“(GRPH)-Nachricht. ” Die Nachteile des MAODV-Protokolls sind zum einen, dass jeder Knoten in dem Adhoc-Netzwerk das MAODV-Protokoll unterstützen muss, da es sonst zu Fehlfunktionen kommen kann. Dies liegt daran, dass die nicht-MAODV-fähigen-Knoten die MACTund GRPH-Nachrichten nicht interpretieren können und sie deshalb verwerfen. Zum anderen vertraut MAODV, wie auch schon AODV, jedem Knoten in dem Netzwerk. Hinzu kommt noch, dass keine Zugangsbeschränkungen für Gruppen angelegt werden können. So kann jeder Knoten, auch Knoten die nicht im Multicastbaum sind, jederzeit Nachrichten an die Multicastgruppe versenden. 2.2.2.1 Die Routingtabelle Neben der normalen AODV-Routingtabelle, wie sie in RFC 3561 [PeBRD03] spezifiziert ist, hat jeder MAODV-fähige-Knoten noch eine Multicastroutingtabelle. Für jede Multicastgruppe, der ein Knoten angehöhrt, sollten die folgenden Informationen in der Tabelle enthalten sein: • Die IP-Adresse der Multicastgruppe • Die IP-Adresse des Group Leader“ ” • Die Sequenznummer der Gruppe • Eine Liste mit den nächsten Hops im Multicastbaum • Anzahl der Hops zum nächsten Gruppenmitglied • Anzahl der Hops zum Group Leader“ ” In der Liste der nächsten Hops müssen die folgenden Informationen für jeden Hop gespeichert werden: • IP-Adresse des nächsten Hops • Zugehöriges Netzwerkinterface • Richtung des Links • Ob diese Route aktiv oder nicht aktiv ist Studienarbeit Falk Ahlendorf 2 Grundlagen 10 Die Richtung des Links kann zwei Werte annehmen. UPSTREAM bedeutet dabei, dass der Link in Richtung der Wurzel“ des Baumes geht. DOWNSTREAM hingegen ” heißt, dass der Link in Richtung der Blätter“ zeigt. Es kann dabei in der Liste belie” big viele Links mit der Richtung DOWNSTREAM geben. Die Richtung UPSTREAM hingegen darf höchstens einmal vorkommen. Des Weiteren gilt, solange wie eine Route nicht aktiviert wurde, dürfen keine Multicastpakete an den angegebenen Hop weitergeleitet werden. Optional zur Multicastroutingtabelle kann ein Knoten eine Group Leader Tabelle“ ” mit führen. In dieser Tabelle speichert der Knoten die ihm bekannten Group Leader“ ” und Multicastgruppen. Dies ermöglicht dem Knoten später schneller einer Gruppe beizutreten, in dem er sein RREQ direkt an den Group Leader“ richtet. ” 2.2.2.2 RREQ-Nachrichtenformat Wie in Abbildung 2.1 zu sehen, wurde das Format der RREQ-Nachrichten, wie in RFC 3561 [PeBRD03] angegeben, beinehalten. Lediglich zwei Flags sind bei MAODV genauer spezifiziert worden. 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type |J|R|G| Reserved | Hop Count | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Other fields as specified for AODV....... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ J Das Join-Flag wird dazu genutzt, um anzugeben, ob ein Knoten einer Multicastgruppe beitreten möchte. Ist das Flag nicht gesetzt, so sucht der Knoten lediglich einen Weg zum Multicastbaum, möchte diesem aber nicht beitreten. R Das Repair -Flag wird nur gesetzt, wenn durch das RREQ zwei separate Multicastbäume miteinander verbunden werden sollen. Abbildung 2.1: RREQ-Nachricht [RoPe00] Hinzu kommt beim RREQ noch, dass in MAODV zwei neue Erweiterungen für dieses Nachrichtenformat definiert wurden. Zum einen ist das die Multicast Groub Rebuild“” Erweiterung, welche genutzt wird, wenn ein Pfad im Multicastbaum repariert werden soll. Mit ihr kann sichergestellt werden, dass nur Knoten auf die Anfrage antworten, Studienarbeit Falk Ahlendorf 2 Grundlagen 11 welche näher am Group Leader“ sind, als der Knoten der versucht, den Multicastbaum ” zu reparieren. Ihr Aufbau ist der Abbildung 2.2 zu entnehmen. 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Length | Multicast Group Hop Count | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Type Der Typ der Extension ist 4 Length Die Länge ist 2 Multicast Group Hop Count Dieses Feld gibt an, wie weit entfernt der sendende Knoten vom Group Leader der Multicastgruppe ist. Abbildung 2.2: Rebuild-Erweiterung [RoPe00] Die andere Erweiterung ist die Multicast Group Leader“-Erweiterung. Diese ermög” licht es RREQ-Nachrichten speziell an den Group Leader“ zu senden. Das ist vor allem ” beim Verbinden von zwei getrennten Multicastbäumen notwendig. Die Abbildung 2.3 zeigt den Aufbau der Erweiterung. Studienarbeit Falk Ahlendorf 2 Grundlagen 12 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Length | Multicast Group Leader IP ... | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ... Address (continued) | Previous Hop IP Address ... | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ... (continued) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Type Diese Extension hat den Typ 3 Length Die Länge der Extension ist 8 Multicast Group Leader IP Address Dieses Feld gibt die IP-Adresse des Group ” Leaders“ an, an den die Nachricht zugestellt werden soll. Previous Hop IP Address Das Feld wird von jedem Knoten, der dieses RREQ weiterleitet aktualisiert. Damit enthält es immer die IP-Addresse des vorausgegangen Knotens. Es hat allerdings nur Bedeutung, wenn der erste Knoten das RREQ ausgesendet hat, um dem Multicastbaum beizutreten. Abbildung 2.3: Group Leader“-Erweiterung [RoPe00] ” Studienarbeit Falk Ahlendorf 2 Grundlagen 13 2.2.2.3 Das RREP-Nachrichtenformat 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type |R| Reserved |Prefix Sz| Hop Count | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Other fields as specified for AODV....... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ R Das Repair-Flag wird nur gesetzt, wenn der Knoten auf ein RREQ Antwortet bei dem auch das Flag gesetzt war. Abbildung 2.4: RREP-Nachricht [RoPe00] Bei der RREP-Nachricht, in Abbildung 2.4 zu sehen, wurde das Repair -Flag genauer spezifiziert. Alle anderen Felder haben die gleiche Bedeutung, die man der RFC 3561 [PeBRD03] entnehmen kann. Wird das RREP an eine Multicastgruppe gerichtet, so muss außerdem noch die Multicastgroup Information“-Erweiterung angehängt werden. ” Wie die Erweiterung aufgebaut ist, kann der Abbildung 2.5 entnommen werden. 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Length | Multicast Group Hop Count | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Multicast Group Leader IP Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Type Diese Extension hat den Typ 5 Length Die Länge der Extension ist 6 Multicast Group Hop Count In diesem Feld speichert der antwortende Knoten seine Entfernung von Group Leader. Jeder Knoten der das RREP weiterleitet, erhöht den Wert in diesem Feld um eins. Multicast Group Leader IP Addresse Die IP Adresse das aktuellen Group Leaders wird vom antwortenden Knoten in diesem Feld gespeichert. Abbildung 2.5: Informations-Erweiterung [RoPe00] Studienarbeit Falk Ahlendorf 2 Grundlagen 14 2.2.2.4 MACT-Nachricht Die MACT-Nachricht ist eine der zwei neuen Nachrichten, die mit dem MAODV Protokoll eingeführt worden sind. Die Aufgabe der MACT-Nachricht ist es, Veränderungen am Multicastbaum vorzunehmen. So ist es mit Hilfe dieser Nachricht zum Beispiel möglich, Wege im Multicastbaum zu aktivieren oder zu deaktivieren. Aber auch das Bestimmen eines neuen Group Leaders“ kann mit dieser Nachricht durchgeführt wer” den. Ihren Aufbau ist in der Abbildung 2.6 zu sehen. 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type |J|P|G|U|R| Reserved | Hop Count | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Multicast Group IP address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source IP address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Abbildung 2.6: MACT-Nachricht [RoPe00] Type Das Type-Feld dieser Nachricht hat den Wert 5. J Das Join-Flag wird gesetzt, wenn ein Knoten einem Baum beitreten und er einen Link zum Baum aktivieren möchte. P Das Prune-Flag bewirkt das Gegenteil zum Join Flag. Mit seiner Hilfe wird ein Link zum Multicastbaum deaktiviert. Allerdings darf ein Knoten eine solche Nachricht erst schicken, wenn er selber die Multicastnachrichten nicht mehr weiterleiten muss. G Das Group Leader -Flag zeigt an, dass der nächste Knoten im Multicastbaum, der ein Gruppenmitglied ist, Group Leader werden soll. U Mit Hilfe des Update-Flags wird angezeigt, dass sich die Entfernung zum Group Leader geändert hat. Die neue Entfernung zum Group Leader wird dann aus dem Hop Count Feld entnommen und in der Routingtabelle gespeichert. Studienarbeit Falk Ahlendorf 2 Grundlagen 15 R Mit Hilfe des Reboot-Flags zeigt ein Knoten an, dass er gerade neu gestartet wurde. Das bedeutet, dass dieser Knoten keinerlei Multicastroutinginformationen mehr besitzt. Damit sind alle Multicastrouten, die möglicherweise über ihn gelaufen sind, ungültig und müssen repariert werden. Reserved Dieses Feld kann für spätere Erweiterungen genutzt werden. Es wird immer als 0 gesendet und beim Empfang ignoriert. Hop Count Ist das Update Flag gesetzt, so wird in diesem Feld die neue Entfernung zum Group Leader gespeichert. Ansonsten wird dieses Feld immer mit dem Wert 0 gesendet. Multicast Group IP Address Die IP-Adresse der Multicastgruppe wird hier abgelegt. Mit dieser ist es möglich, die Nachricht einer bestimmten Multicastgruppe zuzuordnen. Source IP Address Diese IP-Adresse identifiziert den Absender der MACT-Nachricht. Source Sequenz Number Mit Hilfe der Sequenznummer des Absenders kann überprüft werden, ob die Nachricht aktuell ist oder nicht. 2.2.2.5 GRPH-Nachricht Die GRPH-Nachricht, in Abbildung 2.7 zu sehen, ist der zweite neue Nachrichtentyp, der mit dem MAODV-Protokoll eingeführt wurde. Seine Aufgabe besteht darin, die Multicastgruppe im Netzwerk bekannt zu machen. Die Bedeutung der Felder in diesen Nachrichtentyp kann der folgenden Auflistung entnommen werden. Type Der Type der Nachricht ist 6 U Das Update-Flag gibt an, dass sich etwas an den Group Leader Informationen geändert hat. Ist dieses Flag gesetzt, aktualisieren alle Knoten des Multicastbaums die dieses Nachricht empfangen, ihre entsprechenden Routingtabelleneinträge. M Das Off Mtree-Flag gibt an, dass die GRPH-Nachricht den Multicastbaum verlassen hat. Das wiederum heißt, dass das Hop Count Feld nicht genutzt werden kann, um die Entfernung zum Group Leader zu aktualisieren. Studienarbeit Falk Ahlendorf 2 Grundlagen 16 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type |U|M| Reserved | Hop Count | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Group Leader IP address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Multicast Group IP address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Multicast Group Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Abbildung 2.7: GRPH-Nachricht [RoPe00] Reserved Dieses Feld ist für spätere Erweiterungen reserviert. Es wird immer als 0 gesendet und beim Empfang ignoriert. Hop Count Das Hop Count“-Feld gibt die Anzahl der Hops an, die eine Group ” ” Hello“-Nachricht vom Group Leader“ bis zum empfangenden Knoten zurückge” legt hat. Wenn das Off Mtree-Flag nicht gesetzt ist, kann der Knoten dieses Feld nutzen, um seine Routingtabelle zu aktualisieren. Group Leader IP Address Der Group Leader“ trägt seine IP-Addresse in dieses Feld ” ein. Ist das Update-Flag gesetzt, wird der Inhalt dieses Feldes in die Routingtabelle des Knoten übernommen. Jeder Knoten überprüft beim Empfangen der GRPH-Nachricht dieses Feld. Unterscheidet sich das Feld von seiner Aufzeichnung, ist das ein Hinweis dafür, dass sich zwei Group Leader für eine Multicastgruppe im Netzwerk befinden. Der Group Leader mit der kleineren IP-Addresse ist in dem Fall für die Reparatur zuständig. Ist in der GRPH-Nachricht die IP-Addresse des Group Leaders größer als die IP-Addresse, die der Knoten in seiner Aufzeichnung hat, leitet er die Nachricht weiter. Ist die IP-Addresse in der GRPH-Nachricht hingegen kleiner, kann er diese Nachricht verwerfen, da sein Group Leader nicht für die Reparatur zuständig ist. Multicast Group IP Address Die IP-Addresse der Multicastgruppe für die dieses GRPH-Nachricht bestimmt ist, steht in diesem Feld. Multicast Group Sequence Number Die aktuelle Sequenznummer der Gruppe steht in diesem Feld. Studienarbeit Falk Ahlendorf 2 Grundlagen 17 2.2.2.6 Der Group Leader Der Group Leader“ ist die Wurzel eines Multicastbaums. Innerhalb eines verbundenen ” Netzwerkes darf es für jede Multicastgruppe immer nur einen Group Leader“ geben. ” Dies wird mit Hilfe von Mechanismen im MAODV-Protokoll sichergestellt. Es gibt zwei Wege auf denen ein Knoten Group Leader“ werden kann. Zum einen ” wird ein Knoten Group Leader“, wenn er als erster Knoten im Netzwerk versucht einer ” Multicastgruppe beizutreten, die noch nicht existiert. Zum anderen kann ein Knoten aber auch im Falle einer Netzwerkpartitionierung zum Group Leader“ werden (siehe ” Kapitel 2.2.2.9). Ist ein Knoten zum Group Leader“ ausgewählt worden, so hat dieser Knoten ein ” paar Sonderrechte und Pflichten gegenüber einem normalen Knoten, die im Folgenden kurz erläutert werden sollen: • Der Group Leader“ darf immer auf RREQs, die an seine Gruppe gerichtet sind, ” antworten. • Der Group Leader“ darf als einziger Knoten das Verbinden eines partitionierten ” Multicastbaumes einleiten. • Der Group Leader“ darf als einziger Knoten auf Anfragen zur Wiedervereinigung ” zweier Multicastbäume antworten. • Der Group Leader“ hat die Pflicht, in regelmäßigen Abständen von ” GROUP HELLO INTERVALL Millisekunden die Sequenznummer der Gruppe zu erhöhen. • Wenn der Group Leader“ die Sequenznummer erhöht hat, muss er das mit Hilfe ” von GRPH-Nachrichten allen Knoten im Netzwerk mitteilen. 2.2.2.7 Beitreten einer Multicastgruppe In Abbildung 2.8 sieht man das Aktivitätsdiagramm für einen Knoten, welcher einer Multicastgruppe beitreten möchte. Dazu sendet dieser Knoten ein RREQ mit gesetztem ’J’-Flag aus. Möchte er nur Daten an eine Multicastgruppe senden, muss er dieser nicht angehören und kann das RREQ ohne das ’J’- Flag senden. Als Ziel des RREQ gibt der Knoten die IP-Adresse der Multicastgruppe an. In das Feld der Ziel-Sequenznummer trägt er die ihm aktuell bekannte Squenznummer der Gruppe ein oder 0 wenn er keine Aufzeichnungen besitzt. Als Nächstes schaut der Knoten in seiner Group Leader“-Tabelle nach, falls er eine besitzt. Findet er in dieser Tabelle einen ” Studienarbeit Falk Ahlendorf 2 Grundlagen 18 Unicast RREQ Broadcast RREQ Group Leader bekannt noch Wiederholungen erlaubt Group Leader nicht bekannt Broadcast RREQ Warte auf weitere Antworten Warten auf Antwort keine Antwort erhalten Antwort erhalten Suche beste Route aus wollte nur Daten senden Sende MACT Verwerf e Paket keine Wiederholung mehr möglich wollte Gruppe beitreten Werde Groupleader Abbildung 2.8: Aktivitätsdiagramm für das Beitreten zu einer Multicastgruppe entsprechenden Eintrag, überprüft der Knoten, ob er eine aktuelle Route in Richtung des dort aufgeführten Group Leaders“ besitzt. Ist das der Fall, so kann der Knoten ” das Route Request direkt an den Group Leader“ richten. Dazu hängt er die Multicast ” ” Group Leader“-Erweiterung an das RREQ an. Im Anschluss sendet der Knoten das RREQ per Unicast an den in der Tabelle aufgeführten Group Leader“. Findet sich ” in der Tabelle kein entsprechender Eintrag, lässt der Knoten die Erweiterung weg. In dem Fall wird das RREQ dann per Broadcast an alle Nachbarn verteilt. Das TTL-Feld des IP Headers wird in diesem Fall auf den Wert AODV TTL START gesetzt. Hat der Knoten des RREQ versendet, wartet er, wie in Abblindung 2.8 zu sehen, auf ein RREP. Erhält der Knoten innerhalb von RREP WAIT TIME keine Antwort, wiederholt der Knoten das RREQ. Dies macht er so lange, wie in RREQ RETRIES angegeben. Wenn der Knoten das RREQ wiederholen muss, so sendet er es mit einem TTL-Feld aus, welches zum vorhergehenden RREQ um AODV TTL INCREMENT erhöht wurde. Das TTL-Feld darf dabei den Wert von AODV TTL TRESHOLD nicht übersteigen, ansonsten wird es auf diesen Wert zurückgesetzt. Hatte der Knoten das RREQ an den Group Leader“ gerichtet und keine Antwort erhalten, werden die nach” folgenden RREQs per Broadcast an alle Nachbarn und ohne Erweiterungen verschickt. Erhält der Knoten trotz mehrmaligen Wiederholen des RREQs keine Antwort, muss er davon ausgehen, dass die Multicastgruppe, die er sucht, nicht existiert. Wollte der Knoten nur ein Datenpaket an die Gruppe senden, so verwirft er es einfach. War es Studienarbeit Falk Ahlendorf 2 Grundlagen 19 aber die Absicht des Knotes dieser Gruppe beizutreten, so wird er zum Group Leader“. ” Dies teilt er dann auch gleich allen anderen Knoten im Netzwerk mit. Dazu verschickt er eine GRPH-Nachricht, in der das ’U’-Flag gesetzt ist. Erhält der Knoten eine Antwort auf seine Anfrage, dann wartet er noch RREP WAIT TIME Millisekunden ob weitere Antworten eintreffen. Aus den eingetroffenen Antworten wählt er dann die jenige aus, welche die größte Sequenznummer hat. Sollten das mehre Antworten sein, so wird diejenige genommen, welche den kürzesten Weg zum Multicastbaum verspricht. An den Absender dieser Antwort verschickt der Knoten dann eine MACT-Nachricht mit gesetztem ’J’ -Flag. Auf diese Weise wird die entsprechende Route ausgewählt und aktiviert. Damit ist der Knoten dann dem Multicatbaum beigetreten. 2.2.2.8 Verlassen einer Multicastgruppe Sich aus Next Hop Liste entfernen Knoten ist kein Group Leader Knoten ist Blatt Sende Prune MACT Knoten ist Group Leader Knoten ist Blatt Knoten ist kein Blatt Sende Prune MACT Knoten ist kein Blatt Sende Group Leader MACT Werde normaler Knoten Abbildung 2.9: Aktivitätsdiagramm für das Verlassen einer Multicastgruppe Einem Knoten steht es jeder Zeit frei, eine Multicastgruppe zu verlassen. Allerdings darf der Knoten sich nur aus dem Multicastbaum entfernen, wenn er die Multicastnachrichten nicht an andere Knoten weiterleitet. Studienarbeit Falk Ahlendorf 2 Grundlagen 20 Möchte ein Knoten eine Multicastgruppe verlassen, entfernt er sich selbst aus seiner Next Hop“-Liste, wie in Abbildung 2.9 zu sehen ist. Somit werden alle eingehenden ” Multicastpakete nur noch weitergeleitet aber nicht mehr lokal zugestellt. War der Knoten ein Group Leader“, muss er nun seinen Group Leader“-Status aufgeben. Dies kann ” ” auf zwei verschiedene Weisen passieren, wie Abbildung 2.9 entnommen werden kann. Hat der Group Leader“ nur noch einen Eintrag in seiner Next Hop Liste“, kann er ” ” diesem Hop einfach eine MACT-Nachricht mit gesetztem ’P’-Flag schicken. Der Knoten welcher diese Nachricht empfängt, erkennt das sie vom Group Leader“ kam. Dieser ” kann daraufhin zwischen drei Möglichkeiten entscheiden. 1. Er entfernt sich auch aus dem Multicastbaum. Für diese Variante entscheidet er sich, wenn er selbst die Daten nur an einen Hop weitergeleitet hat. 2. Er bestimmt einen neuen Group Leader“. Diese Möglichkeit wählt er, wenn er ” selbst die Daten nur weiterleitet aber mehr als einen Hop in der Next Hop“-Liste ” stehen hat. 3. Er wird selber zum neuen Group Leader“. Dies passiert nur, wenn der Knoten ” die Datenpakete der Mutlicastgruppe auch selber empfangen möchte. Hat nun aber der alte Group Leader“ mehr als einen Hop in seiner Next Hop“” ” Liste, so wählt er einen aus und bestimmt ihn zum neuen Group Leader“. Er selbst ” gibt seinen Group Leader“-Status auf. Dies macht er, indem er dem entsprechenden ” Knoten eine MACT-Nachricht mit gesetztem ’G’-Flag schickt. Ist der Knoten, welcher die Multicastgruppe verlassen wollte, kein Group Leader“ ” gewesen, so kann er den Multicastbaum auch nicht einfach verlassen. Wenn er in seiner Next Hop“-Liste noch mehr als einen Eintrag hat, dann muss er die eingehenden ” Multicastdatenpakete noch weiterleiten. Hat er nur noch einen Eintrag, so kann er diesen Knoten eine MACT-Nachricht mit gesetztem ’P’-Flag schicken. Daraufhin wird der Knoten aus der Next Hop“-Liste des anderen Knotens entfernt. Wobei dieser ” Knoten dann auch prüft, ob er sich selbst auch entfernen kann. 2.2.2.9 Netzwerkpartitionierung Jeder Knoten ist in der Lage zu erkennen, wenn ein Link zwischen ihm und einem Nachbarknoten ausfällt. Der Ausfall des Links hat zur Folge, dass die AODV-Hello-Pakete ausbleiben und der Knoten auch keinen Datentransfer von seinem Nachbarknoten mehr empfängt. Stellt ein Knoten fest, das ein Link ausgefallen ist, muss er überprüfen, ob Studienarbeit Falk Ahlendorf 2 Grundlagen 21 Deaktiviere Verbindung DOWNSTREAM deaktiviert UPSTREAM deaktiviert Sende RREQ noch Wiederholungen möglich keine Antwort keine Wiederholungen möglich Antwort erhalten Warte auf weitere Antworten benötigt Datenpakete Wähle beste Antwort Sende MACT Werde Group Leader leitet Daten nur weiter nur ein nächster Hop Sende Prune MACT hat mehr als einen nächsten Hop Sende Group Leader MACT Abbildung 2.10: Aktivitätsdiagramm für das Reparieren eines Links der Link relevant für einen Multicastbaum ist. Wird der Link in einem Multicastbaum verwendet, muss er in der Next Hop“-Liste als deaktiviert markiert werden. ” Dies kann man auch der Abbildung 2.10 entnehmen. Ist der Knoten, der deaktiviert werden muss, mit der Richtung DOWNSTREAM versehen, passiert nichts weiter. Hat die Richtungsangabe allerdings den Wert UPSTREAM, so muss der Knoten unverzüglich die Reparatur des Baums einleiten. Dies geschieht, indem er einfach ein RREQ mit gesetztem ’J’-Flag sendet. So als würde er versuchen der Multicastgruppe neu beizutreten. Um zu verhindern, dass Knoten antworten, die unter ihm im Baum hängen“, ” fügt er allerdings an das RREQ noch die Multicast Group Rebuild“-Erweiterung an. ” Aus Abbildung 2.10 geht hervor, dass der Knoten, wie auch schon beim Beitreten einer Studienarbeit Falk Ahlendorf 2 Grundlagen 22 Multicastgruppe, auf eine Antwort wartet. Trifft eine Antwort ein, wird noch gewartet ob weitere Antworten eintreffen. Von den eingetroffenen Antworten wird wieder diejenige mit der größten Sequenznummer und dem kürzesten Weg zum Baum und Group ” Leader“ ausgewählt. Diese bestätigt der Knoten mit einer Join-MACT-Nachricht. Den Knoten unterhalb von ihm teilt er dann mit einer Update-MACT-Nachricht den neuen Hop Count“ zum Group Leader“ mit. ” ” Sollte der Knoten nach RREQ RETRIES immer noch keine Antwort erhalten haben, muss der Knoten davon ausgehen, dass es zu einer Netzwerkpartitionierung gekommen ist. Da in jeder Netzwerkpartition ein Group Leader“ existieren muss, hat der Knoten ” jetzt die Aufgabe einen neuen Group Leader“ zu bestimmen. Aus Abbildung 2.10 kann ” man entnehmen, dass sich sein weiteres Vorgehen danach richtet, ob er die Multicastdatenpakete nur weitergeleitet hat oder ob er sie selber empfangen will. Empfängt er sie selber, wird er einfach der neue Group Leader“. Leitet er sie allerdings nur wei” ter, so richtet sich sein weiteres Vorgehen danach, an wie viele Knoten er die Daten weiterleiten muss. Existiert nur ein Knoten, an den die Daten weitergeleitet werden, so entfernt er sich selbst mit Hilfe einer Prune-MACT aus dem Baum. Der Knoten, der diese Nachricht empfängt, erkennt das sein UPSTREAM ausgefallen ist und wird dann selbst zum Group Leader“ oder bestimmt einen neuen nach dem gleichen Ver” fahren. Hat der Knoten mehr als einen nächsten Hop, dann sendet er einem der Hops eine Group Leader“-MACT und ändert die Richtung des Links auf UPSTREAM. Die ” Group Leader MACT wird so lange von den Knoten weitergereicht, bis sie einen Knoten erreicht, der die Multicastdatenpakete selber empfängt. In den Zwischenknoten wird immer beim Weiterleiten die Richtung von dem Zielknoten auf UPSTREAM geändert. 2.2.2.10 Wiedervereinigung von Netzwerkpartitionen Wenn zwei Netzwerkpartitionen mit zwei Group Leadern“ wieder zusammenfinden, ” dann erkennen das die Group Leader“ in dem sie die GRPH-Pakete des anderen ” Group Leaders“ empfangen. Der Group Leader“ mit der kleineren IP-Adresse muss ” ” daraufhin die beiden Netzwerkpartitionen wieder vereinen. Dies macht er indem er ein RREQ mit gesetztem ’J’- und ’R’-Flag an den Group Leader“ mit der größeren IP” Adresse schickt. Dieser wählt die größere der beiden Sequenznummern, erhöht diese und antwortet mit einem RREP mit gesetztem ’R’-Flag. Das RREP aktiviert auf seinem Rückweg automatisch die Links. Somit brauchen keine MACT-Nachrichten zur Aktivierung der Links verschickt werden. Der Group Leader“, welcher dann das RREP ” empfängt, gibt nach dem Empfang sein Group Leader“-Status auf. Damit ist dann das ” Verbinden der Netzwerkpartitionen abgeschlossen. Studienarbeit Falk Ahlendorf 2 Grundlagen 23 Die Knoten, welche auf dem Weg zwischen den beiden Group Leadern“ liegen und ” der einen oder anderen Multicastgruppe angehöhren, leiten die RREQ- und die RREPNachricht immer direkt an ihren UPSTREAM-Knoten weiter. Damit erreicht die Nachricht auf dem schnellstmöglichen Weg den entsprechenden Group Leader“ und es wer” den nicht übermäßig viele Verzweigungen im Multicastbaum erzeugt. Die hier beschriebene Vorgehensweise entspricht der, welche im IETF-Draft [RoPe00] von MAODV beschrieben wird. In der originalen Veröffentlichung [RoPe99] ist das Vorgehen noch etwas anders beschrieben. Nach der originalen Veröffentlichung kann jeder Knoten aus dem Multicastbaum des Group Leaders“ mit der niedrigeren IP-Adresse die beiden Multicastbäume zu” sammenführen. Dazu sendet der Knoten, wenn er eine GRPH-Nachricht des anderen Group Leader“ empfängt, ein RREQ mit gesetztem ’R’-Flag an seinen Group Lea” ” der“. Der Group Leader“ antwortet daraufhin mit einem RREP, wenn nicht schon ein ” anderer Knoten angefragt hat. Damit bekommt der anfragende Knoten die Berechtigung mit der Wiedervereinigung der beiden Multicastbäume zu beginnen. Der restliche Ablauf ist dann so, wie oben bereits beschrieben. 2.2.2.11 Weiterleiten von Datenpaketen Empfängt ein Knoten ein Multicastpaket, überprüft er ob das Datenpaket bereits empfangen wurde. Dazu notiert sich der Knoten für jedes Paket die Absender-IP-Adresse, das IP-ID-Feld und das IP-Offset-Feld. Stimmen die Felder überein, wird das Datenpaket einfach verworfen. Im Anschluss muss der Knoten überprüfen, ob er das Datenpaket lokal ausliefern muss. Ist das der Fall, liefert er eine Kopie des Datenpakets an das Betriebsystem aus. Wie in Abbildung 2.11 zu sehen muss der Knoten zum Schluss noch überprüfen, ob er das Datenpaket auch an andere Knoten weiterleiten muss. Wenn das zutrifft, dann sendet er das Datenpaket erneut per Brodcast aus, um sicherzustellen, dass die anderen Knoten das Datenpaket auch empfangen haben. Wenn das unterliegende Netzwerk in der Lage ist Multicast zu unterstützen, muss das Datenpaket nicht per Brodcast verteilt werden, sondern kann auch per Multicast weiter geleitet werden. Studienarbeit Falk Ahlendorf 2 Grundlagen 24 Daten lokal benötigt sonst keine weiteren Hops Paket Verwerf en Lokal zustellen Daten müssen weitergeleitet werden Erneut Broadcasten Abbildung 2.11: Aktivitätsdiagramm für das weiterleiten von Datenpaketen Studienarbeit Falk Ahlendorf 3 Implementierung 25 3 Implementierung Dieses Kapitel gibt einen Einblick in die Implementierung des MAODV-Protokolls. Der erste Abschnitt beschreibt die Probleme, die bei der Implementierung auftraten und zeigt Lösungansätze. Im zweiten Abschnitt werden die Elemente, welche zu dem bereits existierenden Click-Routergraphen hinzugefügt wurden, beschrieben. Der dritte Abschnitt des Kapitels widmet sich dann den Anpassungen an den bereits vorhandenen Elementen. Zum Abschluss wird dann die Integration der Elemente in den Routergraphen vorgestellt. 3.1 Schwachstellen des MAODV Protokoll Während der Implementierung des MAODV-Protokolls sind einige Fehler in diesem zu Tage getreten. Diese Probleme lassen sich auf drei Problemklassen zurückführen, die in den nächsten Abschnitt näher erläutert werden sollen. 3.1.1 Verlorene MACT-Nachrichten Die MACT-Nachrichten erfüllen entscheidende Aufgaben beim Aufbau und Instandhalten des Multicastbaums (siehe Kapitel 2.2.2.4). Trotz dieser wichtigen Aufgabe werden die Nachrichten nicht gesichert übertragen. Damit kann ein Verlust dieser Nachrichten dazu führen, dass die Knoten falsche Informationen über ihre Funktion im Multicastbaum haben. Um einen Route in dem Multicastbaum zu aktivieren, muss ein Knoten eine JoinNachricht entlang dieser Route senden (siehe Kapitel 2.2.2.7). Geht diese Nachricht verloren, wird die Route nie aktiviert. Damit werden auch keine Multicastdatenpakete entlang dieser Route verschickt. Trotzdem merken das die Knoten nie. Deshalb werden auch keine Reparaturversuche unternommen. Ein ähnliches Problem gibt es mit der Leader-MACT. Geht diese verloren, wird kein neuer Group Leader“ gewählt und es entsteht ein Teilbaum ohne Group Lea” ” der“. Auch dieses Problem wird von den Knoten nicht erkannt und es werden keine Studienarbeit Falk Ahlendorf 3 Implementierung 26 Gegenmaßnahmen unternommen. Der Verlust einer Prune-MACT führt meist dazu, dass ein Ast in dem Multicastbaum unötig Daten weiterleitet. Aber auch hier kann es unter Umständen dazu kommen, dass ein Teilbaum ohne Group Leader“ entsteht. ” 3.1.2 Asymetrischer Linkausfall Ein weiteres Problem des MAODV-Protokolls ergibt sich aus der Tatsache, dass in einem Wireless Network die Links nicht immer symetrisch in beide Richtungen abbrechen. Meist fällt der Link asymetrisch aus. Dadurch können in die eine Richtung zwar keine Daten mehr übertragen werden, in die Gegenrichtung hingegen kann das aber durchaus noch möglich sein. Das führt dazu, dass ein Knoten einen Linkausfall detektieren kann, während der Gegenknoten diesen nicht bemerkt. Erkennt der Knoten, der näher am Group Leader“ ist, einen Linkausfall, so entsteht eine Lücke im ” Baum. Diese Lücke wird aber nicht geschlossen, weil das die Aufgabe des Knoten ist, der weiter entfernt vom Group Leader“ ist. Dieser Knoten hat aber den Linkausfall ” nicht detektiert und unternimmt somit nichts. Ein weiterer Fall ist, dass der Knoten der weiter entfernt vom Group Leader“ ein ” Linkausfall erkennt. Der Knoten, welcher näher am Group Leader“ ist, hingegen be” kommt davon nichts mit. Wenn das auftritt, besteht die Möglichkeit, dass sich ein Kreis im Multicastbaum ausbildet, wenn sich ein weiterer Knoten des Multicastbaums in der Nähe befindet. Dies passiert dadurch, dass der Knoten auf sein RREQ- zwei RREP-Nachrichten erhählt. Ist die Antwort des zweiten Knotens besser als die des ursprünglichen Knotens, bildet sich ein solcher Kreis. Der Knoten erhält nun die Multicastdatenpakete sowohl vom ursprünglichen Knoten als auch von dem zweiten Knoten. 3.1.3 Tote Äste“ ” Wenn zwei Teilbäume sich wieder verbinden, wird das über RREQ- und RREPNachrichten bewerkstelligt (Siehe Kapitel 2.2.2.10). Dabei ist keine zusätzliche Aktivierung der Routen notwendig, weil das RREP auf seinem Weg zurück die Route auch gleich aktiviert. Dies führt dann zu Problemen, wenn das RREP auf seinem Weg zurück verloren geht. Da der Group Leader“, welcher das RREQ ausgesendet hat, ” keine Antwort bekommt, sendet er nochmals ein RREQ aus. Worauf er ein RREP erhält. Es besteht aber die Möglichkeit, dass die zweiten RREQ- und RREP-Nachrichten einen anderen Weg wählen als die erste RREQ- und RREP-Nachrichten. Somit besteht Studienarbeit Falk Ahlendorf 3 Implementierung 27 die Möglichkeit, dass in dem Multicastbaum nun ein Ast existiert, der die Daten weiterleitet aber in dem sie niemand empfangen möchte. 3.1.4 Lösungsansätze der Probleme Das Problem der verlorenen MACTs lässt sich mit einfachen Acknowledgements beheben. In [DKBD+ 03] wird vorgeschlagen eine zusätzliche MACT-Nachricht einzuführen, die MACT ACK Nachricht. Sie wird vom Empfänger, der zu sichernden MACTNachrichten, an den Absender zurückgesendet. Somit kann dieser überprüfen, ob die MACT-Nachricht angekommen ist. Erhält er nach MACT ACK TIMER keine Antwort, wiederholt er die MACT-Nachricht. Allerdings darf er die MACT-Nachricht höchstens mit der Anzahl MACT RETRIES wiederholen. Die Probleme der nicht selbst reparierenden Links der Teilbäume ohne Group Lea” der“ oder die toten Äste können auf diese Weise nicht behoben werden. Ein möglicher Lösungsansatz hierfür wird in [MoCP08] vorgestellt. Dort wird vorgeschlagen, eine spezielle GRPH-Nachricht zu verwenden, welche sich nur entlang des Multicastbaums ausbreitet. Empfängt ein Knoten keine solche Nachricht in einem bestimmten Intervall, weiß er, dass er vom Group Leader“ getrennt wurde und kann mögliche Reperaturen ” des Baums einleiten. Das Problem dieses Lösungsansatzes ist, dass der Knoten nicht entscheiden kann wo der Link abgerissen ist. Dafür benötigt dieser Lösungsansatz weitere Mechanismen. In der Implementierung wird aufgrund dessen einen weiterentwickelten Ansatz verwendet. In diesem sendet jeder Knoten im MACT HELLO INTERVAL eine MACTNachricht ohne gesetzte Flags per Unicast an seine DOWNSTREAM-Knoten. Empfängt ein Knoten keine solche Nachricht von seinem UPSTREAM-Knoten, leitet er sofort eine Reparatur des Links ein. Empfängt ein Knoten eine solche MACT-Nachricht von einem Knoten der nicht sein UPSTREAM-Knoten ist, kann er diesen mit einer Prune-MACT auf seinen Fehler hinweisen. Auf diese Weise können ausgefallene Links zuverlässig erkannt werden. Des Weiteren ermöglicht dieser Ansatz das Überwachen der Multicastroutingtabelle durch die Nachbarknoten. Damit ist es möglich, tote Äste und Kreise zu erkennen und aufzulösen. Durch seinen lokalen Ansatz werden auch keine zusätzlichen Mechanismen benötigt, um zu erkennen, an welcher Stelle des Baums ein Fehler aufgetreten ist. Denn nur die beteiligten Knoten bekommen diesen Fehler mit. Alle anderen Knoten werden dadurch nicht beeinflusst. Studienarbeit Falk Ahlendorf 3 Implementierung 28 3.2 Die verwendete Software Um das MAODV-Routingprotokoll zu implementieren, wurde auf die Software Click [MIT07] zurückgegriffen. Mit dieser Software ist man in der Lage, einen Router aus einzelnen Elementen zusammenzubauen. Jedes eingehende oder ausgehende Datenpakete durchläuft bei dieser Software einen vordefinierten Graphen aus einzelnen Elementen. Jedes dieser Elemente ist eine C++ Klasse, welche eine definierte Schnittstelle zur Entgegennahme und zur Weitergabe von Paketen besitzt. Des Weiteren darf jedes Element Pakete erzeugen oder löschen. In der Standardinstallation von Click ist bereits eine Vielzahl von Elementen vorhanden, die einen Großteil der herkömmlichen Routingaufgaben abdecken. Aber Click bietet auch die Möglichkeit neue eigene Elemente hinzuzufügen. Verbunden werden diese Elemente mit Hilfe einer Textdatei, die auch als Clickscript bezeichnet wird. In ihr wird festgehalten, welche Elemente geladen werden sollen und welche Parameter diesen übergeben wird. Außerdem wird, in dieser Datei notiert in welcher Reihenfolge die Elemente von Paketen durchlaufen werden sollen. Dabei ist es durchaus auch möglich, Verzweigungen zu realisieren oder Elemente parallel zu durchlaufen. Getestet wurde während der Implementierung mit Hilfe des Netzwerksimulators NS2, welchen man unter [Info06] finden kann. Für diesen Netzwerksimulator gibt es auf der Click-Webseite einen Patch. Dieser Patch sorgt dafür, dass das Routing in den virtuellen Netzwerkknoten nicht mehr durch NS2, sondern durch Click durchgeführt wird. Damit ist es möglich, Änderungen an einem Element sofort mit einer Vielzahl von Netzwerkknoten zu testen, ohne das man mehrere Rechner dafür benötigt. Nach dem die mit Hilfe von NS2 erstellen Elemente funktionsfähig waren, wurden sie auf ihre Funktionsfähigkeit hin im DekoR untersucht. Die dafür notwendigen Tests und ihre Auswertung ist im Kapitel 4 nachzulesen. 3.3 Die neuen Elemente Um das MAODV-Protokoll zu realisieren, mussten dem Routergraphen sechs neue Clickelemente hinzugefügt werden. Diese Elemente realisieren die einzelnen Funktionalitäten des Protokolls, wie sie im Abschnitt 2.2.2 beschrieben wurden. Studienarbeit Falk Ahlendorf 3 Implementierung 29 MulticastRoutingTable + DIRECTION_LOCAL : cons t uns igned int + DIRECTION_UPSTREAM : cons t uns igned int + DIRECTION_DOWNSTREAM : cons t uns igned int m cas tRoutingTable : tm cas tRoutingTable m yTim eOutMap : tim eoutm ap m cas tTable 0..1 mcast_Controler m act : m cas t_Multicas tActivationMes s age* control : m cas t_Controler* m yip : IPAddres s + Multicas tRoutingTable() + ~ Multicas tRoutingTable() control 0..1 + clas s _nam e() : cons t char* + s etMulticas tGroupLeader(group : cons t IPAddres s &, leader : cons t IPAddres s &) + s etMulticas tGroupSequenznum ber(group : cons t IPAddres s &, newnum ber : cons t uns igned int) + s etMulticas tGroupHops ToLeader(group : cons t IPAddres s &, newnum ber : cons t uns igned int) + s etMulticas tGroupHops ToNextHop(group : cons t IPAddres s &, newnum ber : cons t uns igned int) + getMulticas tGroupLeader(group : cons t IPAddres s &) : IPAddres s + getNextHopToLeader(group : cons t IPAddres s &) : IPAddres s + getNextDownStream (group : cons t IPAddres s &) : IPAddres s + getMulticas tGroupSequenznum ber(group : cons t IPAddres s &) : uns igned int Element + getMulticas tGroupHops ToLeader(group : cons t IPAddres s &) : uns igned int + getMulticas tGroupHops ToNextHop(group : cons t IPAddres s &) : uns igned int + s etGroupLeaderState(group : cons t IPAddres s &, s tate : bool) + getGroupLeaderState(group : cons t IPAddres s &) : bool + is KnownGroup(group : cons t IPAddres s &) : bool + is ActiveGroup(group : cons t IPAddres s &) : bool + is ActiveGroupRouter(group : cons t IPAddres s &) : bool m act 0..1 + addNewHop(group : cons t IPAddres s &, newhop : cons t IPAddres s &, interface : cons t uns igned int, direction : cons t uns igned) m act 0..1 mcast_MulticastActivationMessage + rem oveHop(group : cons t IPAddres s &, hop : cons t IPAddres s &) + enableHop(group : cons t IPAddres s &, hop : cons t IPAddres s &) + dis ableHop(group : cons t IPAddres s &, hop : cons t IPAddres s &) + getDirection(group : cons t IPAddres s &, hop : cons t IPAddres s &) : uns igned int + num berNextHops (group : cons t IPAddres s &) : uns igned int + getNextHops (group : cons t IPAddres s &) : cons t tNextHopVector + routeTim out(ip : cons t IPAddres s &) + needRebroadcas t(group : cons t IPAddres s &, s ource : cons t IPAddres s &) : bool + needLocal(group : cons t IPAddres s &) : bool + is Touched(group : cons t IPAddres s &) : bool + is Repair(group : cons t IPAddres s &) : bool m cas tTable0..1 + s etRepair(group : cons t IPAddres s &, s tate : bool) + getLeaderGroups () : Vector< IPAddres s > + getExtens ion(type : uint8_t, p : Packet*, offs et : cons t int) : void* + run_tim er(tim er : Tim er*) + s etMact(m : m cas t_Multicas tActivationMes s age*) + s etControler(c : m cas t_Controler*) + s etMyIP(ip : cons t IPAddres s &) + is Known(group : cons t IPAddres s &, s ender : cons t IPAddres s &, id : uint32_t, offs et : uint32_t) : bool + s etKnown(group : cons t IPAddres s &, s ender : cons t IPAddres s &, id : uint32_t, offs et : uint32_t) Abbildung 3.1: Klassendiagramm für die Multicastroutingtabelle 3.3.1 Das Element MulticastRoutingTabelle Das MulticastRoutingTabellen Element realisiert die Multicast-Routingtabelle für das MAODV-Protokoll. Dabei nimmt das Element nicht nur alle Informationen auf die im MAODV-Draft spezifiziert wurden, sondern bietet auch zahlreiche zusätzliche Funktionen. Damit dient dieses Element den anderen Elementen vor allem auch als Kommunikationsschnittstelle. So verfügt die hier implementierte Multicast-Routingtabelle zum Beispiel über Funktionen, die feststellen, ob ein Netzwerkknoten Mitglied in der Multicastgruppe ist oder nicht. Da das Element die Möglichkeit bietet, auch unvollständige Einträge zu machen, wurde die im Draft angegebene Group Leader“-Tabelle gleich mit integriert. ” Deaktivierte Hops werden außerdem nach Ablauf des im Draft angegebenen Timouts automatisch entfernt. Für diese Funktionalität ist also auch kein weiteres Element notwendig. Der Zugriff auf die Routingtabelle wird über get“ und set“ Methoden realisiert, ” ” welche als Parameter immer die IPAdresse der Multicastgruppe erwarten. Aus Abbildung 3.1 kann man eine detallierte Übersicht über die Methoden des Ele- Studienarbeit Falk Ahlendorf 3 Implementierung 30 ments entnehmen. 3.3.2 Das Element Multicastactivationmessage Dieses Element verfügt über einen Eingangs- und einen Ausgangsport. Damit ist das Element in der Lage, sowohl eingehende MACT-Nachrichten zu verarbeiten als auch neue MACT-Nachrichten zu erzeugen. Die Verarbeitung der MACT-Nachrichten beginnt damit, dass aus der Nachricht die betreffende Multicastgruppe aus dem Multicast Group IP Address“-Feld extrahiert ” wird. Im Anschluss daran wird die Absenderadresse der Nachricht aus dem Source IP ” address“-Feld entnommen. Ist dies geschehen, kann die Nachricht anhand des Flag“” Feldes eingestuft werden. Wie bereits an Abschnitt 2.2.2.4 beschrieben unterscheidet man fünf verschiedene MACT-Nachrichten. 1. Die Join-Nachricht erkennt man an dem gesetzten Join-Flag. Sie signalisiert, dass der sendende Knoten seinen Weg über den empfangenden Knoten gewählt hat. Bei der Verarbeitung dieser Nachricht wird der Absender in der Multicasttabelle aktiviert. Anschließend wird überprüft, ob der Uplink zum Group Leader“ ” bereits aktiv ist. Ist er das nicht, so wird er mit Hilfe einer Join-MACT-Nachricht aktiviert. Jede erfolgreich empfangene Join-Nachricht wird von dem Element mit einer MACT-ACK-Nachricht bestätigt. 2. Ist das Prune-Flag gesetzt, wird die Nachricht als Prune-MACT verarbeitet. In diesem Fall wird zuerst ermittelt, aus welcher Richtung die Nachricht gekommen ist. Danach wird der Knoten aus der Next Hop“-Liste der Gruppe entfernt. ” Die bereits am Anfang ermittelte Empfangsrichtung der Nachricht bestimmt nun über das weitere Vorgehen. War die Empfangsrichtung DOWNSTREAM, gibt es keine Besonderheiten zu beachten. In diesem Fall geht der Knoten gleich dazu über, zu überprüfen, ob er noch länger benötigt wird und entfernt sich gegebenenfalls selbst aus dem Multicastbaum. War die Empfangsrichtung allerdings UPSTREAM, wird, wie in Abschnitt 2.2.2.8 bereits beschrieben, ein neuer Group ” Leader“ gewählt. Auch jede erfolgreich empfangene Prune-Nachricht wird mit einer MACT-ACK-Nachricht bestätigt. 3. Bei gesetztem Leader -Flag wird die Nachricht als Leader-MACT erkannt. Empfängt ein Knoten eine solche Nachricht, überprüft er zuerst ob er selbst Group ” Leader“ werden kann. Ist das nicht der Fall, so sendet er die Leader-MACT an Studienarbeit Falk Ahlendorf 3 Implementierung 31 den ersten Hop aus der Next Hop“-Liste weiter und dreht dessen Linkrichtung ” auf UPSTREAM um. Zum Schluss der Verarbeitung wird dann auch noch die Richtung des Absenders der Leader -MACT auf DOWNSTREAM geändert. 4. Empfängt der Knoten eine Update-MACT-Nachricht, überprüft er zuerst, ob diese Nachricht aus Richtung des Group Leaders“ gekommen ist. Ansonsten ” verwirft er sie. Kam die Nachricht aber aus Richtung des Group Leaders“, wird ” der Hop Count“ zum Group Leader“ in der Multicastroutingtabelle aktualisiert. ” ” Anschließend erhöht der Knoten das Hopcount Feld und verschickt die Nachricht an seine Nachbarknoten. Ob es sich bei einer Nachricht um eine Update-MACT-Nachricht handelt, wird an Hand des Update-Flags festgestellt. 5. Der letzte im Draft spezifizierte MACT-Nachtichtentyp ist die Reboot-Nachricht. Diese signalisiert, dass ein Knoten neugestartet wurde. Enthält eine MACTNachticht ein gesetztes Reboot-Flag, wird das der Multicastroutingtabelle mitgeteilt. Diese entscheidet dann über das weitere Vorgehen. 6. Aufgrund von Schwachstellen im MAODV-Protokoll, wurde im Kapitel 3.1.4 die ACK -Nachricht als neuer Nachrichtentyp eingeführt. Wird die ACK -Nachricht empfangen, wird der Timer gelöscht, welcher für das erneute senden von MACTNachrichten zuständig ist. Empfängt der Knoten auf eine der gesicherten MACTNachrichten keine ACK -Nachricht, wiederholt er sie automatisch. In einer MACT-Nachricht darf immer nur eines der sechs möglichen Flags gesetzt werden. Sind mehrer Flags gesetzt, handelt es sich um eine ungültige Nachricht. In diesem Fall verwirft das Element die Nachricht einfach. Ist in der Nachricht keines der Flags gesetzt, wird sie als MACT-Hello-Nachricht interpretiert (siehe Kapitel 3.1.4). Mit Hilfe dieser Nachricht überprüft das Element, ob alle Nachbarn die gewünschten Routen haben oder nicht. Ist das nicht der Fall, werden entsprechende Reperaturmaßnahmen ergriffen. Um MACT-Nachrichten zu verschicken, bietet das Element für jeden Nachrichtentyp eine eigene Funktion an. Diese Funktionen sind so implementiert, dass sie selbständig Nachrichten auf die richtige Weise verschicken. So werden die Join, Prune und Leader -MACT-Nachrichten nur an das angegebene Ziel verschickt. Die UpdateMACT-Nachricht hingegen wird automatisch an alle DOWNSTREAM Hops verteilt. Studienarbeit Falk Ahlendorf 3 Implementierung 32 Das Gleiche gilt auch für die Reboot-MACT-Nachricht, welche automatisch auf allen Interfaces per Broadcast verteilt wird. 3.3.3 Das Element GroupHello Das GroupHello Element verfügt wie auch schon das Multicastactivationmessage-Element über einen Eingangs- und einen Ausgangsport. Dieses Element übernimmt die Generierung und Verarbeitung der GRPH-Nachrichten. Die Hauptaufgabe dieser Nachrichten ist es, wie in Abschnitt 2.2.2.5 beschrieben, Multicastgruppen in einem Netzwerk bekannt zu machen. Wird eine GRPH-Nachricht empfangen, so extrahiert das Element zuerst die Gruppe aus dem Multicast Group IP address“-Feld und den Group Leader“ aus dem Group ” ” ” Leader IP address“-Feld (siehe Kapitel 2.2.2.5). Anhand dieser beiden Felder und unter Berücksichtigung des Multicast Group Sequence Number“-Feldes wird anschließend ” überprüft, ob diese GRPH-Nachricht innerhalb der letzten BCAST ID SAVE Millisekunden bereits verarbeitet wurde. Nachdem die GRPH-Nachricht diese Prüfungen überstanden hat, werden die Felder in der Nachricht ausgewertet. Es wird überprüft, ob sich die Informationen in diesen Feldern gegenüber den gespeicherten in der Multicastroutingtabelle geändert haben. Da dies, wie bereits in Kapitel 2.2.2.10 erwähnt, ein Indiz dafür ist, dass möglicherweise zwei Group Leader“ in einer Multicastgruppe ” existieren. Wird ein solcher Fall erkannt und ist der Knoten dann auch selber einer der Group Leader“, wird das Wiederverbinden der Bäume eingeleitet. ” Stellt der Knoten aber fest, dass die Informationenen absichtlich geändert wurden (das Update-Flag ist gesetzt), übernimmt er die neuen Informationen in seine Routingtabelle. Zum Abschluss der Verarbeitung wird die GRPH-Nachricht erneut per Broadcast verschickt. Damit ist sichergestellt, dass auch alle Nachbarknoten sie empfangen. Mit Hilfe einer Timerfunktion, welche im GROUP HELLO INTERVALL aufgerufen wird, realisiert das Element seine zweite Aufgabe. In dieser Timerfunktion wird überprüft, für welche Gruppen der Knoten einen Group Leader“-Status hat. Für ” diese Gruppen wird dann eine GRPH-Nachricht erzeugt und per Broadcast versand. Somit stellt das Element auch sicher das im GROUP HELLO INTERVALL GRPHNachrichten vom Group Leader“ ausgesendet werden. ” Studienarbeit Falk Ahlendorf 3 Implementierung 33 3.3.4 Das Element Controler Das Controler-Element realisiert die Ablaufsteuerung innerhalb eines Knotens. Sein Aufbau besteht aus drei Zustandsautomaten. Jeder dieser Zustandsautomaten regelt einen bestimmten Ablauf. Es gibt jeweils einen Zustandsautomaten für das Beitreten, Reparieren und Verbinden eines Multicastbaums. Alle drei Zustandsautomaten besitzen nur zwei Zustände. Im ersten Zustand wird immer eine entsprechende Anforderung an die Nachbarknoten ausgesendet und möglicherweise wiederholt. Trifft eine Antwort auf die Anforderung ein, dann gehen die Zustandsautomaten in ihren zweiten Zustand über. In diesem Zustand erfolgt die Nachbereitung der Antworten. Allerdings erfolgt die Ausführung des Zustands nicht sofort nachdem Zustandsübergang, sondern erst nach dem eine gewisse Zeitspanne vergangen ist. Somit besteht noch die Möglichkeit, das weitere Antworten auf die Anfrage eintreffen und die beste daraufhin ausgewählt werden kann. 3.3.5 Das Element Forwarder Das Forwarder-Element hat zwei Aufgaben im Clickroutergraphen. Für jede dieser Aufgaben bietet das Forwarder-Element einen Eingangsport an. Die erste Aufgabe des Elements ist es eingehende Multicast-Datenpakete entgegenzunhemen und gegebenenfalls weiterzuleiten. Dazu prüft das Element die am Port 0 eingehenden Datenpakete darauf, ob sie bereits empfangen wurden. Dazu verwendet das Element die im Kapitel 2.2.2.11 beschriebene Methode. Hat das Element das Datenpaket bereits einmal empfangen, wird es einfach verworfen. Stellt das Element fest, dass das Datenpaket neu ist, wird als nächstes geprüft, ob das Datenpaket lokal zugestellt werden muss. Ist das der Fall, wird es einmal auf dem Ausgangsport 0 als Kopie ausgegeben. Im Anschluss überprüft das Element nun auch noch, ob es das Datenpaket eventuell an andere Knoten weiterleiten muss. Wird festgestellt, dass das Element die Daten nocheinmal weiterleiten muss, wird es zusätzlich noch auf Port 1 ausgegeben. Die zweite Aufgabe des Elements ist es, die selbst erstellten Multicast-Datenpakete so zu modifizieren, dass sie bei anderen Knoten auch als neue Datenpakete erkannt werden können. Dazu modifiziert das Element bei den auf Port 1 eingehenden Nachrichten das IP-ID-Feld. Dieses Feld wird durch das Element für jedes Paket erhöht. Damit können die anderen Knoten dieses Paket als ein neues Paket erkennen. Die so modifizierten Pakete werden im Anschluss auf Port 1 ausgegeben. Studienarbeit Falk Ahlendorf 3 Implementierung 34 3.4 Angepasste Elemente In den nächsten Abschnitten wird erläutert welche Änderungen an den wichtigsten Elementen durchgeführt wurden. 3.4.1 Das Element AODVDestinationClassifier Die Aufgabe des AODVDestinationClassifier ist es, zu entscheiden, ob die eingehenden RREP-Nachrichten weitergeleitet werden oder lokal benötigt werden. Dieses Element wurde so erweitert, dass es in der Lage ist, mit Multicast-RREPNachrichten umzugehen. Dazu musste zuerst die Konfiguration des Elements um die Multicastroutingtabelle erweitert werden. Mit Hilfe der Multicastroutingtabelle ist das Element nun in der Lage zu entscheiden, ob es sich bei der RREP-Nachricht um eine Multicast-RREP-Nachricht handelt oder nicht. Diese Information wird genutzt, um beim Weiterleiten der Nachricht die entsprechenden Routen in die Multicastroutingtabelle einzutragen. Außerdem verwirft das Element alle Multicast-RREP-Nachrichten, die einen schlechteren Weg zum Ziel, angeben als die beste bereits weitergeleitete RREP-Nachricht. Wird eine RREP-Nachricht so eingestuft, dass sie lokal zugestellt werden muss, wird sie nicht an das RouteDiscovery Element ausgegeben, sondern an das ControlerElement, da dieses für die Verarbeitung der Multicastrouten zuständig ist. 3.4.2 Das Element AODVKnownClassifier Das AODVKnownClassifier-Element ist dafür zuständig, zu entscheiden, ob ein Knoten auf eine RREQ-Nachricht antworten kann oder ob diese RREQ-Nachricht weitergeleitet werden muss. Auch diesem Element wurde in der Konfiguration die Multicastroutingtabelle hinzugefügt. Somit ist das Element nun auch in der Lage zu erkennen, ob es sich um eine Multicast-RREQ-Nachricht handelt. Stellt das Element fest, dass es sich um eine Multicast-RREQ-Nachricht handelt, so sieht es in der Multicastroutingtabelle nach, ob es die Anfrage beantworten kann und darf. Wenn das der Fall ist, wird die RREQ-Nachricht in Richtung des AODVGenerateRREP-Element weitergeleitet. 3.4.3 Das Element AODVGenerateRREP Mit Hilfe des AODVGenerateRREP-Elements werden die RREP-Nachrichten erzeugt. Damit dieses Element korrekte Multicast-RREP-Nachrichten erzeugen kann, musste Studienarbeit Falk Ahlendorf 3 Implementierung 35 auch hier die Konfiguration um die Multicastroutingtabelle erweitert werden. Mit Hilfe der Multicastroutingtabelle kann nun dieses Element erkennen, ob es sich bei einer eingehenden RREQ-Nachricht um eine multicast RREQ-Nachricht handelt oder nicht. Handelt es sich um eine multicast RREQ-Nachricht, kann das Element die möglichen Erweiterungen auswerten und ein entsprechende RREP-Nachricht generieren. Die Generierung der RREP-Nachricht ist fast komplett aus der Unicastversion übernommen worden. Dieser Programmabschnitt wurde lediglich so verändert, dass er nun auch in der Lage ist, die RREP-Erweiterungen, die durch MAODV eingeführt wurden, mit an das Paket anzuhängen. 3.4.4 Das Element AODVGenerateRREQ Dieses Element besitzt die Aufgabe RREQ-Nachrichten zu erzeugen. Wie auch schon bei den anderen Elementen wurde bei diesem Element die Konfiguration um die Multicastroutingtabelle erweitert. Damit ist es nun diesem Element auch möglich, für Multicastgruppen RREQ-Nachrichten zu erzeugen. Möglich ist das über zwei neue Funktionen, die dem Element hinzugefügt wurden. Das ist zum einen die Funktion generateMcastRREQ. Diese ist dafür zuständig ist RREQ-Nachrichten zu erzeugen, wie man sie für den Beitritt oder zur Linkreperatur benötigt. Zum anderen wurde auch die Funktion generateUnicastMcastRREQ hinzugefügt. Ihre Aufgabe ist es den Knoten die Möglichkeit zu gegeben, den Group Leader“ direkt anzusprechen. Unter anderem wird ” diese Art der Kommunikation benötigt, wenn zwei Multicastbäume wieder miteinander verbunden werden sollen. 3.5 Anpassungen im Clickroutergraph Die Änderungen im Clickroutergraphen sind zahlreich. Ein vollständiges Clickscript mit allen Änderungen ist im Anhang dargestellt. Eine der wichtigen Änderungen ist, dass die Multicastroutingtabelle dem Graphen hinzugefügt wurde. Dies ist gleich in den ersten Zeilen zu erkennen, die nun wie folgt lauten: mcasttable :: MulticastRoutingTable(); neighbours :: AODVNeighbours(interfaces,mcasttable); Des Weiteren musste der AODV Classifier so erweitert werden, dass er nun auch die MACT- und GRPH-Nachrichten erkennt. Damit sieht die Konfiguration für den Classifier nun wie folgt aus: Studienarbeit Falk Ahlendorf 3 Implementierung 36 //RREQ, RERR, HELLO, RREP, MACT, GRPH, other classify_aodv :: Classifier(42/01, 42/03, 42/02 22/01, 42/02, 42/05, 42/06, - ); Wie bereits in den vorangegangen Kapitel erwähnt, wurden einige AODV Elemente erweitert. Dabei wurden meist auch neue Konfigurationsparameter angehängt. Beispielhaft für alle geänderten Elemente sei hier die neue Konfiguration des AODVDestinationClassifiers genannt. destinationclassifier :: AODVDestinationClassifier(neighbours, mcasttable); Des Weiteren mussten die neuen Elemente in den Routergraphen integriert werden. Das MACT-Element und das GRPH-Element wurden dabei direkt hinter die Ausgabe des AODVClassifiers gelegt. Die Ausgabeports der beiden Elemente werden dann auf outputarpcl bzw. outputcl weitergeleitet. Das Forwarder-Element wurde in den Routergraphen vor den ipclassifier eingeschoben, sodass eingehende Multicastdatenpakete rechtzeitig verworfen beziehungsweise weitergeleitet werden können. Studienarbeit Falk Ahlendorf 4 Tests 37 4 Tests In diesem Kapitel werden die Tests und Ergebnisse vorgestellt, die verwendet wurden, um die Funktionsfähigkeit der Implementierung nachweisen zu können. 4.1 Einleitung Abbildung 4.1: Aufbau des gesammten Demonstrators Die Tests wurden im Demonstrator für kontextsensitives Routing durchgeführt, welcher auf der Dimplomarbeit [Wenz08] basiert, seitdem aber modifiziert und erweitert Studienarbeit Falk Ahlendorf 4 Tests 38 wurde. Für die Tests wurde nicht der ganze Demonstrator benötigt, sondern lediglich der WLAN-Teil. Um nachweisen zu können, dass das Protokoll auch über mehre Hops funktioniert, wurden drei Rechner verwendet. Abbildung 4.2: Empfangsbereiche der drei verwendeten Rechner Wie aus der Abbildung 4.2 zu entnehmen ist, erreicht der Knoten 3 den Knoten 1 nur über den Knoten 2. Somit muss das Weiterleiten der Nachrichten funktionieren, damit diese beiden Knoten miteinander kommunizieren können. Jeder der Testrechner wurde mit der gleichen Clickversion ausgestattet und mit einem individuell angepassten Konfigurationsscript versehen. Das Mitschneiden der Kommunikation wurde mit Hilfe des Programms Wireshark realisiert. Der eingestellte Filter !(aodv.type==2 and ip.ttl==1), im Wireshark ist dafür zuständig die AODV-Hellopakete auszublenden. In einigen Fällen wurde dieser Filter noch um !icmp && !arp erweitert. Dieser Filter blendet infolge dessen alle ICMPund ARP-Nachrichten zusätzlich noch aus. Dies ist nötig, damit man die gewünschten Pakete besser sehen kann. Diese Filter haben aber keine weiteren Auswirkungen auf die Ergebnisse der folgenden Tests. Studienarbeit Falk Ahlendorf 4 Tests 39 4.2 Test der Initialisierungsprozedur Dieser Test beschäftigt sich mit der Initialisierungsphase des MAODV Protokolls. Dafür soll nachgewiesen werden, dass ein Knoten, der gestartet wird, eine Reboot MACTNachricht aussendet (siehe Kapitel 2.2.2.4). Außerdem soll gezeigt werden, dass ein Knoten, welcher einer nicht existierenden Multicastgruppe beitritt, automatisch zum Group Leader“ dieser Gruppe wird. ” Bei diesem Test ist Knoten 2 dem Netzwerk bereits einige Zeit beigetreten. Allerdings hat Knoten 2 in dieser Zeit nicht versucht einer Multicastgruppe beizutreten. Knoten 1 tritt dem Netzwerk gerade bei und wird versuchen einer Multicastgruppe beizutreten. Knoten 3 wurde bei dem Test zwischen Knoten 2 und Knoten 1 platziert. Allerdings wurde in diesem Test auf Knoten 3 kein Click gestartet, sondern er wurde nur genutzt, um die Kommunikation im Netzwerk aufzuzeichnen. Abbildung 4.3: Knoten 1 sendet die gewünschte Reboot-MACT In Abbildung 4.3 ist zu sehen, dass der Knoten 1 wie erwartet, nach dem Start eine Reboot-MACT-Nachricht aussendet. Dass es sich bei Paket 7 um die gewünschte Nachricht handelt, ist an der Hexadezimalen Zahlenfolge 0x0508 erkennbar, wie sie am Anfang des Datenblocks im Paket zu sehen ist (siehe auch Kapitel 2.2.2.4). Im Anschluss sendet der Knoten eine RREQ-Nachricht aus, da er versucht der Multicastgruppe 224.0.62.1 beizutreten. Aus Abbildung 4.4 ist zu entnehmen, dass auch das entsprechende Flag gesetzt wurde, wie es in Kapitel 2.2.2.7 beschrieben ist. Des Weiteren ist zu sehen, dass Knoten 2 die Pakete auch wie gewünscht wiederholt. Wie erwartet, erhält der Knoten trotz dessen keine Antwort auf seine Anfrage. Damit wird er zum Group Leader“, wie in Abbildung 4.5 zu sehen ist. Denn bei Paket 21 handelt es sich ” um eine GRPH-Nachricht mit gesetztem Update-Flag. Dies is an der hexadezimalen Studienarbeit Falk Ahlendorf 4 Tests 40 Abbildung 4.4: Knoten 1 sendet die RREQ-Nachrichten Abbildung 4.5: Knoten 1 wird Group Leader“ und sendet die GRPH-Nachrichten ” Zahlenkombination 0x0680 am Anfang des Datenblockes erkennenbar. Abschließend lässt sich zu diesem Test sagen, dass sich Knoten 1 wie erwartet verhalten hat. Somit kann der Test als bestanden gewertet werden. 4.3 Multicastbaum Aufbau- und Reperaturtest Dieser Test soll zeigen, dass der Multicastbaum wie in Kapitel 2.2.2.7 beschrieben wurde, aufgebaut wird. Auch soll gezeigt werden, dass MADOV in der Lage ist, den Multicastbaum aufrecht zu erhalten. Dazu wird untersucht, ob die im Kapitel 2.2.2.9 beschriebenen Reparaturmechanismen anlaufen . Studienarbeit Falk Ahlendorf 4 Tests 41 Um nachzuweisen, dass der Multicastbaum intakt ist, sendet der Group Leader“ ” im 500ms Intervall Multicastdatenpakete aus. Ist die Verbindung eines Knoten zum Group Leader“ intakt, so empfängt der Knoten diese Multicastdatenpakete. ” Der Test macht an der Stelle weiter, an der der vorangegangene Test aufgehört hat. Dazu wurde Knoten 3 nun außerhalb der Reichweite des Knotenes 1 platziert, wie in der Einleitung bereits beschrieben wurde. Anschließend wurde das Clickscript gestartet, woraufhin der Knoten 3 dem Multicastbaum beizutreten versucht. Da Knoten 1 Group ” Leader“ der gesuchten Multicastgruppe ist, muss der Knoten 3 auf seine Anfrage auch eine Antwort erhalten. Abbildung 4.6: Knoten 3 sendet RREQ-Nachrichten Sehen kann man diesen Beitrittsversuch in Abbildung 4.6. Der Knoten 3 sendet entsprechende RREQ-Nachricht mit den Paketen 21 und 22 aus. In Paket 28 erhält er anschließend die Antwort für die gewünschte Route. Nach kurzem Warten auf weitere eintreffende Antworten sendet der Knoten 3, wie erwartet eine MACT-Join-Nachricht aus, um die Multicastroute zu aktivieren. Zu sehen ist diese Nachricht als Paket 39 in der Abbildung 4.7. Mit Paket 41 erfolgt anschließend die Bestätigung von Knoten 2, dass dieser die Nachricht empfangen hat und sie verarbeitet. Diese Verarbeitung führt seinerseits dazu, dass der Knoten 2 den Link zu Knoten 1 aktivieren muss. Dies erfolgt mit Paket 43, welches man auch in der Abbildung 4.7 sehen kann. Nach ungefähr 90s Betriebszeit ist aufgrund von Störungen die Verbindung zu Knoten 2 kurz abgerissen. Wie erwartet leitete Knoten 3 daraufhin die Reparatur des Links ein. Zu sehen ist das in der Abbildung 4.8. Der in diesem Bildschirmausschnitt ausgewählten RREQ-Nachricht wurde wie erwartet die Erweiterung vom Typ 4 angehängt (siehe Kapitel 2.2.2.2). Mit Paket 466 erhält der Knoten 3 eine Antwort auf seine Studienarbeit Falk Ahlendorf 4 Tests 42 Abbildung 4.7: Knoten 3 aktiviert die Multicastroute Abbildung 4.8: Knoten 3 repariert die Multicastroute Reparaturanfrage und bestätigt den Link in den nachfolgenden Paketen. Die Abbildung 4.9 zeigt die Anzahl der empfangenen Multicastpakete pro Sekunde. Da der Knoten 1 als Group Leader“ zwei dieser Pakete pro Sekunde aussendet, sollte ” sich im Idealfall eine Gerade bei zwei Paketen pro Sekunden ausbilden. Deutlich zu sehen ist der gerade angesprochene Linkausfall bei etwa 90s. Einen ähnlichen Vorfall kann man nochmals bei 145s beobachten. Bei der Spitze, welche man bei etwa 195s sehen kann, handelt es sich um ein Kontextrouteradvertisement, welche in den für den Test verwendeten Scripten bereits per Studienarbeit Falk Ahlendorf 4 Tests 43 Abbildung 4.9: IO Graph für die Multicastdatenpakete des Knoten 3 Multicast verschickt werden. Damit läßt sich sagen das dieser Test von der Implementierung erfolgreich absolviert worden ist. 4.4 Test des Kontextrouters Der Kontextroutertest soll nachweisen, dass der Knotextrouter immer noch auf Kontextanfragen reagiert. Dazu wurde auf Knoten 1 und 2 Click mit einem entsprechenden Clickscript gestartet. Auf Knoten 3 hingegen wurde der in der Diplomartbeit [Renh08] erweiterte aodv-uu client gestartet. Anschließend ist mit Hilfe des Programms cont client, wie in [Renh08] beschrieben, eine Kontextanfrage durchgeführt worden. Abbildung 4.10: CRREQ und CREEP am Knoten 3 Aus Abbildung 4.10 kann man entnehmen, dass der Knoten 3 die RREQ-Nachricht mit der entsprechenden Erweiterung vom Typ 16 versendet hat. Dieses RREQ-Nachricht ist vom Knoten 2 weitergeleitet worden und wurde vom Kontextrouter beant- Studienarbeit Falk Ahlendorf 4 Tests 44 wortet. Diese Antwort trifft dann mit Paket 185 beim Knoten 3 ein und trägt die Erweiterung vom Typ 17. Daraus lässt sich schlussfolgern, dass das Empfangen von CRREQ1 -Nachrichten und das Versenden von CRREP2 -Nachrichten durch die Implementierung nicht beeinflusst wurde. 4.5 Nachweis der Multicastkommunikation Dieser Test beschäftigt sich mit dem Nachweis, dass die Kommunikation im MAODVProtokoll eine echte Multicastkommunikation ist. Abbildung 4.11: Testaufbau für den Nachweis der Multicastkommunikation Für diesen Test werden sechs Netzwerkknoten benötigt. Diese werden, wie in Grafik 4.11 zu sehen, angeordnet. Bei diesem Test sendet der Knoten 1 Datenpakete aus, die der Knoten 3 weiterleiten muss, da Knoten 2 und 4 die Daten empfangen möchten. 1 CRREQ steht für Context Sensitives Route Request“ und ist ein erweitertes RREQ für Kontextan” fragen an den Kontextrouter. 2 CRREP steht für Context Sensitives Route Reply“ und ist ein erweitertes RREP mit dem der ” Kontextrouter auf CRREQ-Anfragen antworten kann. Studienarbeit Falk Ahlendorf 4 Tests 45 Knoten 5 und 6 dürfen dabei am Anfang die Daten nicht weiterleiten. Somit darf Knoten 6 die Datenpakete nicht sehen. Zum Abschluss tritt Knoten 6 dem Multicastbaum noch bei, um zu zeigen, dass er die Daten empfangen könnte, wenn er wollte. Um festlegen zu können, welcher Knoten welchen anderen Knoten empfängt, wurde dieser Test im Netzwerksimulator NS2 durchgeführt. Dabei wurde NS2 so konfiguriert, dass der Simulator nur die physikalische Schicht und die MAC Schicht simuliert. Das Routing der Datenpakete hingegen wird von den gleichen Clickscripten durchgeführt, wie sie auch in den anderen Tests verwendet wurden. Abbildung 4.12: IO-Graph für Datenpakete am Knoten 1 Abbildung 4.13: IO-Graph für Datenpakete am Knoten 2 Die Abbildung 4.12 zeigt die empfangenen und gesendeten Multicastpakete pro Sekunde des Knoten 1. Da der Knoten 1 zwei Pakete pro Sekunde aussendet und weil er die weitergeleiteten Pakete von Knoten 3 nochmals empfängt weist, die Grafik vier Pakete pro Sekunde aus. In den Abbildungen 4.13 und 4.15 sieht man das die Knoten 2 und 4 jeweils einen Datenstrom von zwei Paketen pro Sekunde über den ganzen Test hinweg empfangen. Der IO-Graph für Knoten 3 (Abbildung 4.14) weist zu Beginn des Tests wie bei Knoten 1 vier Pakete pro Sekunde aus. Es handelt sich hierbei um vier Pakete pro Sekunde, weil die empfangenen Pakete von Knoten 1 und die weitergeleite- Studienarbeit Falk Ahlendorf 4 Tests 46 Abbildung 4.14: IO-Graph für Datenpakete am Knoten 3 Abbildung 4.15: IO-Graph für Datenpakete am Knoten 4 Abbildung 4.16: IO-Graph für Datenpakete am Knoten 6 ten Pakete zusammengezählt werden. Bei 100s springt der Graph auf sechs Pakete pro Sekunde. Dies liegt daran, da nun auch Knoten 6 dem Multicastbaum beigetreten ist. Damit empfängt Knoten 3 nun zusätzlich noch die weitergeleiteten Pakete von Knoten 5. Wie auch schon Knoten 2 und Knoten 4 empfängt Knoten 6 zwei Pakete pro Sekunde, nachdem er dem Multicastbaum beigetreten ist. Zu sehen ist dies in Abbildungen 4.16. Aus den IO-Graphen kann man nun einige Schlussfolgerungen ableiten. Bei der Kommunikation, die durch die Implementierung realisiert wird, kann es sich Studienarbeit Falk Ahlendorf 4 Tests 47 nicht um Unicasts handeln. Denn wäre dies der Fall, müsste der IO-Graph vom Knoten 1, zum einen acht Pakete pro Sekunde für die ersten hundert Sekunden ausweisen. Jeweils zwei Pakete pro Sekunde für jeden Knoten und das noch mal zwei, weil die Weiterleitungen von Knoten 3 auch mitgezählt werden müssen. Zum anderen müsste ein Sprung im Graphen zu sehen sein, wenn Knoten 6 dem Multicastbaum beitritt. Die Datenpakete werden auch nicht per Broadcast versendet, denn dann müsste Knoten 6 die Datenpakete auch Empfangen, bevor er der Multicastgruppe beigetreten ist. Des Weiteren kann es sich bei der Kommunikationsform auch nicht um Anycast handeln. Denn Knoten 2, 4 und 6 empfangen einen kontinuierlichen Datenstrom, nachdem sie der Multicastgruppe beigetreten sind. Somit kann geschlussfolgert werden, dass es sich bei der Kommunikationsform um Multicast handelt. Da die Datenpakete an ausgewählte Knoten zugestellt werden können, ohne das sie mehrfach übertragen werden müssen. Damit hat der Test gezeigt, dass es sich bei der Kommunikationsform, die durch das MAODV Protokoll realisiert wird, um Multicast handelt. 4.6 Kontextrouter Multicasttest Eine der Aufgaben dieser Arbeit war es, dass der Kontextrouter seine ICMP-Advertisements per Multicast versenden kann. Dies soll in diesem Test nachgewiesen werden. Dazu gliedert sich der Test in zwei Teile. Im ersten Teil soll gezeigt werden, dass der Kontextrouter seine ICMP-Advertisements per Multicast verschickt. Dafür wurde die Konfiguration des Kontextrouters so verändert das er diese Nachrichten im Intervall von 500ms aussendet. Dies verringert zum einen die Dauer des Tests erheblich. Zum anderen wird die Wahrscheinlichkeit dafür, dass man keine solche Nachricht aufgrund von Störungen im WLAN empfängt, deutlich vermindert. In diesem Test ist Knoten 1 der Group Leader“ und bereits einige Zeit der Multicastgruppe beigetreten. Knoten ” 3 wird außerhalb der Reichweite von Knoten 1 platziert und kann diesen nur über Knoten 2 erreichen. Anschließend wird überprüft, ob die ICMP-Advertisements nur dann weitergeleitet werden, wenn Knoten 3 auch dem Multicastbaum beigetreten ist. Der zweite Teil zeigt das der Kontextrouter auch weiterhin auf ICMP-Solicitation antwortet. Dazu wurde der Knoten 3 neben dem Kontextrouter platziert. Im Anschluss wurden, mit Hilfe des aodv-uu-Clients, ICMP-Solicitation-Nachrichten ausgesendet. Da der aodv-uu-Client nicht Multicastfähig ist, wurde außerdem die Konfiguration des Knotens 2 so angepasst, dass er der Multicastgruppe beitritt. Dies ist erforderlich, weil der Kontextrouter keine Antworten aussenden würde, wenn nicht mindestens 2 Knoten Studienarbeit Falk Ahlendorf 4 Tests 48 Abbildung 4.17: IO-Graph für ICMP-Advertisements am Knoten 3 im Multicastbaum enthalten sind. Des Weiteren wurde für diesen Test die Konfiguration des Kontextrouters wieder auf seine Standardeinstellungen gestellt. Damit ist wieder erkennbar, ob ein ICMP-Advertisement als Antwort auf eine ICMP-Solicitation Nachricht gesendet wurde oder ob es nur zufällig gerade an der Stelle versandt worden ist. In Abbildung 4.17 ist der IO-Graphen des Knotens 3 für den ersten Test zu sehen. Zur Erstellung des IO-Graphen wurde im Wireshark der Filter so eingestellt, dass nur die eingehenden ICMP-Advertisements angezeigt werden. Der Knoten 3 ist in diesem Test bei etwa 10s dem Multicastbaum beigetreten und hat ihn 35s nach Testbeginn wieder verlassen. In der Abbildung 4.17 ist gut zu sehen, dass der Knoten 3 wie erwartet ab 10s die ICMP-Nachrichten empfängt. Sobald aber Knoten 3 die Multicastgruppe verlassen hat, werden die ICMP-Nachrichten auch nicht mehr weitergeleitet. Abbildung 4.18: Kontextrouter antwortet auf ICMP-Solicitation-Nachrichten Studienarbeit Falk Ahlendorf 4 Tests 49 Das Ergebnis des zweite Teils dieses Testes ist in Abblidung 4.18 zu sehen. Wie Anfangs bereits beschrieben, hat Knoten 3 die ICMP-Solicitation-Nachrichten ausgesendet. Daraufhin hat der Kontextrouter mit ICMP-Advertisements geantwortet. Das diese ICMP-Advertisments nicht zufällig an dieser Stelle ausgesendet wurden, ist daran zu erkennen, dass es zwei Nachrichten mit einem Abstand von etwa 500ms sind. Das Intervall in dem der Kontextrouter diese Nachrichten von sich aus aussendet, beträgt aber 16s. Daraus lässt sich schlussfolgern, dass mindestens eine dieser Nachrichten durch die ICMP-Solicitation-Nachrichten hervorgerufen worden ist. Abschließend lässt sich zu diesem Test sagen, dass er zeigt, dass die ICMP-Advertisements erfolgreich per Multicast verschickt werden und das der Kontextrouter auch auf ICMP-Solicitation-Nachrichten reagiert. Studienarbeit Falk Ahlendorf 5 Zusammenfassung und Ausblick 50 5 Zusammenfassung und Ausblick Die vorliegenden Arbeit stellt die Basis für Multicastrouting im DekoR dar. Dafür wurde das für diese Aufgabe verwendete MAODV-Protokoll ausführlich beschrieben. Im weiteren ist auf die Schwachstellen des MAODV-Protokolls eingegangen worden und es wurde eine mögliche Lösung beschrieben. Im Anschluss wurde eine Implementierung des Protokolls vorgestellt. Diese Implementierung wurde auf ihre Funktionsfähigkeit hin im DekoR und Netzwerksimulator NS2 untersucht. Die Ergebnisse dieser Untersuchung wurden dann im Rahmen dieser Arbeit vorgestellt. Damit ist es mit Hilfe dieser Arbeit nun möglich, die ICMP-Advertisements und ICMP-Solicitation-Nachrichten im DekoR mit Hilfe von Multicast zu verschicken. Somit werden die Einschränkungen, die es für Broadcast-Nachrichten in einem Ad-Hoc-Netzwerk gibt, erfolgreich umgangen. Die in dieser Arbeit vorgestellte Multicastimplementierung ist so allgemein gehalten, dass sie auch für andere Multicast-Nachrichten verwendet werden kann. So wäre es zum Beispiel denkbar, dass man diese Funktionalität auch dem Client direkt zur Verfügung stellt. Dafür müsste der Implementierung noch das Internet Group Mana” gement Protocol“ hinzugefügt werden. Mit der Hilfe dieses Protokolls wäre ein Client dann in der Lage der MAODV-Implementierung mitzuteilen, welche Multicastgruppe er benötigt. Auf diese Weise könnten dann Radiosendungen per Multicast verbreitet werden. Studienarbeit Falk Ahlendorf A Software und Konfigurationsdateien 51 A Software und Konfigurationsdateien A.1 Clickscript des Kontextrouters // context-router script for 3 interfaces // marco wenzel // 2007-12 // modified by maik debes // modified by karsten renhak // modified by Falk Ahlendorf //*************** configure interfaces *************** AddressInfo(mydev0 192.168.1.10/24 00:50:04:EE:96:52); //fixed network AddressInfo(mydev1 192.168.2.10/24 00:50:04:EE:95:A8); //wired aodv network AddressInfo(mydev2 10.0.0.10/24 00:02:2D:49:8C:FF); //wireless aodv network interfaces::AODVInterfaces(eth1 192.168.2.10/24 00:50:04:EE:95:A8, eth3 10.0.0.10/24 00:02:2D:49:8C:FF); //macfilter::Classifier(<OFFSET>/<MAC_ADRESSE>, -); //macfilter::Classifier(6/001D7D38EC93, -); //*************** configure routingtables *************** mcasttable :: MulticastRoutingTable(); neighbours :: AODVNeighbours(interfaces,mcasttable); cservers :: CServers; clients :: CClients; aconfig :: AdvertConfig; //*************** element classes *************** elementclass OutputClass{ input[0] -> ipsrc :: IPClassifier(src mydev0, src mydev1, src mydev2, -); ipsrc[0] -> [0]output; Studienarbeit Falk Ahlendorf A Software und Konfigurationsdateien 52 ipsrc[1] -> [1]output; ipsrc[2] -> [2]output; ipsrc[3] -> ipdst :: IPClassifier(dst net mydev0, dst net mydev1, dst net mydev2, -); ipdst[0] -> [0]output; ipdst[1] -> [1]output; ipdst[2] -> [2]output; ipdst[3] -> tee::Tee(3); tee[0] -> [0]output; tee[1] -> [1]output; tee[2] -> [2]output; } elementclass OutputEth0{ input[0] -> Queue(2000) -> ToDevice(eth0); } elementclass OutputEth1{ input[0] -> Queue(2000) -> ToDevice(eth1); } elementclass OutputEth3{ input[0] -> Queue(2000) -> todev::ToDevice(eth3); } elementclass InputEth0{ Studienarbeit Falk Ahlendorf A Software und Konfigurationsdateien 53 $myaddr_ethernet | FromDevice(eth0) -> HostEtherFilter($myaddr_ethernet, DROP_OWN false, DROP_OTHER true) -> output; } elementclass InputEth1{ $myaddr_ethernet | FromDevice(eth1) -> HostEtherFilter($myaddr_ethernet, DROP_OWN false, DROP_OTHER true) -> Paint(0) -> output; } //ohne macfilter elementclass InputEth3{ $myaddr_ethernet | FromDevice(eth3) -> HostEtherFilter($myaddr_ethernet, DROP_OWN false, DROP_OTHER true) -> Paint(1) -> output; } //mit macfilter /* elementclass InputEth3{ $myaddr_ethernet | FromDevice(eth3) -> HostEtherFilter($myaddr_ethernet, DROP_OWN false, DROP_OTHER true) -> macfilter::Classifier(6/00E000D1D034, -); macfilter[0] -> Discard; macfilter[1] -> Paint(1) -> output; } */ //macfilter ende elementclass ClassifyARP{ $myaddr | Studienarbeit Falk Ahlendorf A Software und Konfigurationsdateien 54 input[0] //arp request, arp reply, other -> arpclass :: Classifier(12/0806 20/0001, 12/0806 20/0002, -); arpclass[0] -> ARPResponder($myaddr, $myaddr) -> [0]output; arpclass[1] -> [1]output arpclass[2] -> CheckIPHeader(OFFSET 14) -> MarkIPHeader(14) -> [2]output; } elementclass System{ FromHost(fake0, mydev0) -> fromhost_cl :: Classifier(12/0806, -); //arp request, other FromHost(fake1, mydev1) -> fromhost_cl; FromHost(fake2, mydev2) -> fromhost_cl; fromhost_cl[0] -> ARPResponder(0.0.0.0/0 1:1:1:1:1:1) -> ToHost(fake0); fromhost_cl[1] -> Strip(14) -> CheckIPHeader -> MarkIPHeader -> output_cl :: IPClassifier(dst net mydev0, -); output_cl[0] -> [0]output; output_cl[1] -> [1]output; input[0] -> dstclass :: IPClassifier(dst net mydev0, dst net mydev1, dst net mydev2); dstclass[0] -> EtherEncap(0x0800, 1:1:1:1:1:1, mydev0) -> CheckIPHeader(14) -> MarkIPHeader(14) -> ToHost(fake0); dstclass[1] Studienarbeit Falk Ahlendorf A Software und Konfigurationsdateien 55 -> EtherEncap(0x0800, 1:1:1:1:1:1, mydev1) -> CheckIPHeader(14) -> MarkIPHeader(14) -> ToHost(fake1); dstclass[2] -> EtherEncap(0x0800, 1:1:1:1:1:1, mydev2) -> CheckIPHeader(14) -> MarkIPHeader(14) -> ToHost(fake2); } elementclass FilterLocalhost{ input //ping responder eingeschaltet: -> localhost :: IPClassifier(dst host mydev0, dst host mydev1, dst host mydev2, ip proto icmp && icmp type routersolicit, - ); //cip0, cip1, cip2, solicit, other localhost[0] -> ping :: ICMPPingResponder; localhost[1] -> ping; localhost[2] -> ping; localhost[3] -> Strip(14) -> classifyicmpcode :: Classifier(21/0a, -) //icmp-code = 10 // -> classifyadvertdst :: IPClassifier(dst net mydev0, // dst net mydev1, // dst net mydev2); -> classifyadvertdst :: Classifier(12/C0A801, 12/C0A802, 12/0A0000); localhost[4] -> classifyipdst :: IPClassifier(dst net mydev0, -); ping[0] -> Strip(14) -> CheckICMPHeader -> CheckIPHeader -> MarkIPHeader -> classifyipdst; Studienarbeit Falk Ahlendorf A Software und Konfigurationsdateien 56 ping[1] -> [0]output; //ping responder ausgeschaltet: /* -> localhost :: IPClassifier(dst host mydev0, dst host mydev1, dst host mydev2, ip proto icmp && icmp type routersolicit, - ); //cip0, cip1, cip2, solicit, other localhost[0] -> [0]output; localhost[1] -> [0]output; localhost[2] -> [0]output; localhost[3] -> Strip(14) -> classifyicmpcode :: Classifier(21/0a, -) //icmp-code = 10 -> classifyadvertdst :: IPClassifier(dst net mydev0, dst net mydev1, dst net mydev2); localhost[4] -> classifyipdst :: IPClassifier(dst net mydev0, -); */ //ping ende classifyicmpcode[1] -> Discard; classifyadvertdst[2] -> ICMPRouterAdvert(mydev2, 0, aconfig) -> IPEncap(1, mydev2, 224.0.62.1, TTL 250) -> EtherEncap(0x0800, mydev2, ff:ff:ff:ff:ff:ff) -> [1]output; classifyadvertdst[1] -> ICMPRouterAdvert(mydev1, 0, aconfig) -> IPEncap(1, mydev1, 255.255.255.255, TTL 2) -> EtherEncap(0x0800, mydev1, ff:ff:ff:ff:ff:ff) -> [1]output; classifyadvertdst[0] Studienarbeit Falk Ahlendorf A Software und Konfigurationsdateien // 57 -> ICMPRouterAdvert(mydev0, 0, aconfig) -> IPEncap(1, mydev0, 255.255.255.255, TTL 2) -> IPEncap(1, mydev0, 255.255.255.255, TTL 2) -> EtherEncap(0x0800, mydev0, ff:ff:ff:ff:ff:ff) -> [1]output; classifyipdst[0] -> [2]output; classifyipdst[1] -> [3]output; } elementclass RouteDiscovery{ $genrreq | input[0] //data -> [0]discovery :: AODVWaitingForDiscovery($genrreq,neighbours); input[1] -> [1]discovery; //rrep discovery[0] -> [0]output; //found discovery[1] //not found -> [1]output; AODVLinkNeighboursDiscovery(neighbours,discovery); } elementclass ClassifyAODV { input[0] -> from_non_aodvsubnet :: IPClassifier(src net mydev0, - ); // handle CRREQ from mydev0 separately -// they aren’t from a AODV network from_non_aodvsubnet[0] -> aodv_crreq :: Classifier(42/01 66/10, - ); from_non_aodvsubnet[1] //RREQ, RERR, HELLO, RREP, MACT, GRPH, other -> classify_aodv :: Classifier(42/01, 42/03, 42/02 22/01, 42/02, 42/05, 42/06, - ); aodv_crreq[0] -> Paint(16) //originator net mydev0 and CRREQ Studienarbeit Falk Ahlendorf A Software und Konfigurationsdateien 58 // set IP address from incoming interface to destination annotation -> SetIPAddress(mydev0) -> [0]output; // CRREQ from mydev0 aodv_crreq[1] //originator net = 192.168.1.x and no CRREQ! -> [7]output; // other classify_aodv[0] -> [1]output; classify_aodv[1] -> [2]output; classify_aodv[2] -> [3]output; classify_aodv[3] -> [4]output; classify_aodv[4] -> [5]output; classify_aodv[5] -> [6]output; classify_aodv[6] -> [7]output; // RREQ // RERR // HELLO // RREP // MACT // GRPH // other } //*************** element declarations *************** outputcl :: OutputClass; outputarpcl :: OutputClass; outputeth0 :: OutputEth0; outputeth1 :: OutputEth1; outputeth3 :: OutputEth3; classifyarpeth0 :: ClassifyARP(mydev0); classifyarpeth1 :: ClassifyARP(mydev1); classifyarpeth3 :: ClassifyARP(mydev2); arpqueriereth0 :: ARPQuerier(mydev0); arpqueriereth1 :: ARPQuerier(mydev1); arpqueriereth3 :: ARPQuerier(mydev2); classifyip :: IPClassifier(dst udp port 654, -); //cip (on=30, cf=1; 34.Byte/Inhalt in Hex) classifycip :: Classifier(34/9E, -); cipforwarder :: ForwardCIP(cservers, clients); system :: System; classifycipout :: IPClassifier(dst net mydev0, dst net mydev1, dst net mydev2, -); //AODV, other Studienarbeit Falk Ahlendorf A Software und Konfigurationsdateien 59 filterlocalhost :: FilterLocalhost; classifyaodv :: ClassifyAODV; // has to appear after "filterlocalhost" lookup :: AODVLookUpRoute(neighbours); //cip (on=16, cf=1), without ethernet-header discoverycipclass :: Classifier(20/9E, -); rreqclass :: Classifier(66/10, - ); //crreq (extension-type=16) destinationclassifier :: AODVDestinationClassifier(neighbours,mcasttable); setrrepheaders::AODVSetRREPHeaders() routereply :: AODVGenerateRREP(neighbours,setrrepheaders,mcasttable); rreqfwclass :: Classifier(50/C0A801, -); //destination net = 192.168.1.x mcastforward :: mcast_forward(mcasttable,neighbours); mtest :: mcast_datatest(mcasttable); classifymcast :: IPClassifier(dst net 224.0.0.0/28,-); mtest ->[1]mcastforward; mcastforward[0] -> classifyip; mcastforward[1] ->SetIPChecksum ->outputcl; classifymcast[0] -> [1] mcastforward; classifymcast[1] -> outputcl; rerr:: AODVGenerateRERR(neighbours,mcasttable) -> outputcl; knownclassifier :: AODVKnownClassifier(neighbours,mcasttable); hello::AODVHelloGenerator(neighbours) -> outputcl; genrreq :: AODVGenerateRREQ(neighbours,knownclassifier,mcasttable) -> hello; routediscovery :: RouteDiscovery(genrreq); mact :: mcast_MulticastActivationMessage(mcasttable,neighbours) ->StripToNetworkHeader Studienarbeit Falk Ahlendorf A Software und Konfigurationsdateien 60 ->outputarpcl; mcastControler :: mcast_Controler(mcasttable,neighbours,genrreq,mact); grouphello :: mcast_GroupHello(mcasttable, neighbours, mcastControler) -> outputcl; //*************** element connections *************** InputEth0(mydev0) -> classifyarpeth0; classifyarpeth0[0] -> outputeth0; //arp request classifyarpeth0[1] -> [1]arpqueriereth0; //arp reply classifyarpeth0[2] -> [0]mcastforward; //other InputEth1(mydev1) -> classifyarpeth1; classifyarpeth1[0] -> outputeth1; //arp request classifyarpeth1[1] -> [1]arpqueriereth1; //arp reply classifyarpeth1[2] -> AODVTrackNeighbours(rerr, neighbours,mcasttable) -> [0]mcastforward; //other InputEth3(mydev2) -> classifyarpeth3; classifyarpeth3[0] -> outputeth3; //arp request classifyarpeth3[1] -> [1]arpqueriereth3; //arp reply classifyarpeth3[2] -> AODVTrackNeighbours(rerr, neighbours,mcasttable) -> [0]mcastforward; //other classifyip[0] -> classifyaodv; classifyip[1] -> classifycip; Studienarbeit Falk Ahlendorf A Software und Konfigurationsdateien 61 classifycip[0] //cip -> Strip(14) -> CheckIPHeader -> [0]cipforwarder -> CheckIPHeader -> MarkIPHeader -> classifycipout; classifycip[1] //ip -> filterlocalhost; icmperr::ICMPError(mydev1, 3, 1) -> system; cipforwarder[1] -> icmperr; classifycipout[0] -> FixCIPSrc(mydev0) -> outputarpcl; classifycipout[1] -> FixCIPSrc(mydev1) -> Paint(3) -> lookup; classifycipout[2] -> FixCIPSrc(mydev2) -> Paint(3) -> lookup; classifycipout[3] -> Paint(3) -> lookup; system[0] -> outputarpcl system[1] -> Paint(3) -> lookup; filterlocalhost[0] //ip for system -> Strip(14) -> system; filterlocalhost[1] //advert -> classifymcast; filterlocalhost[2] //ip for others Studienarbeit Falk Ahlendorf A Software und Konfigurationsdateien 62 -> Strip(14) -> outputarpcl; filterlocalhost[3] //ip for others -> Paint(3) -> lookup; lookup[0] //known -> StripToNetworkHeader -> outputarpcl; lookup[1] //unknown -> [0]routediscovery; lookup[2] //rerr -> rerr; routediscovery[0] //found -> SetIPChecksum -> StripToNetworkHeader -> outputarpcl; routediscovery[1] //not found -> discoverycipclass; discoverycipclass[0] //cip -> [1]cipforwarder discoverycipclass[1] //ip -> icmperr; classifyaodv[0] //CRREQ from non-AODV network (mydev0) -> GenerateCRREP(cservers, clients, neighbours, setrrepheaders, FCRREQPAINT 16) -> setrrepheaders; classifyaodv[1] //RREQ -> AODVUpdateNeighbours(neighbours) -> knownclassifier; classifyaodv[2] //RERR -> [1]rerr; classifyaodv[3] //HELLO -> AODVUpdateNeighbours(neighbours) -> Discard; classifyaodv[4] //RREP -> AODVUpdateNeighbours(neighbours) Studienarbeit Falk Ahlendorf A Software und Konfigurationsdateien 63 -> destinationclassifier; classifyaodv[5] //MACT -> mact; classifyaodv[6] //GRPH -> grouphello; classifyaodv[7] //other -> Discard; knownclassifier[0] //reply -> rreqclass; knownclassifier[1] //forward -> rreqfwclass; rreqclass[0] //CRREQ //-> Print(routrequest,PRINTANNO true) -> GenerateCRREP(cservers,clients,neighbours,setrrepheaders) -> setrrepheaders; rreqclass[1] //CRREP -> routereply; destinationclassifier[0] -> [1]routediscovery; destinationclassifier[1] -> SetIPChecksum -> SetUDPChecksum -> StripToNetworkHeader -> outputarpcl; destinationclassifier[2] -> Paint(2) -> [0]routediscovery; destinationclassifier[3] -> mcastControler; rreqfwclass[0] //dst in net mydev0 -> reply -> GenerateGWRREP(neighbours,setrrepheaders) -> setrrepheaders; rreqfwclass[1] //dst unknown -> forward -> StripToNetworkHeader -> outputarpcl; routereply -> setrrepheaders -> SetUDPChecksum Studienarbeit Falk Ahlendorf A Software und Konfigurationsdateien 64 -> SetIPChecksum -> outputarpcl; outputcl[0] -> outputeth0; outputcl[1] -> outputeth1; outputcl[2] -> outputeth3; outputarpcl[0] -> arpqueriereth0 -> outputeth0; outputarpcl[1] -> arpqueriereth1 -> outputeth1; outputarpcl[2] -> arpqueriereth3 -> outputeth3; //pings versenden //ICMPPingSource(mydev2, 10.0.0.30) // -> Paint(3) // -> IPPrint(ping) // -> lookup; A.2 Clickscript der Zwischenknoten AddressInfo(mydev0 10.0.0.20/24 00:09:5B:BB:36:08); interfaces::AODVInterfaces( eth0 10.0.0.20/24 00:09:5B:BB:36:08 ); // *** rotuingtables *** mcasttable :: MulticastRoutingTable(); neighbours :: AODVNeighbours(interfaces,mcasttable); // *** element classes *** elementclass OutputClass{ input[0] -> ipsrc :: IPClassifier(src mydev0, -); ipsrc[0] -> [0]output; ipsrc[1] -> ipdst :: IPClassifier(dst net mydev0, -); ipdst[0] -> [0]output; ipdst[1] -> [0]output; } Studienarbeit Falk Ahlendorf A Software und Konfigurationsdateien 65 elementclass OutputEth0{ input[0] ->Queue(2000) ->ToDevice(wlan0); } elementclass InputEth0{ $myaddr_ethernet | FromDevice(wlan0) -> HostEtherFilter($myaddr_ethernet, DROP_OWN false, DROP_OTHER true) -> Paint(0) -> output; } elementclass ClassifyARP{ $myaddr | input[0] -> arpclass :: Classifier(12/0806 20/0001, 12/0806 20/0002,-); arpclass[0] -> ARPResponder($myaddr, $myaddr) -> [0]output; arpclass[1] -> [1]output; arpclass[2] -> CheckIPHeader(OFFSET 14) -> MarkIPHeader(14) -> [2]output; } elementclass System{ FromHost(fake0, mydev0) -> fromhost_cl ::Classifier(12/0806,-); fromhost_cl[0] -> ARPResponder(0.0.0.0/0 1:1:1:1:1:1) -> ToHost(fake0); fromhost_cl[1] -> Strip(14) -> CheckIPHeader -> MarkIPHeader -> [0]output; input[0] -> EtherEncap(0x800, 1:1:1:1:1:1, mydev0) -> CheckIPHeader(14) -> MarkIPHeader(14) -> ToHost(fake0); } elementclass FilterLocalhost{ Studienarbeit Falk Ahlendorf A Software und Konfigurationsdateien 66 input -> localhost::IPClassifier(dst host mydev0, dest host 255.255.255.255, -); localhost[0] -> ping:: ICMPPingResponder; localhost[1] -> [2]output; localhost[2] -> [1]output; ping[0] -> Strip(14) -> CheckICMPHeader -> CheckIPHeader -> MarkIPHeader -> [1]output; ping[1] -> [0]output; } elementclass RouteDiscovery{ $genrreq | input[0] -> [0]discovery :: AODVWaitingForDiscovery($genrreq, neighbours); input[1] -> [1]discovery; //RREP discovery[0] -> [0]output; discovery[1] -> [1]output; AODVLinkNeighboursDiscovery(neighbours,discovery); } //*** element declarations *** outputcl :: OutputClass; outputarpcl :: OutputClass; outputeth0 :: OutputEth0; classifyarpeth0 :: ClassifyARP(mydev0); arpqueriereth0 :: ARPQuerier(mydev0); classifyip :: IPClassifier(dst udp port 654, -); classifyaodv :: Classifier(42/01, 42/03, 42/02 22/01, 42/02, 42/05, 42/06, -); system :: System; filterlocalhost :: FilterLocalhost; lookup :: AODVLookUpRoute(neighbours); destinationclassifier :: AODVDestinationClassifier(neighbours,mcasttable); setrrepheaders :: AODVSetRREPHeaders() routereply :: AODVGenerateRREP(neighbours,setrrepheaders,mcasttable); Studienarbeit Falk Ahlendorf A Software und Konfigurationsdateien 67 outputcl[0] -> outputeth0; outputarpcl[0] -> arpqueriereth0 -> outputeth0; rerr ::AODVGenerateRERR(neighbours,mcasttable) -> outputcl; knownclassifier :: AODVKnownClassifier(neighbours, mcasttable); hello :: AODVHelloGenerator(neighbours) ->outputcl; mact :: mcast_MulticastActivationMessage(mcasttable,neighbours) ->StripToNetworkHeader ->outputarpcl; genrreq :: AODVGenerateRREQ(neighbours, knownclassifier, mcasttable) ->hello; routediscovery :: RouteDiscovery(genrreq); mcastControler :: mcast_Controler(mcasttable,neighbours,genrreq,mact); grouphello :: mcast_GroupHello(mcasttable, neighbours, mcastControler) ->outputcl; forward :: mcast_forward(mcasttable,neighbours); mtest :: mcast_datatest(mcasttable); //**** element connections **** InputEth0(mydev0) ->classifyarpeth0; classifyarpeth0[0] -> outputeth0; classifyarpeth0[1] -> [1]arpqueriereth0; classifyarpeth0[2] -> AODVTrackNeighbours(rerr, neighbours,mcasttable) -> [0]forward; forward[0] -> classifyip; forward[1] -> outputcl; mtest -> [1]forward; classifyip[0] -> classifyaodv; classifyip[1] -> filterlocalhost; icmperr:: ICMPError(mydev0,3,1) -> system; system -> Paint(3) -> lookup; filterlocalhost[0] -> Strip(14) Studienarbeit Falk Ahlendorf A Software und Konfigurationsdateien 68 -> system; filterlocalhost[1] ->Paint(3) ->lookup; filterlocalhost[2] -> Strip(14) -> CheckIPHeader -> DecIPTTL -> EtherEncap(0x800,mydev0, ff:ff:ff:ff:ff:ff) -> outputcl; lookup[0] -> StripToNetworkHeader -> outputarpcl; lookup[1] -> [0]routediscovery; lookup[2] -> rerr; routediscovery[0] ->SetIPChecksum ->StripToNetworkHeader ->outputcl; routediscovery[1]->icmperr; classifyaodv[0] ->AODVUpdateNeighbours(neighbours) ->knownclassifier; classifyaodv[1] -> [1]rerr; classifyaodv[2] ->AODVUpdateNeighbours(neighbours) ->Discard; classifyaodv[3] ->AODVUpdateNeighbours(neighbours) ->destinationclassifier; classifyaodv[4] //MACT // ->AODVUpdateNeighbours(neighbours) // ->Print(mact,64) ->mact; classifyaodv[5] //GRPH // ->AODVUpdateNeighbours(neighbours) // ->Print(grph,64) ->grouphello; classifyaodv[6] ->Discard; Studienarbeit Falk Ahlendorf A Software und Konfigurationsdateien 69 destinationclassifier[0] ->[1]routediscovery; destinationclassifier[1] ->SetIPChecksum ->SetUDPChecksum ->StripToNetworkHeader ->outputarpcl; destinationclassifier[2] ->Paint(2) ->[0]routediscovery; destinationclassifier[3] -> mcastControler; knownclassifier[0] -> routereply; knownclassifier[1] -> StripToNetworkHeader ->outputarpcl; routereply ->setrrepheaders ->SetUDPChecksum ->SetIPChecksum ->outputarpcl; Studienarbeit Falk Ahlendorf Literaturverzeichnis 70 Literaturverzeichnis [Bake95] F. Baker. RFC1812: Requirements for IP Version 4 Routers. Internet RFCs, 1995. [Debe07] Maik Debes. Kontextsensitives Routing - Architekturkonzept -. Interner Forschungsbericht, June 2007. [DKBD+ 03] D. Dharmaraju, M. Karir, J.S. Baras, S. Das und T. Technologies. An Implementation Study of Multicast Extensions of AODV. SIMULATION SERIES 35(4), 2003, S. 122–130. [Info06] Information Sciences Institute of the University of Southern California, http://www.isi.edu/nsnam/dist/. The Network Simulator - ns-2, September 2006. NS2 Hompage. [MIT07] MIT, http://read.cs.ucla.edu/click/. The Click Modular Router Project, September 2007. Click Hompage. [MoCP08] L. Mottola, G. Cugola und G.P. Picco. A Self-Repairing Tree Topology Enabling Content-Based Routing in Mobile Ad Hoc Networks. IEEE Transactions on Mobile Computing 7(8), 2008, S. 946–960. [NiSu05] P. Ning und K. Sun. How to misuse AODV: A case study of insider attacks against mobile ad-hoc routing protocols. Ad Hoc Networks 3(6), 2005, S. 795–819. [PeBRD01] C.E. Perkins, EM Belding-Royer und SR Das. IP flooding in ad hoc mobile networks. draft-ietf-manet-bcast-02. txt, November Band 14, 2001. [PeBRD03] C. Perkins, E. Belding-Royer und S. Das. RFC3561: Ad hoc On-Demand Distance Vector (AODV) Routing. Internet RFCs, 2003. [Renh08] Karsten Renhak. Entwicklung einer Clientsoftware zur Unterstützung des kontextsensitiven Routings. Diplomarbeit, TU-Ilmenau, 2008. Studienarbeit Falk Ahlendorf Literaturverzeichnis 71 [RoPe99] E.M. Royer und C.E. Perkins. Multicast operation of the ad-hoc ondemand distance vector routing protocol. In Proceedings of the 5th annual ACM/IEEE international conference on Mobile computing and networking. ACM New York, NY, USA, 1999, S. 207–218. [RoPe00] E.M. Royer und C.E. Perkins. Multicast Ad hoc On-Demand Distance Vector (MAODV) Routing. IETF MANET Working Group Internet Draft, 2000. [Wenz08] Marco Wenzel. Konzeption und Umsetzung eines Demonstrators zur Verifikation kontextsensitiver Routingprotokolle. Diplomarbeit, TU-Ilmenau, 2008. [Wiki08a] Wikipedia, http://de.wikipedia.org/wiki/Ad-hoc-Netz. Netzwerke, November 2008. [Wiki08b] Wikipedia, http://en.wikipedia.org/wiki/Anycast. Anycast, November 2008. [Wiki08c] Wikipedia, http://de.wikipedia.org/wiki/Broadcast. November 2008. [Wiki08d] Wikipedia, http://en.wikipedia.org/wiki/Mobile_ad-hoc_network. Mobile Ad-hoc-Netzwerke, November 2008. [Wiki08e] Wikipedia, http://en.wikipedia.org/wiki/Multicast. Multicast, November 2008. [Wiki08f] Wikipedia, http://de.wikipedia.org/wiki/Routing. Routing, November 2008. [Wiki08g] Wikipedia, http://en.wikipedia.org/wiki/Unicast. Unicast, October 2008. Ad-hoc- Broadcast, Studienarbeit Falk Ahlendorf Abbildungsverzeichnis 72 Abbildungsverzeichnis 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 RREQ-Nachricht . . . . . . . . . . . . . . . . . . . . . . . . . . Rebuild-Erweiterung . . . . . . . . . . . . . . . . . . . . . . . . Group Leader“-Erweiterung . . . . . . . . . . . . . . . . . . . . ” RREP-Nachricht . . . . . . . . . . . . . . . . . . . . . . . . . . Informations-Erweiterung . . . . . . . . . . . . . . . . . . . . . MACT-Nachricht . . . . . . . . . . . . . . . . . . . . . . . . . . GRPH-Nachricht . . . . . . . . . . . . . . . . . . . . . . . . . . Aktivitätsdiagramm für das Beitreten zu einer Multicastgruppe Aktivitätsdiagramm für das Verlassen einer Multicastgruppe . . Aktivitätsdiagramm für das Reparieren eines Links . . . . . . . Aktivitätsdiagramm für das weiterleiten von Datenpaketen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 11 12 13 13 14 16 18 19 21 24 3.1 Klassendiagramm für die Multicastroutingtabelle . . . . . . . . . . . . 29 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 4.14 4.15 Aufbau des gesammten Demonstrators . . . . . . . . . . . . . . . Empfangsbereiche der drei verwendeten Rechner . . . . . . . . . . Knoten 1 sendet die gewünschte Reboot-MACT . . . . . . . . . . Knoten 1 sendet die RREQ-Nachrichten . . . . . . . . . . . . . . Knoten 1 wird Group Leader“ und sendet die GRPH-Nachrichten ” Knoten 3 sendet RREQ-Nachrichten . . . . . . . . . . . . . . . . Knoten 3 aktiviert die Multicastroute . . . . . . . . . . . . . . . . Knoten 3 repariert die Multicastroute . . . . . . . . . . . . . . . . IO Graph für die Multicastdatenpakete des Knoten 3 . . . . . . . CRREQ und CREEP am Knoten 3 . . . . . . . . . . . . . . . . . Testaufbau für den Nachweis der Multicastkommunikation . . . . IO-Graph für Datenpakete am Knoten 1 . . . . . . . . . . . . . . IO-Graph für Datenpakete am Knoten 2 . . . . . . . . . . . . . . IO-Graph für Datenpakete am Knoten 3 . . . . . . . . . . . . . . IO-Graph für Datenpakete am Knoten 4 . . . . . . . . . . . . . . 37 38 39 40 40 41 42 42 43 43 44 45 45 46 46 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Studienarbeit Falk Ahlendorf Abbildungsverzeichnis 73 4.16 IO-Graph für Datenpakete am Knoten 6 . . . . . . . . . . . . . . . . . 4.17 IO-Graph für ICMP-Advertisements am Knoten 3 . . . . . . . . . . . . 4.18 Kontextrouter antwortet auf ICMP-Solicitation-Nachrichten . . . . . . 46 48 48 Studienarbeit Falk Ahlendorf Tabellenverzeichnis 74 Tabellenverzeichnis Studienarbeit Falk Ahlendorf Abkürzungsverzeichnis und Formelzeichen 75 Abkürzungsverzeichnis und Formelzeichen ACK . . . . . . . . . . . . . . . AODV . . . . . . . . . . . . . ARP . . . . . . . . . . . . . . . CRREP . . . . . . . . . . . . CRREQ . . . . . . . . . . . . DekoR . . . . . . . . . . . . . GRPH . . . . . . . . . . . . . ICMP . . . . . . . . . . . . . . ID . . . . . . . . . . . . . . . . . IETF . . . . . . . . . . . . . . . IO . . . . . . . . . . . . . . . . . IP . . . . . . . . . . . . . . . . . . MAC . . . . . . . . . . . . . . . MACT . . . . . . . . . . . . . MAODV . . . . . . . . . . . MIT . . . . . . . . . . . . . . . NS2 . . . . . . . . . . . . . . . . PDA . . . . . . . . . . . . . . . RFC . . . . . . . . . . . . . . . RREP . . . . . . . . . . . . . . RREP-ACK . . . . . . . . RREQ . . . . . . . . . . . . . RRER . . . . . . . . . . . . . TTL . . . . . . . . . . . . . . . UDP . . . . . . . . . . . . . . . WLAN . . . . . . . . . . . . . Acknowledgement Adoc On-Demand Distance Vector Adress Resolution Protocol Context Sensitive Route Reply Context Sensitive Route Reqest Demonstrator für kontextsensitives Routing Group Hello Internet Control Message Protocol Identification Internet Engineering Task Force Input Output Internet Protocol Media Access Control Multicast Activation Multicast Adoc On-Demand Distance Vector Massachusetts Institute of Technology The Network Simulator 2 Personal Digital Assistant Request For Comments Route Reply Route Reply Acknowledgement Route Reqest Route Error Time To Live User Datagram Protocol Wireless Local Area Network Studienarbeit Falk Ahlendorf Erklärung 76 Erklärung Die vorliegende Arbeit habe ich selbstständig ohne Benutzung anderer als der angegebenen Quellen angefertigt. Alle Stellen, die wörtlich oder sinngemäß aus veröffentlichten Quellen entnommen wurden, sind als solche kenntlich gemacht. Die Arbeit ist in gleicher oder ähnlicher Form oder auszugsweise im Rahmen einer oder anderer Prüfungen noch nicht vorgelegt worden. Ilmenau, den 09. 12. 2008 Falk Ahlendorf Studienarbeit Falk Ahlendorf