Thesis - Institut für Informatik

Werbung
Computer and Communication Systems
Lehrstuhl für Technische Informatik
Leo Höckner
Experimentelle Umsetzung von Routing in
Sensornetzen basierend auf virtuellen
Koordinaten
Bachelorarbeit im Fach Informatik
29. Oktober 2012
Please cite as:
Leo Höckner, “Experimentelle Umsetzung von Routing in Sensornetzen basierend auf virtuellen Koordinaten,” Bachelor
Thesis (Bachelorarbeit), University of Innsbruck, Institute of Computer Science, October 2012.
University of Innsbruck
Institute of Computer Science
Computer and Communication Systems
Technikerstr. 21a · 6020 Innsbruck · Austria
http://ccs.uibk.ac.at/
Experimentelle Umsetzung von Routing in
Sensornetzen basierend auf virtuellen
Koordinaten
Bachelorarbeit im Fach Informatik
vorgelegt von
Leo Höckner
geb. am 3. Jänner 1990
in Braunau am Inn
angefertigt am
Lehrstuhl für Technische Informatik
Computer and Communication Systems
Institut für Informatik
Leopold-Franzens-Universität Innsbruck
Betreuer:
Abgabe der Arbeit:
Christoph Sommer
Falko Dressler
29. Oktober 2012
Erklärung
Ich versichere, dass ich die Arbeit ohne fremde Hilfe und ohne Benutzung anderer
als der angegebenen Quellen angefertigt habe und dass die Arbeit in gleicher oder
ähnlicher Form noch keiner anderen Prüfungsbehörde vorgelegen hat und von dieser
als Teil einer Prüfungsleistung angenommen wurde.
Alle Ausführungen, die wörtlich oder sinngemäß übernommen wurden, sind als
solche gekennzeichnet.
Declaration
I declare that the work is entirely my own and was produced with no assistance
from third parties.
I certify that the work has not been submitted in the same or any similar form for
assessment to any other examining body and all references, direct and indirect, are
indicated as such and have been cited accordingly.
(Leo Höckner)
Innsbruck, 29. Oktober 2012
Abstract
In this Bachelorthesis Virtual Cord Protocol, a new routing protocol for sensor networks based on virtual coordinates, developed at the University of Erlangen, will
be investigated. There was already a test of this protocol with the simulation tool
OMNeT++, but in this thesis the aim is to test the protocol on real devices in a real
environment.
Therefore the protocol has to be implemented for TelosB Sensor Nodes, which are
working with the operating system Contiki. The main parts of the implementation
were building up the network, local routing and Inter-Domain routing, which means
communication between two different domains. Afterwards there were some tests
about the performance.
In order to keep the development simple, it was first implemented and tested with
the Contiki simulator environment Cooja, the final tests were made in Cooja as well
as on the real nodes.
iii
Kurzfassung
In dieser Bachelorarbeit wird das Virtual Cord Protocol, ein Netzwerkprotokoll für
Sensornetze basierend auf virtuellen Koordinaten, welches an der Universität Erlangen entwickelt worden ist, untersucht. Nachdem das Protokoll bereits in früheren
Tests mit der Simulationssoftware OMNeT++ seine Stärken bewies, sollte nun auch
ein Test in einer realen Umgebung, auf echten Knoten, erfolgen.
Hierfür wurde das Protokoll für TelosB Sensorknoten, welche mit dem Betriebssystem Contiki betrieben werden, implementiert. Die wichtigsten Schritte dabei waren
der Aufbau des Netzwerkes, lokales Routing und Inter-Domain-Routing, die Kommunikation zwischen verschiedenen Netzwerken. Anschließend wurde das Protokoll
einigen Leistungstests unterzogen.
Für die Entwicklung und die ersten Tests wurde der Contiki Simulator Cooja verwendet, die abschließenden Tests wurden sowohl im Simulator als auch auf den
realen Knoten durchgeführt.
iv
Inhaltsverzeichnis
Abstract
iii
Kurzfassung
iv
1 Routing in Sensornetzen
1
1.1 Sensornetze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.2 Virtual Cord Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.2.1 Aufbau des Netzwerk . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.2.2 Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
1.2.3 Inter-Domain Routing . . . . . . . . . . . . . . . . . . . . . . . . .
4
2 Verwendete Plattform
5
2.1 TelosB Knoten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.2 Contiki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.3 Cooja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
3 Funktionsweise der Implementierung
3.1 Kordelaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
9
3.1.1 Zwei aufeinanderfolgende Konten in Nachbarschaft . . . . . . 12
3.1.2 Start- oder Endknoten bekannt . . . . . . . . . . . . . . . . . . . 14
3.1.3 Virtuelle Knoten . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2 Lokales Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.3 Globales Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.3.1 Verbreiten von Gateway Informationen . . . . . . . . . . . . . . 19
3.3.2 Versenden von globalen Nachrichten . . . . . . . . . . . . . . . . 20
4 Verifikation und Leistungsbewertung
22
4.1 Kordelaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.1.1 Kordelaufbau entlang einer Line . . . . . . . . . . . . . . . . . . 23
4.1.2 Kordelaufbau im Grid . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.2 Kommunikation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
v
Inhaltsverzeichnis
vi
4.2.1 Kommunikation entlang einer Line . . . . . . . . . . . . . . . . . 26
4.2.2 Kommunikation im Grid . . . . . . . . . . . . . . . . . . . . . . . 26
4.2.3 Parallele Nachrichten . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.2.4 Inter-Domain Nachrichten . . . . . . . . . . . . . . . . . . . . . . 29
5 Zusammenfassung
31
Literaturverzeichnis
36
Kapitel 1
Routing in Sensornetzen
Seit einigen Jahren boomt drahtlose Kommunikation. In nahezu jeder Wohnung ist
mittlerweile ein WLAN zu finden und kaum jemand kann es sich vorstellen ohne
Mobiltelefon und Kommunikation per GSM/UMTS unterwegs zu sein. In diesen
drahtlosen Netzwerken gibt es jeweils eine Base-Station, über die jedes der Geräte
mit dem Netzwerk verbunden ist. Interessanter wird es dann, wenn ein Netzwerk
ohne diese Infrastruktur auskommen und sich selbst organisieren muss, wie es bei
Sensornetzen der Fall ist.
1.1
Sensornetze
Durch aktuelle technische Entwicklungen werden immer kleinere Geräte hergestellt,
welchen durch eine Funkeinheit die Möglichkeit zur Kommunikation mit der nahen
Umgebung gegeben wird. Ein typisches Sensornetzwerk besteht aus einigen Knoten,
die als Quellen arbeiten und mit Hilfe von Sensoren Umgebungsdaten aufnehmen,
welche zu Datensenken gesendet werden.
Das Senden von Nachrichten innerhalb eines Sensornetzes ist jedoch ein herausforderndes Problem. Einem direkten Nachbarn eine Nachricht zu senden, ein
sogenannter Singlehop, siehe Abbildung 1.1, ist noch die einfachere Aufgabe: Nachdem ein geeignetes MAC1 Protokoll gefunden wurde, welches nicht nur die üblichen
Voraussetzungen zum Durchsatz oder Fehlerrate erfüllt, sondern im Besonderen
Energieeffizient sein muss, wie zum Beispiel MACAW [1], IEEE 802.15.4 [2] oder
das darauf basierende ZigBee [3], braucht das Paket nur mehr auf den Kanal gelegt
werden und der Zielknoten kann es empfangen.
Schwieriger wird es, wenn der Zielknoten nicht in der direkten Umgebung liegt. In
1
MAC - Media access control
1
1.1 Sensornetze
2
(a) Singlehop
(b) Multihop
Abbildung 1.1 – Vergleich von Single- und Multihop
diesem Fall kann das Paket nur per Multihop zu ihm gelangen, was bedeutet, dass
die Daten zuerst an einen Zwischenknoten gesendet werden und dieser die Daten
wiederum weitersendet, bis sie am Ziel sind. Damit das Paket weder verloren geht
noch ewig in einem Zykel weitergeleitet wird, wird ein Routingprotokoll benötigt.
Bei diesen Verfahren ist es für Sensornetze nicht nur entscheidend, dass die Daten
sicher und möglichst schnell am Ziel ankommen, es gibt auch eine Menge anderer
Aspekte zu beachten [4]:
• Sensorknoten werden meist per Batterie betrieben, Energie ist wertvoll
• Speicher und Rechenleistung sind begrenzt
• In vielen Fällen bewegen sich die Knoten, die Topologie des Netzwerks ändert
sich ständig
• Die Anzahl der Knoten in einem Netzwerk kann riesig werden, das Verfahren
muss skalieren
Grundsätzlich lassen sich Routingprotokolle in Proactive und Reactive einteilen.
Beim Proaktiven Routing ist die Route von der Quelle zum Ziel ständig bekannt.
Das bedeutet, dass jeder Knoten eine Routingtabelle besitzt, in der die möglichen
Senken aufgelistet sind, deswegen wird dieses Verfahren auch Table-Driven genannt.
Der Vorteil ist, dass ein Paket sofort ohne das Ermitteln der Route und dem daraus
resultierenden Zeitaufwand gesendet werden kann. Dies geschieht jedoch zu dem
Preis, dass bei jeder Topologieänderung die Routingtabellen upgedatet werden müssen und somit ein riesiger Overhead entsteht. Eines der bekanntesten proaktiven
Routingverfahren ist Destination-Sequence Distance Vektor [5].
Im Gegensatz dazu stehen reaktive Verfahren. Bei diesen wird die Route nur dann
ermittelt, wenn sie benötigt wird. Die Vor- und Nachteile sind umgekehrt wie beim
Proactiven: Kaum Overhead, da nur im Bedarfsfall die Route berechnet wird, dafür
kann das Paket deswegen nicht sofort gesendet werden. Ein bekannter Vertreter von
1.1 Sensornetze
3
reaktivem Routing ist Dynamic Source Routing [6].
Die hier genannten Verfahren sind leider nicht ideal, da bei größeren Netzwerken
entweder die ganze Topologie bekannt sein muss oder die Kommunikation sehr viel
Zeit in Anspruch nimmt und somit die Protokolle nicht skalieren.
Daneben gibt es noch viele weitere Verfahren, angefangen bei Hybriden zwischen
den beiden gerade beschriebenen Techniken, über hierarchischen Verfahren bis hin
zu Verfahren, welche die aktuellen GPS Daten ermitteln und damit eine optimale
Route zum Ziel berechnen [7]. Diese Verfahren skalieren gut, jedoch ist die Abfrage
der aktuellen Position, wenn überhaupt möglich, sehr teuer und dadurch für viele
Anwendungen nicht geeignet [8].
1.2
Virtual Cord Protocol
Ein anderer Ansatz zum Routing besteht darin, virtuelle Koordinaten zu verwenden. Hierfür wird jedem Knoten eine virtuelle Adresse zugewiesen und somit ein
Overlay-Netzwerk erzeugt [9]. Im konkreten Fall von VCP entspricht diese virtuelle
Adresse einer Position. Dadurch lässt sich das gesamte Netzwerk als eine Kordel mit
Anfangsknoten und Endknoten vorstellen. Durch die Position ist es möglich, Pakete
im virtuellen Overlay-Netzwerk entlang der Kordel zum Ziel zu routen. Dies hilft,
Routingtabellen sehr klein zu halten, hat jedoch den Nachteil, dass beim Erstellen
des Overlay-Netzwerks die physikalische Struktur nicht betrachtet wird und somit
das Routing entlang der virtuellen Positionen eventuell längere Distanzen zu bewältigen hat.
1.2.1
Aufbau des Netzwerk
Zu Beginn ist nur ein Startknoten im Netzwerk. Dieser muss im Voraus bereits als
Startknoten initialisiert werden. Jeder Knoten innerhalb der Kordel sendet periodische Hello-Messages via Broadcast aus, mit Hilfe derer andere Knoten Informationen
über das Netzwerk erhalten.
Sobald ein neuer Knoten genug Informationen über das Netzwerk erhalten hat, versucht er sich in die Kordel einzugliedern. Hierfür gibt es verschiedene Algorithmen,
welche im Paper [10] aufgelistet sind.
1.2 Virtual Cord Protocol
1.2.2
4
Routing
Da jeder Knoten in der Kordel seinen virtuellen Vorgänger und Nachfolger kennt, ist
es einfach, ein Paket entlang der Kordel zu seinem Ziel zu transportieren. Dies ist
nicht immer die effektivste Methode, da es sein kann, dass der Zielknoten in direkter
physikalischer Nachbarschaft liegt, die virtuelle Position aber am anderen Ende der
Kordel. Hierfür gibt es im Virtual Cord Protocol das Konzept des Greedy Forwarding,
durch welches das Paket an den physikalischen Nachbarn mit der nächsten Position
zum Zielknotens weitergeleitet wird.
1.2.3
Inter-Domain Routing
Da es mehrere verschiedene Kordeln geben kann, muss auch eine Kommunikation
zwischen den Kordeln ermöglicht werden. Dies wird mit Gateways realisiert [11].
Jeder Knoten, in dessen physikalischer Nachbarschaft sich Knoten einer anderen
Kordel befinden, fungiert als Gateway und sendet diese Information in der gesamten
Kordel aus. Alle anderen Knoten empfangen diese Informationen und speichern sie
ab. Möchte nun ein Knoten ein Paket in eine andere Kordel schicken, so durchsucht
er die empfangenen Informationen nach einem passenden Gateway, an den er das
Paket sendet. Der Gateway leitet das Paket an sein Gegenüber der anderen Kordel
weiter, dieser wiederum sorgt dafür, dass es beim Empfänger landet. Abbildung 1.2
veranschaulicht das Konzept.
99
1
12
50
75
40
1
25
90
99
92
Abbildung 1.2 – Idee des Inter-Domain Routings, Knoten 12 bzw 50 fungieren
als Gateway mit Knoten 40
Kapitel 2
Verwendete Plattform
Im folgenden Abschnitt wird die Plattform vorgestellt, für welche das Virtual Cord
Protocol implementiert wurde. Außerdem wird kurz auf den Simulator, mit dem ein
Großteil der Entwicklung durchgeführt wurde, eingegangen.
2.1
TelosB Knoten
Als Programmierplattform wurde in diesem Projekt TelosB (Abbildung 2.1), ein IEEE
802.15.4 kompatibler Sensorknoten, gewählt. Entwickelt wurde diese Plattform an
der University of California, Berkeley, sie wird sowohl von MEMSIC 2 als auch von
Sentilla 3 , jedoch unter dem Namen TMote Sky, vertrieben. Die Plattform wurde
für die Entwicklung von Niedrig-Energie Anwendungen sowie für Experimente mit
Sensornetzen entwickelt und ist dadurch kein Massenprodukt und somit auch relativ
teuer.
Das Herzstück der Plattform bildet ein MSP430 16bit-Mikrocontroller mit 10kB
2
3
http://www.memsic.com
http://www.sentilla.com
Abbildung 2.1 – TelosB Knoten
5
2.1 TelosB Knoten
6
RAM, welcher von Texas Instruments für Anwendungen mit niedrigstem Stromverbrauch entwickelt wurde [12]. Der Mikrocontroller ist direkt mit einem CC2420
Radio Transceiver verbunden, welcher eine Datenübertragung mit bis zu 250 kbps
ermöglicht [13].
Darüber hinaus sind auf dem Knoten zwei Sensoren verbaut, einerseits ein Sensirion SHT11 [14], Temperatur- und Luftfeuchtigkeitssensor, sowie ein Hamamatsu
S1087 [15], ein Licht- und Infrarotsensor.
Zur Programmierung und auch als Energiequelle ist eine USB-Schnittstelle verbaut.
Eine weitere Möglichkeit zur Energieversorgung ist der aufgebaute Batterieblock,
womit der Knoten mit zwei AA-Batterien betrieben werden kann.
Als Debug-Werkzeug stehen eigentlich nur ein Taster und drei Dioden in unterschiedlichen Farben zur Verfügung. Jedoch ist es möglich, eine JTAG4 Schnittstelle
anzubauen, mit Hilfe derer ein angenehmes Debuggen ermöglicht wird.
2.2
Contiki
Die im letzten Abschnitt beschriebenen TelosB Knoten werden im Projekt mit dem
Betriebssystem Contiki [16] betrieben. Contiki ist ein freies Betriebssystem für 8-Bit
Mikrocontroller, welches vom Team um Adam Dunkels am SICS 5 entwickelt wurde.
Das Ziel bei der Entwicklung von Contiki war es, ein leichtgewichtiges Betriebssystem zu entwickeln, welches mit wenig Energie und mit wenig Speicher auskommt.
Um sowohl dieses Ziel als auch Nebenläufigkeit zu erreichen, wurde der Kernel
eventbasiert mit Hilfe von Protothreads [17] entwickelt. Protothreads ermöglichen
einen sehr leichtgewichtigen Mechanismus zur nebenläufigen Programmierung, da
diese im Gegensatz zu normalen Threads über keinen eigenen Stack verfügen. Dies
bringt jedoch die Einschränkung, dass lokale Variablen bei einem Contextswitch
nicht gesichert werden können. Somit ist beim Programmieren darauf zu achten,
diese statisch oder global anzulegen. Ein wichtiger Aspekt von Protothreads ist
außerdem, dass der Contextswitch nur dann durchgeführt werden kann, wenn der
aktuell laufende Thread dazu bereit ist. Gibt dieser die Kontrolle nie ab, degeneriert
das System zu einem Single-Thread System.
Contiki bietet bereits eine Vielzahl von implementierten Netzwerkprotokollen. Angefangen bei dem für Sensornetzwerke typischen Broadcast, breitgestellt durch
den RIME-Stack, sowie dem darauf aufbauenden Unicast bis hin zu komplexeren
Protokollen für Sensornetzwerke wie Netflood, Tickle oder auch Mesh. Um eine
Anbindung zum Internet zu ermöglichen, gibt es zusätzlich bereits Protokolle wie
4
5
Joint Test Action Group, auch bekannt als IEEE 1149.1
Swedish Institue of Computer Science http://www.sics.se
2.2 Contiki
7
IPv4 und IPv6, implementiert durch den uIP Stack6 .
Zusätzlich wird bei der kabellosen Datenübertragung Energie gespart, indem auf
Idle Listening, das bekannterweise sehr teuer ist, verzichtet wird. Um trotzdem eine
fehlerfreie Kommunikation zu ermöglichen, lauscht jeder Knoten kontinuierlich,
ob Daten anliegen. Möchte ein Knoten Daten senden, muss er diese mindestens
für die Dauer eines Zeitschlitzes senden, sodass garantiert ist, dass während des
Sendevorgangs jeder Knoten die Möglichkeit hat, die Daten zu empfangen.
Um Daten auf Flashspeichern permanent zu speichern, ohne sich über diverse Sektoren im Speicher Gedanken machen zu müssen, bietet Contiki das sogenannte Coffee
Filesystem an, welches Anwendungen erlaubt, Dateien am Flash einfach zu öffnen,
zu schließen, zu lesen und zu schreiben.
2.3
Cooja
Um nicht jeden einzelnen Programmierschritt aufwendig auf den realen Knoten
testen zu müssen, wurde ein Simulator, Cooja, entwickelt. Cooja wurde in Java
entwickelt, wobei die grafische Oberfläche mittels Java Swing realisiert wurde.
Nachdem eine neue Simulation erstellt worden ist, können beliebig viele verschiedene Knoten zur Simulation hinzugefügt werden. Dies geschieht entweder
durch eine bereits compilierte Sky-Datei oder nur durch eine normale C-Datei, welche vom Simulator aus compiliert wird. Sobald ein Knoten auf diese Weise erstellt
worden ist, lassen sich konkrete Instanzen des Knotens hinzufügen.
Durch diverse Einstellmöglichkeiten lässt sich der aktuelle Zustand eines Knotens
darstellen. Hierzu gehören grundlegende Eigenschaften wie der Name bzw. die
Adresse eines Knotens, aber auch andere Zustände wie die aktuelle Nachbarschaft
und die Reichweite des Radios. Natürlich ist es auch möglich den vorhandenen
Button zu klicken und die angebrachten LEDs anzuzeigen.
Zusätzlich verfügt Cooja über einen Log Listener, welcher die Ausgaben aller Knoten
aggregiert anzeigt und einer Timeline, in der verschiedene Zustände, wie die aktuellen LEDs oder die Radioaktivität der Knoten, grafisch dargestellt werden.
In Abbildung 2.2 sind die verschiedenen Panel zu sehen. In der linken oberen Ecke
befindet sich das Control Panel, mit dem sich die Ausführungsgeschwindigkeit einstellen lässt. Hierbei sind Werte von Keine Verzögerung bis zu einem Step in jeder
Sekunde möglich. Im Bild ist Real Time eingestellt, mit dem die reale Verarbeitungszeit simuliert wird.
Rechts davon ist der Simulation Visualizer zu sehen, in dem die Anordnung der
6
micro IP, Open-Source TCP/IP Stack
2.3 Cooja
8
Abbildung 2.2 – Screenshot Cooja
Knoten eingestellt werden kann. Links von den Knoten ist der aktuelle Zustand
zu sehen und der grüne bzw. der graue Kreis verdeutlichen die Reichweite des
Knotens 7. Der grüne Kreis zeigt die Entfernung, in der Kommunikation zwischen
Knoten möglich ist, im grauen Bereich ist keine Kommunikation mehr möglich,
jedoch treten Interferenzen auf.
Der Log Listener in der Mitte des Bildes sammelt die Ausgaben der Knoten, welche
mittels printf() ausgegeben werden. Darunter ist noch die Timeline sichtbar, in der
diverse Zustände über einen längeren Zeitraum grafisch dargestellt werden. Hier ist
auch zu sehen, wie in Contiki Idle Listening umgangen wird. Bei den kurzen grünen
und roten Erscheinungen lauschen die Knoten, bei der langen blauen von Knoten 4
sendet dieser. Das Senden wird so lange durchgeführt, bis garantiert werden kann,
dass jeder Knoten während dieser Zeit mindestens einmal auf den Kanal hört.
Zur Entwicklung der vorliegenden Bachelorarbeit war dieser Simulator sehr nützlich,
da auf einfache Weise ermöglicht wurde, verschiedene Netzwerke aufzubauen und
das aktuelle Programm in diesen Netzwerkstrukturen zu testen.
Kapitel 3
Funktionsweise der Implementierung
Implementiert wird ein Netzwerkprotokoll, welches einer Menge von Knoten ermöglichen soll, sich selbst zu organisieren und untereinander zu kommunizieren.
Weiters soll möglich sein, mehrere Netzwerke aufzubauen und auch zwischen diesen
zu kommunizieren.
Dafür sind im Wesentlichen drei Schritte nötig:
• Selbstorganisierender Netzwerkaufbau
• Lokales Routing
• Inter-Domain Routing, also Routing zwischen verschiedenen Netzwerken
3.1
Kordelaufbau
Zu Beginn gibt es in jeder vorhanden Kordel einen vorprogrammierten Knoten, der
als Startknoten fungiert. Dieser besitzt am Anfang die in der eigenen Headerdatei
definierte Position START_POSITION.
Damit die unterschiedlichen Knoten ihre Netzwerkumgebung erkunden können, sendet jeder Knoten, der sich bereits in einer Kordel befindet, so genannte
Hello-Messages via Broadcast aus. Diese Nachrichten enthalten Informationen über
die eigene Position, die eigene Kordel und die Positionen sowie physikalischen Adressen des Vorgängers und des Nachfolgers.
Da sich diese Informationen ändern können und auch jederzeit neue Knoten
in die Umgebung kommen können, werden Hello-Messages (Tabelle 3.1) kontinuierlich alle TH_SECONDS gesendet. Sobald sich ein Knoten für längere Dauer
9
3.1 Kordelaufbau
10
Byte
1-9
10 - 11
12
13 - 14
15 - 16
17 - 18
19 - 20
Feld
VCP_HELLO
OWN_POS
OWN_DOM
SUCC_RIME
SUCC_POS
PRED_RIME
PRED_POS
Beschreibung
Header
Eigene Position
Eigene Domain
RIME Adresse Nachfolger
Position Nachfolger
RIME Adresse Vorgänger
Position Vorgänger
Tabelle 3.1 – Protokoll für Hello-Messages
TH_INIT_TIME, in der Kordel befindet, wird das Intervall der Hello-Messages vergrößert. Dadurch muss der Knoten nicht mehr so oft Nachrichten versenden, es
verringert sich das Datenaufkommen und es wird Energie eingespart.
Wird eine Hello-Message zum ersten Mal von einem Knoten empfangen (Abbildung 3.1), so speichert der Empfänger die Informationen über diesen Knoten
in einer Liste ab (Listing 3.1). Da es sein kann, dass der sendende Knoten wieder
verschwindet, startet der Empfänger einen Timer, welcher den Knoten aus der Liste
entfernt, wenn innerhalb TIME_DELETE_NEIGHBOR keine neue Nachricht gekommen ist.
Wird die Nachricht bereits zum wiederholten Mal empfangen, werden die empfangen Informationen aktualisiert und der Timer wieder auf die Ausgangszeit zurückgesetzt.
Es existiert ein zweiter Timer, der TPS-Timer, welcher vorgibt, wie lange nach
dem ersten Empfang einer Hello-Message mindestens gewartet werden muss, bis ein
neuer Knoten versuchen darf, sich in die Kordel einzubinden. Dieser Timer wird
beim ersten Empfang einer Hello-Message eines beliebigen Knotens gestartet und
läuft nach TPS_SECONDS ab.
Wird eine weitere Hello-Message empfangen, ist die eigene Position noch nicht definiert und somit auf dem Wert NO_POSITION. Ist der TPS-Timer bereits abgelaufen,
versucht der neue Knoten sich in die Kordel einzubinden (Abbildung 3.2). Außerdem
wird der TPS-Timer erneut gestartet, sodass zwischen zwei Einbindungsversuchen
eines neuen Knotens mindestens TPS_SECONDS vergehen müssen.
Um Inter-Domain-Routing zu ermöglichen, existieren zwei verschiedene Listen
von Nachbarschaftsknoten. In der ersten Liste werden die Knoten der eigenen Kordel gespeichert. Alle anderen Knoten werden in der zweiten Liste gespeichert, auf
3.1 Kordelaufbau
11
Abbildung 3.1 – Ablauf beim Erhalt einer Hello-Message
welche im Abschnitt 3.3.1 genauer eingegangen wird.
Befindet sich ein Knoten noch in keiner Kordel, so werden alle Knoten in der
Nachbarschaft in die interne Liste gespeichert. Sobald der neue Knoten eine Position
in einer Kordel einnimmt, werden die externen Knoten auch in der externen Liste neu
gespeichert. Da der oben beschriebene Timer für beide Listen autonom läuft, fallen
die externen Knoten nach spätestens TIME_DELETE_NEIGHBOR aus der internen
Liste.
1
2
struct n e i g h b o r _ i n f o r m a t i o n {
struct n e i g h b o r _ i n f o rm a t i o n * next ;
as a link - list type */
/* to use this struct &
3
rimeaddr_t * own_rime ;
POSITION_TYPE own_position ;
POSITION_TYPE own_domain ;
4
5
6
7
rimeaddr_t * succ_rime ;
POSITION_TYPE succ_position ;
8
9
10
rimeaddr_t * pred_rime ;
POSITION_TYPE pred_position ;
11
12
13
struct ctimer * d e l e t e _ n e i g h b o r _ t i m e r ;
14
15
};
Listing 3.1 – Struktur; Information über physikalischen Nachbar
3.1 Kordelaufbau
12
Abbildung 3.2 – Ablauf zum Eingliedern in Kordel
3.1.1
Zwei aufeinanderfolgende Konten in Nachbarschaft
Dieser Fall beschreibt die einfachste Form zum Eingliedern in eine bestehende Kordel. Befinden sich in der Intern-List eines neuen Knoten zwei innerhalb einer Kordel
aufeinander folgende Knoten, kann sich der neue Knoten zwischen diesen beiden
platzieren. Zwei Knoten sind aufeinanderfolgend, wenn entweder der Vorgänger
oder der Nachfolger von Knoten1 gleich Knoten2 ist.
Für diesen Fall berechnet sich der neue Knoten als erstes seine eigene neue Position,
welcher sich aus der Hälfte der Position von Knoten1 + Position von Knoten2 ergibt,
und speichert diese Position zwischen. Wichtig hierbei ist eine Kontrollabfrage, ob
die Differenz der beiden bereits vorhanden Positionen mindestens 2 beträgt, da es
ansonsten nicht möglich ist, sich dazwischen zu positionieren und es zu Inkonsistenzen kommen würde.
Zusätzlich werden die physikalischen und virtuellen Adressen des Vorgängers
und Nachfolgers gespeichert.
Anschließend wird an die beiden Knoten ein Request (Tabelle 3.2) zum Einbinden in
die Kordel versendet. In diesem sind die Domain, die eigene (berechnete) Position
und die Positionen des Vorgängers und Nachfolgers zur Kontrolle enthalten.
3.1 Kordelaufbau
13
: New Node
: Node A
: Node B, Successor of A
: between_request()
: between_request()
: between_ack()
: is_not_locked()
: safety_check()
: is_not_locked()
: safety_check()
: between_ack()
: store_position()
: between_ack()
: between_ack()
: change_successor()
: change_predecessor()
Abbildung 3.3 – Erfolgreicher Ablauf beim Eingliedern zwischen zwei Knoten
Byte
1 - 15
16
17 - 18
19 - 20
21 - 22
Feld
VCP_REQ_BETWEEN
OWN_DOM
OWN_POS
PRED_POS
SUCC_POS
Beschreibung
Header
Domain
Position für neuen Knoten
Position Vorgänger
Position Nachfolger
Tabelle 3.2 – Protokoll für Request zum Eingliedern zwischen zwei Knoten
Diese Nachricht wird an den Vorgänger und Nachfolger versendet, anschließend
wird auf die Acknowledgments (Tabelle 3.3) gewartet. Werden die beiden Acknowledgments nicht innerhalb der TPS Zeit, somit bis zum nächsten Request, empfangen,
wird der Request verworfen.
Empfängt ein Knoten einen Request zum Eingliedern zwischen zwei Knoten,
wird zuerst kontrolliert, ob der Knoten gerade gelockt ist.
Um Inkonsistenzen zu vermeiden, wenn zeitgleich oder in kurzem zeitlichen Abstand verschiedene Requests bei einem Knoten eintreffen, wird dieser beim ersten
Request für alle anderen Requests gesperrt. Hierbei wird zwischen eigenem Lock und
fremdem Lock unterschieden. Wie die Namen schon sagen, sperrt sich der Knoten
bei einem Eigenem Lock selbst, da er gerade einen Request für Start/Endübernahme
oder für einen Virtuellen Node, Abschnitt 3.1.3, versendet hat.
Nach einer gewissen Zeit, TIME_WAIT_LOCK, werden die Locks wieder freigegeben.
Ist nun der Knoten beim Empfang des Request noch gelockt, egal ob durch sich
selbst oder durch einen anderen Knoten, wird der Request sofort verworfen.
Ansonsten wird der Knoten Fremd-gelockt und ein Timer gestartet, der diesen Lock
3.1 Kordelaufbau
14
wieder freigibt. Nun beginnt die eigentliche Verarbeitung des Requests. Am Anfang
stehen einige Sicherheitsüberprüfungen, welche darauf ausgelegt sind, dass der
neue Knoten die richtigen Werte empfangen und gespeichert hat.
Fallen dieses Tests positiv aus, so wird ein Acknowledgment wieder zurück an den
neuen Knoten gesendet. Hierbei ist wichtig zu beachten, dass noch keine Werte fix
geändert werden.
Empfängt wiederum der neue Knoten die Acknowledgments von beiden Knoten,
so speichert er seine neue Position und die Domain und sendet dieselbe Nachricht
wieder zurück an die beiden anderen Knoten.
Erst beim Empfangen dieser Nachricht ändern diese Knoten ihre Vorgänger bzw.
Nachfolger so, dass der neue Knoten in der Kordel eingebunden ist (Abbildung 3.3).
3.1.2
Start- oder Endknoten bekannt
Findet ein neuer Knoten in seiner Umgebung keine zwei aufeinander folgende Knoten, aber den Start- oder Endknoten einer Kordel, so kann er sich über einen dieser
beiden in die Kordel einbinden (Abbildung 3.4).
Im Folgenden wird das Verfahren für den Startknoten beschrieben, für den Endknoten läuft es vice versa.
Will sich der neue Knoten über den Startknoten einbinden, so wird dieser zum neuen
Startknoten und der bisherige Startknoten bekommt eine höhere Position. Für die
Berechnung der neuen Position wird unterschieden, ob der Startknoten der bisher
einzige Knoten in der Kordel ist, oder ob sich bereits mehrere Knoten in der Kordel
befinden, was bedeutet, dass der Startknoten einen Nachfolger besitzt.
Ist der Startknoten der einzige, so wird seine neue Position die des Endknotens
werden, ansonsten berechnet sich die neue Position durch die Hälfte von START
addiert mit der Position des Nachfolgers.
Ähnlich wie im ersten Fall berechnet der neue Knoten die neue Position des Startknotens, packt diese in eine Request-Message (Tabelle 3.4) und sendet sie an den
Startknoten.
Byte
1 - 15
16
17 - 18
19 - 20
21 - 22
Feld
VCP_ACK_BETWEEN
OWN_DOM
OWN_POS
PRED_POS
SUCC_POS
Beschreibung
Header
Domain
Position für neuen Knoten
Position Vorgänger
Position Nachfolger
Tabelle 3.3 – Protokoll für Acknowledgment zum Eingliedern zwischen zwei
Knoten, einziger Unterschied zu Request ist geänderter Header
3.1 Kordelaufbau
15
: New Node
: StartNode
: bound_request()
: Successor of Start
: is_not_locked()
: lock_request()
: is_not_locked()
: lock_ack()
: safety_check()
: change_position()
: bound_ack()
: store_position()
Abbildung 3.4 – Erfolgreicher Ablauf beim Übernehmen des Startknotens
Byte
1 - 13
14
15 - 16
17 - 18
19 - 20
21 - 22
Feld
VCP_REQ_BOUND
OWN_DOM
OLD_NEXTBOUND
NEW_NEXTBOUND
OLD_CURBOUND
NEW_CURBOUND
Beschreibung
Header
Domain
Bisherige Pos. neuer Knoten; NO_POSITION
Neue Pos. für neuen Knoten; START_POSITION
Bisherige Pos. Startknoten; START_POSITION
Neue Pos. für Startknoten
Tabelle 3.4 – Protokoll für Request bei Übernahme des Startknotens
Sobald der bisherige Startknoten den Request erhält, prüft er, ob er gelockt ist.
Ist das der Fall, verwirft er den Request, ansonsten sperrt er sich selbst, sodass keine
weiteren Requests behandelt werden.
Der Request wird zwischengespeichert, und der Startknoten versucht, seinen direkten Nachfolger zu sperren. Ist der Knoten der bisher einzige in der Kordel, kann
dieser Schritt übersprungen werden.
Um den Nachfolger zu sperren, wird ein Lock Only Request an ihn versendet. Ist der
Nachfolger nicht gesperrt, sperrt er sich selbst und schickt ein Lock Only Acknowledgment zurück. Wie in den vorherigen Fällen wird der Request im Falle eines gesperrten
Knotens verworfen, sowie der Lock mittels Timer nach TIME_WAIT_LOCK wieder
freigegeben.
Erhält nun der bisherige Startknoten ein Acknowledgment (Tabelle 3.5) seines Nachfolgers, werden die diversen gesendeten Werte aus dem Request des neuen Knotens
extrahiert und mit einem Sicherheitscheck überprüft. Fällt diese Überprüfung positiv aus, ändert der alte Startknoten seine Position, speichert seinen Vorgänger ab
und informiert seinen Nachfolger über seine neue Position. Abschließend wird ein
Acknowledgment an den neuen Knoten geschickt, der ab jetzt den Startknoten der
3.1 Kordelaufbau
16
Kordel darstellt.
Sobald der neue Knoten das Acknowledgment erhält, speichert er seine eigene
Position, Domain und den bisherigen Startknoten als Nachfolger ab.
3.1.3
Virtuelle Knoten
Befinden sich in der Nachbarschaft eines neuen Knotens weder zwei zusammenhängende Knoten noch ein Start- oder Endknoten, ist keines der beiden oben beschriebenen Verfahren möglich. In diesem Fall bittet der neue Knoten einen bereits
vorhandenen, einen Virtuellen Knoten zu erstellen, zwischen welchen sich der neue
einordnen kann. Dies ist die 4. und letzte Möglichkeit, sich in eine bestehenden
Kordel einzubinden. Hierfür muss der neue Knoten in seiner Nachbarschaft nur
mindestens einen Knoten kennen, der sich bereits in einer Kordel befindet.
Da durch Virtuelle Knoten das Netzwerk komplexer wird, ist für diesen Fall ein
weiterer Timer eingebaut. Beim ersten Versuch eines neuen Knoten, einen Virtual
Node Request zu versenden, wird der TVPS Timer gestartet, welcher TVPS_SECONDS
läuft und verhindert, dass vor dem Ablauf ein Request für einen Virtuellen Knoten
verschickt wird.
Ist der Timer abgelaufen und findet der neue Knoten in seiner Nachbarschaft noch
immer nur einzelne Knoten, sendet er an einen dieser Knoten einen Virtual Node
Request (Tabelle 3.6).
Beim Empfangen eines Virtual Node Request wird, wenn der Knoten nicht gesperrt ist, genauso wie im vorhergehenden Fall versucht, den Nachfolger zu sperren.
Da der Virtuelle Knoten eine höhere Position als der reale Knoten erhalten wird, ist
es nicht nötig, den Vorgänger zu sperren. Dieser kann seine Position währenddessen
verändern, das beeinflusst das Erstellen des Virtuellen Knoten nicht.
Empfängt der Knoten das Acknowledgment eines Nachfolgers, berechnet er als erstes
die Position des Virtuellen Knotens, welche sich wieder aus der Hälfte der eigenen
Byte
1 - 13
14
15 - 16
17 - 18
19 - 20
21 - 22
Feld
VCP_ACK_BOUND
OWN_DOM
OLD_NEXTBOUND
NEW_NEXTBOUND
OLD_CURBOUND
NEW_CURBOUND
Beschreibung
Header
Domain
Bisherige Pos. neuer Knoten; NO_POSITION
Neue Pos. für neuen Knoten; START_POSITION
Bisherige Pos. Startknoten; START_POSITION
Neue Pos. für Startknoten
Tabelle 3.5 – Protokoll für Acknowledgment bei Übernahme des Startknotens,
einziger Unterschied zum Request ist der Header
3.1 Kordelaufbau
17
: New Node
: virtual_node_request()
: Node A
: Node B, Successor of A
: is_not_locked()
: lock_request()
: is_not_locked()
: lock_ack()
: create_virtual_node()
: virtual_node_ack()
: store_position()
Abbildung 3.5 – Erfolgreicher Ablauf beim Erstellen eines Virtuellen Knotens
Byte
1 - 11
Feld
VCP_CVN_REQ
Beschreibung
Header
Tabelle 3.6 – Protokoll für Request zum Erstellen eines Virtuellen Knotens
Position plus der Position des Nachfolgers ergibt. Die Position für den neuen Knoten
befindet sich genauso zwischen bereits vorhandenem und Virtuellem Knoten.
Die Informationen über alle eigenen Virtuellen Knoten werden, ähnlich wie bei den
physikalischen Nachbarn, in einer Liste von struct neighbor_information gespeichert.
Der neu erzeugte Virtuelle Knoten erhält als Nachfolger die bisherigen Nachfolgerwerte des realen Nodes und als Vorgänger die Daten des neuen Nodes. Der Timer,
welcher das Löschen der physikalischen Nachbarn ermöglicht, wird für diesen Fall
einfach frei gelassen.
Anschließend wird das Acknowledgement für den neuen Node zusammengebaut,
und an diesen versendet. Zusätzlich wird der bisherige Nachfolger über seinen neuen
Vorgänger, den Virtuellen Knoten, informiert und die eigenen Nachfolgerwerte auf
den neuen Knoten angepasst.
Der neue Knoten erhält das Acknowledgment, speichert wieder alle Werte ab
und befindet sich somit ab jetzt in der Kordel (Abbildung 3.5).
Kein Problem ist es, dass ein Knoten mehrere Virtuelle Knoten besitzt. Wird ein
Byte
1 - 11
12
13 - 14
15 - 16
17 - 18
Feld
VCP_CVN_ACK
OWN_DOM
OWN_POS
PRED_POS
SUCC_POS
Beschreibung
Header
Domain
Position für neuen Knoten
Position Vorgänger (realer Knoten)
Position Nachfolger (Virtueller Knoten)
Tabelle 3.7 – Protokoll für Request zum Eingliedern zwischen zwei Knoten
3.1 Kordelaufbau
18
neuer Virtueller Knoten erstellt, bekommt dieser eine Position zwischen realem
Knoten und dem ersten Virtuellen Knoten.
Alle Fälle haben gemeinsam, dass nach einem Request zum Eingliedern in eine
Kordel ein Timer gestartet wird. Erst wenn dieser Timer abgelaufen ist, ist es dem
Knoten wieder möglich, einen neuen Request zu versenden. Dadurch soll verhindert
werden, dass ein Knoten ständig Requests verschickt, da diese eine gewisse Zeit zur
Abarbeitung brauchen.
3.2
Lokales Routing
Um Nachrichten innerhalb der eigenen Kordel zu verschicken, ist es nötig, an die
Nachricht die Zielposition, die Quellposition und die Länge der Nachricht hinzuzufügen (Tabelle 3.8).
Das erstmalige Senden und das Weiterleiten von Nachrichten erfolgt auf die
selbe Art und Weise. Damit die Prozedur nicht zweimal implementiert werden muss,
wird beim Senden einer lokalen Nachricht simuliert, dass diese empfangen wurde
und einfach weitergeroutet werden muss.
Sobald eine Nachricht empfangen wurde, wird als erstes die Zielposition untersucht,
um zu wissen, ob die Nachricht für den eigenen Knoten bestimmt ist. Hierbei ist es
wichtig, nicht nur die eigene Position zu betrachten, sondern auch die Positionen
aller Virtuellen Knoten, da auch diese vom Knoten empfangen werden müssen.
Ist die Nachricht weder für den realen Knoten noch für einen der Virtuellen Knoten
bestimmt, muss sie weitergeleitet werden. Damit die Nachricht nicht jeden Knoten in
der Kordel passieren muss, ist es möglich, Abkürzungen zu nehmen. Ist zum Beispiel
der Zielknoten einer Nachricht nicht der direkte Nachfolger des Knotens, jedoch in
seiner Nachbarschaft, so wird die Nachricht gleich zum Zielknoten geschickt und
nicht der Umweg über den Nachfolger und eventuell noch weitere Knoten gemacht,
siehe Abbildung 3.6.
Byte
1 - 13
14 - 15
16 - 17
18 - 19
20 -
Feld
VCP_MSG_LOCAL
OWN_POS
OWN_POS
LENGTH
Message
Beschreibung
Header
Position Empfänger
Position Sender
Länger der Nachricht
Eigentliche Nachricht
Tabelle 3.8 – Protokoll für lokale Nachrichten
3.2 Lokales Routing
19
1
12
25
92
99
90
40
50
75
Abbildung 3.6 – Greedy Forwarding, anstatt die lange Schleife zu wählen,
sendet Knoten 25 direkt an Knoten 90
Zum Weiterleiten der Nachricht werden alle physikalischen Nachbarn untersucht. Dem Knoten, welcher virtuell am nächsten zum Ziel ist, wird die Nachricht
weitergeleitet. Dabei ist es egal, ob dieser Knoten in der Kordel eventuell schon über
das Ziel hinaus ist, es zählt nur, dass er die geringste Distanz zum Ziel hat.
3.3
3.3.1
Globales Routing
Verbreiten von Gateway Informationen
Befindet sich ein Knoten in der Nachbarschaft eines Knotens einer anderen Kordel,
so kann er als Gateway fungieren. Damit nicht nur der jeweilige Knoten Nachrichten
in die andere Kordel schicken kann, sondern die ganze Kordel, muss die Information
über den Gateway in der Kordel verbreitet werden. Hierfür durchsucht jeder Knoten
alle TIME_GATEWAY_INFO seine Liste von externen Nachbarn und sendet gegebenenfalls, wenn Nachbarn vorhanden sind, eine Liste (Tabelle 3.9) durch seine Kordel.
Um die Nachbarn zu informieren, baut der Knoten eine Nachricht zusammen,
in der seine direkten Verbindungen in andere Kordeln gespeichert werden. Da die
Anzahl variabel ist, wird auch diese an die Nachricht angehängt, es können jedoch
maximal Informationen über 12 andere Kordeln innerhalb einer Nachricht versendet
werden.
Hierfür iteriert der Knoten durch die gesamte Liste der externen Nachbarn. Sobald ein Nachbar einer neuen Kordel betrachtet wird, wird diese der Nachricht
angefügt. Zum Schluss werden noch die Anzahl der Knoten und die Position des
Gateways, also die eigene, angehängt. Ist die Anzahl 0, also hat der Knoten keine
Nachbarn in anderen Kordeln, wird das Paket verworfen. Außerdem wird noch die
3.3 Globales Routing
Byte
1-6
7-8
9 - 10
11
12
13
Feld
GWINFO
OWN_POS
FROM_POS
AMOUNT
GW1
GW2
20
Beschreibung
Header
Position des Gateways
Position des letzten Senders dieser Nachricht
Anzahl von Gateways in Nachricht
Externe Domain 1
Externe Domain 2
Tabelle 3.9 – Protokoll für Nachrichten zum Verbreiten von Gateway Informationen, es sind bis zu 12 externe Domains möglich
Adresse des Senders hinzugefügt, welche bei jedem Knoten aktualisiert wird. Dies
ist notwendig, damit bei Virtuellen Knoten keine Zyklen entstehen.
Diese Nachricht wird an den direkten Vorgänger und Nachfolger gesendet, ein Greedy
Forwarding, wie bei normalen Nachrichten, ist hier nicht möglich, da jeder Knoten
einer Kordel über den Gateway in Kenntnis gesetzt werden muss.
Empfängt ein Knoten diese Nachricht, iteriert er über alle mitgeschickten Gateway Informationen und aktualisiert, bzw. erstellt diese in seiner Liste von bekannten
Gateways. Die Gateway Informationen werden, wenn nicht rechtzeitig aktualisiert,
nach TIME_GATEWAY_DELETE wieder gelöscht. Dieser Zeitwert wurde ein wenig
über dem doppelten Wert von TIME_GATEWAY_INFO festgesetzt, sodass im Falle
eines Paketverlustes nicht sofort die Information über den Gateway entfernt werden.
3.3.2
Versenden von globalen Nachrichten
Die Idee hinter dem Routing zwischen zwei Kordeln ist, dass der Sender die Nachricht als globale Nachricht zu einem Gateway versendet, dieser die Nachricht zu
einer lokalen transformiert und seinem Gegenüber in der anderen Kordel weiterleitet
(Abbildung 3.7). Der Gateway der anderen Kordel sendet diese Nachricht als lokale
Nachricht zum Empfänger.
Beim Senden einer globalen Nachricht wird zuerst ein Gateway zur Kordel des
Empfängers gesucht. Hierfür wird die eigene Liste der externen Nachbarn durchsucht, um festzustellen, ob der sendende Knoten bereits ein richtiger Gateway ist.
Wird in dieser Liste kein passender Knoten gefunden, wird die Liste der bekannten
Gateways durchsucht. Wird auch hier kein Gateway gefunden, wird der Sendevorgang abgebrochen.
Nun werden alle nötigen Informationen, siehe Tabelle 3.10, angefügt. Ähnlich wie
beim lokalen Routing wird simuliert, dass eine globale Nachricht zum Weiterleiten
3.3 Globales Routing
21
99
1
12
50
75
40
25
1
90
99
92
Abbildung 3.7 – Ablauf von globalem Routing, blau ist die globale Nachricht,
grün die lokale und rot der Übergang zwischen den Kordeln
empfangen wurde.
Wird eine globale Nachricht empfangen, untersucht der Knoten zuerst, ob die
Nachricht für ihn bestimmt ist. Hierbei ist zu beachten, dass nicht die eigentliche
Zieladresse, sondern die des Gateways untersucht werden muss.
Ist die Nachricht nicht für den Knoten bestimmt, wird sie genau wie beim lokalen
Routing per Greedy Forwarding weitergeleitet. Falls der Knoten der Gateway ist,
wandelt dieser die Nachricht in eine lokale Nachricht, indem der Header und die
benötigten Felder verändert werden, und sendet diese direkt an sein Gegenüber in
der anderen Kordel. Dieser empfängt die Nachricht bereits als lokale Nachricht und
routet sie zum Zielknoten.
Byte
1 - 13
14
15
16 - 17
18 - 19
19 - 20
21 - 22
23 -
Feld
VCP_MSG_GLOBA
DEST_DOM
SRC_DOM
OWN_POS
OWN_POS
GATEWAY_POS
LENGTH
Message
Beschreibung
Header
Zieldomain
Quelldomain
Position Empfänger
Position Sender
Position Gateway
Länger der Nachricht
Eigentliche Nachricht
Tabelle 3.10 – Protokoll für globale Nachrichten
Kapitel 4
Verifikation und Leistungsbewertung
Als Abschluss dieser Bachelorarbeit sollte das implementierte Protokoll auf seine
Leistungsfähigkeit getestet werden. Hierfür wurden einige Szenarien ausgearbeitet
und getestet, welche sowohl den Kordelaufbau als auch die anschließende Kommunikation untersuchen.
Bei den Tests mit Cooja wurde jeder Durchlauf 20 mal wiederholt, bei den Tests auf
den realen Knoten 10 mal. Der Mittelwert der Ergebnisse wird in den nachfolgenden
Säulendiagrammen dargestellt. Auf der x-Achse befindet sich jeweils die Anzahl der
Knoten des Tests in aufsteigender Reihenfolge, die y-Achse beschreibt, wenn nicht
anders angegeben, die benötigte Dauer in Sekunden.
Die Plots wurden mittels GNU R 7 , einer Programmiersprache für statistische Grafiken erstellt. Es bedarf der Einarbeitung, doch die geplotteten Graphen rechtfertigen
diesen Aufwand.
Um nicht jeden Test manuell durchführen zu müssen, wurde die Möglichkeit von
Cooja verwendet, eigene Plugins miteinzubinden. Mit Hilfe eines kleinem Plugins
ist es möglich, Buttonklicks zu simulieren und die Ausgaben der Knoten in eine
Textdatei umzuleiten. Zusätzlich können eigene Simulationen ohne grafische Oberfläche ausgeführt werden. Durch eine Kombination aus diesen beiden Features ist es
möglich, die Simulation auf der CLI8 zu starten und erst nach Ablauf die Textdatei
auszuwerten.
Da es sehr schwierig bis nahezu unmöglich ist, mit realen Knoten die Nachbarschaftsverhältnisse von Szenarien wie Line oder Grid aufzubauen, wurde die Nachbarschaft
softwaremäßig nachgestellt. Um dies zu erreichen, verwirft ein Knoten einfach alle
Pakete, die er erhält, aber laut Szenario nicht erhalten soll. Dies bedeutet, dass physikalisch jeder Knoten jeden anderen sieht, was an der Funktionalität des Protokolls
nichts ändert. Zu beachten ist jedoch, dass dadurch mehr Interferenzen entstehen,
7
8
http://www.r-project.org
CLI: Command Line Interface; Steuerung eines Programms im Textmodus
22
4 Verifikation und Leistungsbewertung
23
welche sich bei den Tests auf ihre Dauer auswirken.
Zur Zeitmessung auf den realen Knoten wurde ein Supernode eingerichtet, welchen
alle Knoten innerhalb von einem Hop erreichen können. Bei jedem Ereignis, bei dem
die Zeit gemessen werden muss, sendet der jeweilige Knoten eine Nachricht an den
Supernode. Damit wird das Problem, dass auf jedem Knoten ein unterschiedlicher
Zeitwert aktuell ist [18], eliminiert. Bei den Ergebnissen ist aber zu beachten, dass
bei jeder Messung dieser Hop miteinberechnet ist.
4.1
Kordelaufbau
Um den Kordelaufbau bewerten zu können, gibt es zwei Szenarien: der Aufbau
entlang einer Line und der Aufbau in einem Grid.
4.1.1
Kordelaufbau entlang einer Line
In diesem Szenario, abgebildet in Abbildung 4.1, hat jeder Knoten außer den Randknoten zwei physikalische Nachbarn. Dadurch ist der Aufbau der Kordel nur auf
eine Art möglich.
Wie in Abbildung 4.2 zu sehen ist, nimmt die Dauer für den Aufbau mit Anzahl
der Knoten linear zu. Außerdem ist die Standardabweichung zwischen den einzelnen Durchläufen erwartungsgemäß gering, da wie erwähnt, der Ablauf ident ist.
Abbildung 4.1 – Line-Szenario; jeder Knoten hat zwei physikalische Nachbarn
24
100
4.1 Kordelaufbau
60
40
0
20
Dauer [Sekunden]
80
Cooja
Reale Knoten
4
6
8
10
12
14
16
Anzahl Knoten
Abbildung 4.2 – Messergebnisse Kordelaufbau im Line-Szenario; Die größere
Dauer auf den realen Knoten lässt sich durch Interferenzen erklären, da jeder
Knoten technisch mit jedem anderen kommunizieren kann; Der Fehlerbalken
beschreibt die Standardabweichung der verschiedenen Testdurchläufe
4.1.2
Kordelaufbau im Grid
Ein ganz anderes Verhalten als beim Line Szenario ist zu erwarten, wenn die Knoten
in einem Grid angeordnet sind. Für diesen Test wurden symmetrische Grids erstellt,
wobei ein Knoten jeweils mit seinen insgesamt 8 direkten Nachbarn (Abbildung 4.3)
kommunizieren kann.
Da nur eine begrenze Anzahl an realen Knoten vorhanden war, gibt es für das 5x5
Grid Szenario nur ein Ergebnis in Cooja.
Abbildung 4.3 – Grid-Szenario; jeder Knoten hat acht physikalische Nachbarn
4.1 Kordelaufbau
25
Den Initialknoten bildet in diesem Szenario der Knoten 1, welcher sich in der
linken oberen Ecke befindet. Nun gibt es unzählige Möglichkeiten, auf welche Weise
sich die Kordel aufbaut. In den Tests dieses Projekts gab es sämtliche Möglichkeiten,
von Fällen in denen sich alle Knoten zwischen zwei anderen eingegliedert haben
bis hin zu Durchläufen, bei denen mehrere Virtuelle Knoten erstellt wurden. Diese
vielfältigen Möglichkeiten sind nun auch bei den Ergebnissen der Dauer zu sehen,
wodurch eine sehr breite Standardabweichung entstanden ist.
Ein Aufbau, wie er bei einem der Tests entstanden ist, kann in Abbildung 4.6
betrachtet werden. Hier sind zwei negative Aspekte zu beobachten:
• Virtuelle Knoten, obwohl jeder Knoten genug physikalische Nachbarn hat
• Die Aufteilung der Positionen: zwischen 1 und 1250 befinden sich 5 Knoten,
zwischen 3750 und 5000 nur 2.
Wie in Abbildung 4.4a gut sichtbar ist, nimmt die Dauer für den Aufbau abhängig
von der Knotenanzahl gleichmäßig zu.
Auffällig bei allen Ergebnissen ist, dass der Aufbau relativ viel Zeit in Anspruch
nimmt. Dies ist auf die Einstellung der Zeiten (Tabelle 4.1) zurück zu führen.
Sollte der Kordelaufbau schneller realisiert werden, sind diese Werte kleiner zu
wählen. Dies führt aber zu mehr Netzwerkkommunikation und zu mehr Kollisionen
und verschwendet somit mehr Energie. Beim eigenen Einsatz muss zwischen diesen
beiden Extrema ein Kompromiss gefunden werden, welcher den Ansprüchen des
4
Cooja
Reale Knoten
3
0
1
2
Anzahl Hops
100
50
0
Dauer [Sekunden]
150
200
Netzwerks bzw. der Knoten entspricht. Außerdem ist hier die Wartezeit zum Erstel-
2x2
3x3
4x4
Anzahl Knoten
(a) Kordelaufbau
5x5
2x2
3x3
4x4
5x5
Anzahl Knoten
(b) Nachrichtenversand
Abbildung 4.4 – Messergebnisse: Dauer Kordelaufbau im Grid-Szenario und
Nachrichtenversand. Beim Nachrichtenversand beschreibt die Säule die Anzahl
der idealen Hops, der Fehlerbalken die real benötigten Hops. Der Fehlerbalken
beim Kordelaufbau ist die Standardabweichung der verschiedenen Durchläufe;
5x5 Szenario aufgrund begrenzter Anzahl von realen Knoten nur in Cooja
4.1 Kordelaufbau
Zeit
TH_INIT
TH_AFTER
TH_INIT_TIME
TPS
NO_REQUEST
TVPS
WAIT_LOCK
26
Dauer
1 Sek.
6 Sek.
20 Sek.
2 Sek.
10 Sek.
30 Sek.
5 Sek.
Beschreibung
Hello-Messages Intervall vor TH_INIT_TIME
Hello-Messages Intervall nach TH_INIT_TIME
siehe ersten zwei Zeilen
Mindest-Wartezeit vor erstem Request
Mindestintervall zwischen zwei Requests
Wartezeit vor Erstellen eines Virtuellen Knotens
Dauer, die ein Knoten gelockt wird
Tabelle 4.1 – Einstellungen der Zeiten bei den diversen Testdurchläufen
len eines Virtuellen Knotens relativ hoch gewählt. Dies bewirkt, dass das Netzwerk
einfach gehalten wird, da länger die Möglichkeit besteht, noch von weiteren Knoten
zu erfahren, welche eventuell ein einfacheres Eingliedern ermöglichen.
4.2
Kommunikation
Im zweiten Teil der Tests geht es um die Kommunikation innerhalb des Netzwerks,
wenn die Kordel bereits fertig aufgebaut ist.
Bei diesen Tests wird die Zeit zu einem großen Teil davon beeinflusst, ob der
Übertragungskanal gerade belegt ist bzw. wie lange mit der Übertragung gewartet
werden muss. Da dieser Wert bei jedem Test anders ist, entsteht eine relativ große
Standardabweichung.
4.2.1
Kommunikation entlang einer Line
Dieses Szenario baut auf dem Kordelaufbau in Abbildung 4.1 auf, bei dem jeder
Knoten nur seinen direkten Vorgänger und Nachfolger sieht. Dadurch sind keine
Abkürzungen, Greedy Forwarding, möglich.
Die linearen Ergebnisse, abgebildet in Abbildung 4.10, entsprechen den Erwartungen. Die einzige Auffälligkeit ist eine relativ große Standardabweichung, welche
durch den bereits vorhandenen Netzwerktraffic zustande kommt und in allen Kommunikationstests auftritt.
4.2.2
Kommunikation im Grid
Bei der Kommunikation im Grid sollte die Dauer im Vergleich zur Line nur einen
Bruchteil betragen, da hier das Konzept des Greedy Forwarding ausgenützt wird.
Dies erlaubt dem Knoten, die Nachricht nicht strikt entlang der Kordel zu versenden,
sondern gegebenenfalls an einen Knoten in der Nachbarschaft, welcher sich näher
27
0.8
0.6
0.0
0.2
0.4
Dauer [Sekunden]
1.0
1.2
1.4
4.2 Kommunikation
8 Hz
32 Hz
Kein Duty−Cycle
Duty−Cycle Frequenz
Abbildung 4.5 – Vergleich von verschiedenen Duty-Cycle Frequenzen bei der
Kommunikation im 5x5 Grid-Szenario. Durch eine höhere Frequenz ist eine
schnellere Kommunikation möglich. Bei Kein Duty-Cycle ist das Radio immer
eingeschaltet, die Nachricht kann sofort (wenn der Kanal frei ist) gesendet
werden
am Ziel befindet.
Die Nachrichten für diesen Test wurden von der linken oberen Ecke zur virtuellen
Position 1 versendet. Der maximale Wert, der im Idealfall eintreten kann, wenn sich
p
Position 1 in der rechten unteren Ecke befindet, beträgt somit Knotenanzahl − 1.
Da jedoch dieses Protokoll keine Informationen über die realen Positionen und somit
der realen Distanz zum Zielknoten besitzt, sondern nur die virtuellen Positionen
betrachtet, ist der Idealfall nicht immer möglich.
Bei diesem Szenario ist wichtig, ob das Protokoll eine gute Route mit möglichst
wenigen Hops findet. Da die Übertragungszeit hier zu sehr vom aktuellen Datenaufkommen abhängt, gibt es nur einen Vergleich der gewählten Route zur idealen
Route, was zeitunabhängig ist. Um sich die ungefähre Zeit vorstellen zu können,
wird diese für ein Szenario in Abbildung 4.5 aufgelistet.
In Abbildung 4.4b ist der Durchschnitt der ideal zurückzulegenden Hops in den
Säulen aufgelistet. Im Vergleich dazu sind die real zurückgelegten Hops als Fehlerbalken aufgetragen. Es ist gut zu sehen, dass die reale Anzahl nur wenig über der
idealen liegt, was bedeutet, dass die Route sehr gut gewählt ist. Beim 2x2 Szenario
ist der Wert der selbe, da die Anzahl zu jedem Knoten immer 1 Hop ist.
Beim 5x5 Grid wurde ein Versuch mit höherer Duty-Cycle Frequenz durchgeführt.
Der Contiki Standardwert hierfür ist 8 Hertz, was bedeutet, dass jeder Knoten 8 mal
pro Sekunde sein Radio einschaltet und hört, ob der Kanal frei ist. Beim Versuch in
Abbildung 4.5 wurde dieser Wert auf 32 Hertz vergrößert. Dies verbraucht mehr
4.2 Kommunikation
28
Energie, jedoch verringert sich das Datenaufkommen, was dazu führt, dass die Daten
zwischen den einzelnen Knoten schneller versendet werden können. Der Extremwert
hierfür wäre, Duty-Cycle zu deaktivieren. In diesem Fall horcht das Radio immer
und somit kann jeder Knoten sofort senden, sofern nicht gerade ein anderer sendet.
Hierfür ist der Zeitwert winzig, was zeigt dass die Übertragungsverzögerung im
MAC-Layer und nicht beim Routing Protokoll entsteht.
4.2.3
Parallele Nachrichten
In einem weiteren Versuch wurde getestet, wie sich das Netzwerk verhält, wenn
mehrere Knoten an einen Knoten Daten senden möchten. Hierfür senden, dargestellt
in Abbildung 4.7, jeweils n Knoten eine Nachricht an Knoten 50. Bei 2 gleichzeitig
sendenden Nodes sind dies die Knoten 1 und 99, bei 8 gleichzeitig sendende Nodes 1
bis 25 sowie 90 bis 99.
Damit das Senden wirklich gleichzeitig erfolgt, warten alle Knoten auf einen Buttonklick und senden, sobald dieser erfolgt. In Cooja ist es einfach zu simulieren,
dass die Buttons aller Knoten gleichzeitig gedrückt werden. Auf den realen Knoten
ist dies fast unmöglich. Aus diesem Grund gibt es für diesen Test nur Ergebnisse
vom Simulator.
10000
2500
3750
3437
1250
5000
3125
3281
625
157
6250
6484
313
1
6406
6562
Abbildung 4.6 – Ein möglicher Aufbau des 4x4 Grid Szenarios. Der Knoten
5000 hat einen Virtuellen Knoten (7500) über welchen Knoten 6250 in die
Kordel integriert ist
4.2 Kommunikation
1
5
29
12
40
25
50
75
92
90
95
99
Abbildung 4.7 – Parallele Nachrichten; 4 gleichzeitig sendende Nodes: Node
1, 5, 95 und 99 senden an Node 50
Die Ergebnisse in Abbildung 4.8 zeigen, dass es einen geringen Einfluss hat,
wieviele Knoten gleichzeitig eine Nachricht senden, da die Dauer nur leicht steigt.
Das liegt auch daran, dass die Nachricht, welche die meisten Hops bewältigen muss,
gleich bleibt. Da in der Nachbarschaft eines Knotens immer nur ein Knoten senden
kann, müssen, in dem Fall dass mehrere Knoten gleichzeitig senden wollen, alle anderen warten. Dies führt zu einer langen Dauer und einer großen Standardabweichung.
4.2.4
Inter-Domain Nachrichten
Beim abschließenden Test wird die Leistungsfähigkeit von Inter-Domain Nachrichten
untersucht. Hierfür wurde das Szenario wie in Abbildung 4.9 erstellt.
Der sendende Knoten sendet seine globale Nachricht an den Knoten 1 der roten
Kordel. Hierfür muss die Nachricht an den Gateway, Knoten 99, gesendet werden.
Da die Nachricht, sobald sie in der Zielkordel angekommen ist, als lokale Nachricht
weitergeleitet wird, und dieses Szenario bereits diskutiert wurde, wird hier nur die
4
3
0
1
2
Dauer [Sekunden]
5
6
7
Weiterleitung bis zur Zielkordel betrachtet.
4
6
8
10
Anzahl Knoten
Abbildung 4.8 – Messergebnisse Parallele Nachrichten in Cooja; Der Fehlerbalken beschreibt die Standardabweichung der verschiedenen Testdurchläufe.
Die x-Achse beschreibt die Anzahl gleichzeitig sendender Knoten
4.2 Kommunikation
30
1
40
90
25
1
99
92
2.5
Abbildung 4.9 – Inter Domain Szenario; Knoten 99 stellt Gateway dar
1.5
1.0
0.0
0.5
Dauer [Sekunden]
2.0
Cooja
Reale Knoten
4
6
8
10
12
14
16
Anzahl Knoten
Abbildung 4.10 – Messergebnisse Inter-Domain Routing bzw. Kommunikation
im Line Szenario; Der Fehlerbalken beschreibt die Standardabweichung der
verschiedenen Testdurchläufe
Es war zu erwarten, dass das Ergebnis dem des Kommunikation entlang einer
Line ähnelt, da die Pakete gleich weitergeleitet werden. Die gemessenen Werte
entsprachen diesen, deshalb wird hierfür kein weiteres Diagramm erstellt.
Kapitel 5
Zusammenfassung
In der vorliegenden Arbeit wurde das Virtual Cord Protocol implementiert. Der
wesentliche Bereich war der Aufbau des Netzwerks, wobei darauf zu achten war,
dass keine Inkonsistenzen auftreten, was durch Locking, dem kurzfristigen Sperren
eines Knotens für neue Request, erreicht wurde. Sobald ein Netzwerk besteht, ist das
Routing von Nachrichten die wesentliche Aufgabe. Dies funktioniert mit Hilfe von
virtuellen Koordinaten, sodass die Nachricht wie an einer Kordel weitergeleitet wird.
Zusätzlich ist es möglich Abkürzungen zu wählen, falls sich ein dem Ziel näherer
Knoten in der direkten Umgebung befindet. Das Routing wurde um Inter-Domain
Routing erweitert, sodass ein Knoten auch Nachrichten in eine andere Kordel versenden kann. Dies geschieht über Gateways, in deren direkten Umgebung sich Knoten
einer anderen Kordel befinden.
Die Entwicklung wurde hauptsächlich mit dem Simulator Cooja durchgeführt, was
den großen Vorteil hatte, dass die aktuellen Änderungen nicht bei jedem Entwicklungsstand auf viele Knoten programmiert werden musste, sondern zuerst getestet
werden konnte.
Zum Abschluss wurde die Implementierung auf den realen TelosB Knoten auf ihre
Leistungsfähigkeit getestet. Dafür wurden zwei Szenarien entwickelt, einerseits ein
Line-Szenario, bei dem jeder Knoten nur mit seinem Vorgänger bzw. Nachfolger
kommunizieren kann. Die Ergebnisse dieses Szenarios zeigen sowohl beim Aufbau
als auch bei der Kommunikation einen linearen Zeitanstieg abhängig von der Knotenanzahl.
Beim zweiten Szenario wurde ein symmetrisches Grid aufgebaut, wobei es den Knoten möglich war mit den 8 direkten Nachbarn kommunizieren. Hierbei ist weniger
die Zeit bei der Kommunikation sondern vielmehr die Anzahl der benötigten Hops
interessant. Diese waren nur um einen Bruchteil höher als die ideal mögliche Anzahl
der Hops, was bedeutet dass durch das Routingprotokoll gute Wege von der Quelle
zur Senke gewählt werden.
31
5 Zusammenfassung
32
Momentan ist Inter-Domain Routing nur mit einer Kordel möglich, die sich in direkter
Umgebung eines beliebigen Knotens der eigenen Kordel befindet. Diese Einschränkung aufzuheben und ein Routing über mehrere Kordeln hinweg zu realisieren
könnte der Inhalt einer zukünftigen Arbeit sein. Außerdem könnte in einer weiteren
Arbeit ein Verfahren entwickelt werden, in dem die Aufteilung der Knoten gleichmäßig verteilt wird. Dadurch könnte korrigiert werden, wenn sich die Knoten so
eingliedern, dass sich zwischen erstem und zweitem Knoten die gleiche Positionsdistanz wie zwischen zweitem und 25. Knoten ergibt.
Abbildungsverzeichnis
1.1 Vergleich von Single- und Multihop . . . . . . . . . . . . . . . . . . . . .
2
1.2 Idee des Inter-Domain Routings, Knoten 12 bzw 50 fungieren als
Gateway mit Knoten 40 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.1 TelosB Knoten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.2 Screenshot Cooja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
3.1 Ablauf beim Erhalt einer Hello-Message . . . . . . . . . . . . . . . . . . 11
3.2 Ablauf zum Eingliedern in Kordel . . . . . . . . . . . . . . . . . . . . . . 12
3.3 Erfolgreicher Ablauf beim Eingliedern zwischen zwei Knoten . . . . . 13
3.4 Erfolgreicher Ablauf beim Übernehmen des Startknotens . . . . . . . . 15
3.5 Erfolgreicher Ablauf beim Erstellen eines Virtuellen Knotens . . . . . 17
3.6 Greedy Forwarding, anstatt die lange Schleife zu wählen, sendet
Knoten 25 direkt an Knoten 90 . . . . . . . . . . . . . . . . . . . . . . . . 19
3.7 Ablauf von globalem Routing, blau ist die globale Nachricht, grün die
lokale und rot der Übergang zwischen den Kordeln . . . . . . . . . . . 21
4.1 Line-Szenario; jeder Knoten hat zwei physikalische Nachbarn . . . . . 23
4.2 Messergebnisse Kordelaufbau im Line-Szenario; Die größere Dauer
auf den realen Knoten lässt sich durch Interferenzen erklären, da
jeder Knoten technisch mit jedem anderen kommunizieren kann; Der
Fehlerbalken beschreibt die Standardabweichung der verschiedenen
Testdurchläufe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.3 Grid-Szenario; jeder Knoten hat acht physikalische Nachbarn . . . . . 24
4.4 Messergebnisse: Dauer Kordelaufbau im Grid-Szenario und Nachrichtenversand. Beim Nachrichtenversand beschreibt die Säule die
Anzahl der idealen Hops, der Fehlerbalken die real benötigten Hops.
Der Fehlerbalken beim Kordelaufbau ist die Standardabweichung der
verschiedenen Durchläufe; 5x5 Szenario aufgrund begrenzter Anzahl
von realen Knoten nur in Cooja . . . . . . . . . . . . . . . . . . . . . . . 25
33
Abbildungsverzeichnis
34
4.5 Vergleich von verschiedenen Duty-Cycle Frequenzen bei der Kommunikation im 5x5 Grid-Szenario. Durch eine höhere Frequenz ist eine
schnellere Kommunikation möglich. Bei Kein Duty-Cycle ist das Radio
immer eingeschaltet, die Nachricht kann sofort (wenn der Kanal frei
ist) gesendet werden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.6 Ein möglicher Aufbau des 4x4 Grid Szenarios. Der Knoten 5000 hat
einen Virtuellen Knoten (7500) über welchen Knoten 6250 in die
Kordel integriert ist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.7 Parallele Nachrichten; 4 gleichzeitig sendende Nodes: Node 1, 5, 95
und 99 senden an Node 50 . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.8 Messergebnisse Parallele Nachrichten in Cooja; Der Fehlerbalken beschreibt die Standardabweichung der verschiedenen Testdurchläufe.
Die x-Achse beschreibt die Anzahl gleichzeitig sendender Knoten . . . 29
4.9 Inter Domain Szenario; Knoten 99 stellt Gateway dar . . . . . . . . . . 30
4.10 Messergebnisse Inter-Domain Routing bzw. Kommunikation im Line
Szenario; Der Fehlerbalken beschreibt die Standardabweichung der
verschiedenen Testdurchläufe . . . . . . . . . . . . . . . . . . . . . . . . . 30
Tabellenverzeichnis
3.1 Protokoll für Hello-Messages . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.2 Protokoll für Request zum Eingliedern zwischen zwei Knoten . . . . . 13
3.3 Protokoll für Acknowledgment zum Eingliedern zwischen zwei Knoten, einziger Unterschied zu Request ist geänderter Header . . . . . . 14
3.4 Protokoll für Request bei Übernahme des Startknotens . . . . . . . . . 15
3.5 Protokoll für Acknowledgment bei Übernahme des Startknotens, einziger Unterschied zum Request ist der Header . . . . . . . . . . . . . . 16
3.6 Protokoll für Request zum Erstellen eines Virtuellen Knotens . . . . . 17
3.7 Protokoll für Request zum Eingliedern zwischen zwei Knoten . . . . . 17
3.8 Protokoll für lokale Nachrichten . . . . . . . . . . . . . . . . . . . . . . . 18
3.9 Protokoll für Nachrichten zum Verbreiten von Gateway Informationen,
es sind bis zu 12 externe Domains möglich . . . . . . . . . . . . . . . . 20
3.10 Protokoll für globale Nachrichten . . . . . . . . . . . . . . . . . . . . . . 21
4.1 Einstellungen der Zeiten bei den diversen Testdurchläufen . . . . . . . 26
35
Literaturverzeichnis
[1] V. Bharghavan, A. Demers, S. Shenker, and L. Zhang, “MACAW: A Media Access
Protocol for Wireless LAN’s,” in ACM SIGCOMM 1994, London, UK, September
1994, pp. 212–225.
[2] IEEE, Part 15.4: Low-Rate Wirless Personal Are Networks (LR-WPANs), Institute
of Electrical and Electronics Engineers, Inc., Juny 2011.
[3] “ZigBee Specification r17,” ZigBee Alliance, Data Sheet, January 2008.
[4] I. F. Akyildiz, W. Su, Y. Sankarasubramaniam, and E. Cayirci, “A Survey on
Sensor Networks,” IEEE Communications Magazine, vol. 40, no. 8, pp. 102–116,
August 2002.
[5] C. E. Perkins and P. Bhagwat, “Highly Dynamic Destination-Sequenced
Distance-Vector Routing (DSDV) for Mobile Computers,” Computer Communications Review, pp. 234–244, 1994.
[6] D. B. Johnson, Y. Hu, and D. A. Maltz, “The Dynamic Source Routing Protocol
(DSR) for Mobile Ad Hoc Networks for IPv4,” RFC 4728, Internet Engineering
Task Force, Tech. Rep., February 2007.
[7] K. Akkaya and M. Younis, “A survey on routing protocols for wireless sensor
networks,” Ad Hoc Networks, vol. 3, pp. 325–349, 2005.
[8] A. Awad, C. Sommer, R. German, and F. Dressler, “Virtual Cord Protocol (VCP):
A Flexible DHT-like Routing Service for Sensor Networks,” in 5th IEEE International Conference on Mobile Ad-hoc and Sensor Systems (MASS 2008). Atlanta,
GA: IEEE, September 2008, pp. 133–142.
[9] M. Caesar, M. Castro, E. B. Nightingale, G. O’Shea, and A. Rostron, “Virtual
ring routing: Network routing inspired by dhts,” ACM SIGCOMM Computer
Communication Review, vol. 36, pp. 351–362, October 2006.
[10] A. Awad, R. German, and F. Dressler, “Exploiting Virtual Coordinates for Improved Routing Performance in Sensor Networks,” IEEE Transactions on Mobile
Computing, vol. 10, no. 9, pp. 1214–1226, September 2011.
36
Literaturverzeichnis
37
[11] F. Dressler, A. Awad, R. German, and M. Gerla, “Enabling Inter-Domain Routing
in Virtual Coordinate Based Ad Hoc and Sensor Networks,” in 15th ACM International Conference on Mobile Computing and Networking (MobiCom 2009),
Poster Session.
Beijing, China: ACM, September 2009.
[12] “MSP430 - Mixed Signal Microcontrollers Datasheet,” Texas Instruments, Data
Sheet, December 1998.
[13] “CC2420 Preliminary Datasheet,” Chipcon, Data Sheet, Juny 2004.
[14] “Datasheet SHT1x,” Sensirion, Data Sheet, December 2011.
[15] “S1087/S1133 series Datasheet,” Hamamatsu Photonics K.K., Data Sheet,
April 2001.
[16] A. Dunkels, B. Groenvall, and T. Voight, “Contiki - a lightweight and flexible
operating system for tiny networked sensors,” in LCN ’04 Proceedings of the 29th
Annual IEEE International Conference on Local Computer Networks, November
2004, pp. 455–462.
[17] A. Dunkels, O. Schmidt, and T. Voigt, “Using protothreads for sensor node
programming,” in In Proceedings of the REALWSN 2005 Workshop on RealWorld
Wireless Sensor Networks, 2005.
[18] A. S. Tanenbaum and M. van Steen, Distributed Systems: Principles and Paradigms, 2nd ed.
Prentice Hall International, 2007.
Herunterladen