


----------------------------------------------------------------------------
HINWEIS HINWEIS HINWEIS HINWEIS HINWEIS HINWEIS HINWEIS HINWEIS HINWEIS 

Die deutschsprachige Doku (dieser Text) ist veraltet. Die englische Version
'Readme' ist dagegen up-to-date. 

HINWEIS HINWEIS HINWEIS HINWEIS HINWEIS HINWEIS HINWEIS HINWEIS HINWEIS
----------------------------------------------------------------------------

B.A.T.M.A.N.-II

BETTER APPROACH TO MOBILE AD-HOC NETWORKING




B.A.T.M.A.N. ist eine vllig neue Herangehensweise an Ad-Hoc-Routing, deren
Durchfhrbarkeit wir mit diesem Code testen wollen. Alle bisherigen uns
bekannten Routingalgorithmen fr MANETs (Mobile Ad-Hoc Networks) versuchen
Routen zu berechnen. B.A.T.M.A.N. tut etwas vllig anderes. Es berechnet keine
Routen - es sprt das Vorhandensein von Routen auf, und benutzt sie bei
Bedarf. 

B.A.T.M.A.N. interessiert sich nicht dafr wie eine Route verluft die es
benutzt um mit einem anderen Knoten im Mesh-Netzwerk zu kommunizieren.
B.A.T.M.A.N. prft lediglich ber welchen direkten Nachbarn ein bestimmter
Netzwerkknoten am besten zu erreichen ist. Wer wissen mchte wie B.A.T.M.A.N.
zu einem bestimmten Knoten routet, kann das mit

ping -R <Zieladresse> 

herausfinden. Das geht allerdings leider nicht mit dem in Busybox (Das
'Schweizer Taschenmesser': Multicall Binary fr Embedded Linux) integrierten
Ping-Kommando weil diese Option nicht zur Verfgung steht. Hier muss dann

traceroute -n <Zieladresse>

herhalten.


Ein Knoten in einem B.A.T.M.A.N.-MANET interessiert sich nur dafr, von der
Existenz aller anderer Knoten zu wissen die er direkt oder ber eine
Multi-Hop-Verbindung erreichen kann. Um mit einem indirekten Nachbarn zu
kommunizieren muss B.A.T.M.A.N. einen Nachbarn in direkter Funkreichweite
bestimmen dem ein Datenpaket berreicht werden kann, damit dieser es auf dem
gnstigsten Weg zu dem Nachbarn in der Ferne routet. Am besten wird der
Vorteil dieser Herangehensweise vielleicht deutlich wenn wir ltere Anstze
fr Routing in MANETs zum Vergleich heranziehen - das sogenannte Source
Routing und das Link State Routing.

Beim Source Routing 'denkt' ein Knoten Y im Meshnetzwerk, dass der beste Weg
Daten an Knoten D zu schicken ber die Knoten Q, S, H, W, F, C fhrt (in
dieser Reihenfolge). Y gibt also an Q den Auftrag die Daten an S zu
schicken. S erhlt von Y den Auftrag, die Daten an H zu schicken und so
weiter. Y gibt also den Weg zu D vor.

Einer der lteren Entwrfe fr MANET Routing ist DSR - Dynamic Source
Routing. DSR enthlt einen Algorithmus der Sourcerouten ermitteln und bei
Bedarf erneuern soll, wenn diese nicht mehr existieren. Der Haken bei der
Sache ist, dass MANETs hochgradig dynamischen Vernderungen unterworfen
sind. In einem MANET gehen nicht nur Datenpakete der Nutzlast verloren,
sondern auch Datenpakete die ber die Struktur des Netzes Auskunft geben. Je
weiter das Ziel von Y entfernt ist desto unwahrscheinlicher ist es, dass die
Informationen die Y ber die entfernte Netztopologie hat, stimmig sind. So
kann W keinen Link mehr zu F und H haben - die Kette die sich Y ausgedacht
hat ist schon lange zusammengebrochen, und Y erhlt die Meldung "Ziel nicht
erreichbar" und fngt immer wieder an einen neuen Pfad zu suchen.

Auch das Link-State-Routing (LSR) versucht Routen zu berechnen die fr das
gesamte Netz gltig sind. Glcklicherweise bedeutet das aber kein
Source-Routing. Stattdessen berechnet ein Knoten mit einem
Link-State-Routing-Algorithmus welchen Pfad seine Pakete nehmen mssten und
gibt sie vertrauensvoll dem nchsten Nachbarn, der auf der gedachten Route
an nchster Stelle steht. Dieser Nachbarknoten hat selbstndig einen Pfad
berechnet und gibt das Paket wiederum dem nchsten Nachbarn auf dem besten
errechneten Weg zum Ziel. Jeder Netzwerkknoten trifft selbstndig die
Entscheidung wie das Paket weitergereicht wird. Das ist ganz gut so, denn je
nher die Knoten dem Ziel sind, desto besser wissen sie ber den Zustand der
Route Bescheid. Letztendlich kann aber ein Knoten nur die Entscheidung des
nchsten Sprunges treffen. Um die Entscheidung des nchsten Sprungs zum Ziel
zu treffen betreibt LSR jedoch einen enormen Aufwand - es erfasst die
Topologieinformationen des gesamten Netzes. Zu allen Knoten im Netz erfasst
LSR die Informationen ber die vorhandenen Nachbarn und berechnet smtliche
Routen. Auch hier ist aber die Sicht notwendigerweise unscharf. Die
Unmglichkeit die Informationen ber die gesamte Netztopologie synchron zu
halten kann zu Routing Loops fhren, gerade weil LSR sich ein so umfassendes
Bild des Netzes zu machen versucht. Es kann vorkommen das benachbarte Knoten
sich ber den Pfad derartig uneins sind, dass zwei oder mehrere Knoten sich ein
Paket gegenseitig hin- und herschicken bis das Paket ungltig wird. Das
geschieht so lange bis sich ihre Routingtabellen schliesslich
synchronisieren. Macht man einen Ping zum Ziel erhlt man in der
Zwischenzeit die Rckmeldung, dass die TTL abgelaufen ist.

Der bekannteste Vertreter von LSR ist OLSR von olsr.org. Inzwischen ist OLSR
mit ETX-Erweiterung und Fisheye-Algorithmus sehr brauchbar geworden.
Abgesehen von einigen wenigen Bugs in der Implementierung und dem strenden
Effekt, dass es sehr oft den Internetgateway wechselt, was bei geNATteten
Internetgateways zu Verbindungsabbrchen fhrt. Letztendlich fehlen fr OLSR
nur noch ein IP-Tunnel-Plugin um sich den Gateway aussuchen zu knnen und
ein paar Bugfixes.

Schlussendlich strt aber der hohe Rechenaufwand von OLSRD in den CPUs der
kleinen Meshrouter im Berliner Freifunk-Netz. Das Freifunk-MANET hat die
Grenzen des Wachstums mit dem proaktiven OLSR erreicht. Zeit also fr etwas
einfacheres und besseres: B.A.T.M.A.N.

Von Antoine Saint Exupery (Autor des 'Kleinen Prinz') stammt dieser Satz:

Alles menschliche Tun geht den Weg vom Primitiven ber das Komplizierte zum
Einfachen. 


B.A.T.M.A.N. ist eine Gruppe von Regeln an die sich ein Router halten muss.

######################################
# Einfachstes B.A.T.M.A.N.-Verfahren #
#	     		      	     #
# 	   B.A.T.M.A.N.-I	     #
######################################


B.A.T.M.A.N. verwendet Port 1966 UDP. Dieser Port muss fr eingehende und ausgehende
Nachrichten offen sein, also darf eine Firewall B.A.T.M.A.N. nicht blockieren.

1.) Broadcasts

B.A.T.M.A.N. findet seine Nachbarn und entfernte Netzwerkknoten im Mesh (im
folgenden Nodes genannt) durch Broadcasts die weitergereicht werden. In
einem Broadcast steht die Adresse des Erzeugers drin (im folgenden Orginator
genannt). Weiterhin enthlt der Broadcast einen TTL-Wert und eine
Sequenz-Nummer. TTL steht fr Time-To-Live. Die TTL ist eine Zahl die
jedesmal um den Wert 1 reduziert wird, wenn ein Datenpaket weitergereicht
wird. Wird der TTL-Wert 0 ist das Paket zu lange (blicherweise auf
Irrwegen) unterwegs und wird verworfen. Anhand der TTL kann man daher auch
sehen wie oft ein Paket schon weitergereicht wurde. Besonders wichtig fr
B.A.T.M.A.N. ist die Sequenznummer. Das sind die laufenden Nummern der
Orginator-Nachrichten die ein Orginator aussendet.

Broadcasts werden in einem festgelegten Intervall von jedem Node als
Orginator ausgesendet und von allen anderen Nodes als Relais weitergereicht
(wenn bestimmte Bedingungen erfllt sind), so dass sie immer weiter durch
das Mesh reisen oder unterwegs irgendwann verloren gehen. Geht ein Broadcast
verloren wird nicht nach dem Verbleib oder einer Neubetragung gefragt -
anders als bei TCP-Daten, wo bis zu 7 mal die bertragung wiederholt wird,
wenn eine Besttigung des Empfngers ausbleibt.

Nehmen wir an wir haben eine Kette von Mesh-Knoten:

Node A <--> Node B <--> Node C <--> Node D

Nehmen wir weiterhin an, jeder Node kann nur seine unmittelbaren Nachbarn
sehen. Nun sendet Node A eine Orginator-Nachricht. Node B sieht diese und
wiederholt sie. 

Dadurch sieht Node C: Nachricht von Node A, weitergeleitet von Node B,
Sequenz Nummer 0, TTL 49

Node C wiederholt die Nachricht. Also sieht Node D: Nachricht von Node A,
weitergeleitet von Node C, Sequenz Nummer 0, TTL 48

Nun weiss Node D:

Es existiert Node A, den erreiche Ich ber zwei Zwischenstationen. Um Node A
zu erreichen mssen die Pakete an Node C gesendet werden. Mehr muss Node D
gar nicht wissen.

Das erste Beispiel ist natrlich sehr einfach gehalten. Was geschieht nun
wenn das Netz so aussieht:


       * ---- Node B ---- Node C ---- *
       |			      |
Node A + ------------ Node D -------- + Node F
       | 		 	      |
       * ------------ Node E -------- *

Die Grafik soll verdeutlichen, dass Node A die Nodes B, D, E als Nachbarn
hat. Ebenso hat Node F die Nodes C, D, E als Nachbarn. Was macht BATMAN nun?

Node A schickt eine Orginator-Meldung mit Sequenznummer 0. B, C, D und E
wiederholen sie. Betrachten Wir den Werdegang der Orginator Nachrichten von
Node A.

Node F sieht die Orginator-Nachricht Sequenznummer 0 von Node A ber Node D
zuerst und merkt sich, dass er A ber D gesehen hat. Node F ignoriert die
Orginator-Nachricht mit Sequenznummer 0 von Node A, die von Node B
wiederholt wird und ber Node C eintrifft, da sie spter ankommt. Die
Nachricht von Node E geht unterwegs verloren oder kommt ebenfalls zu spt.

Auf dem besten Pfad zwischen Node A und F kommen die Pakete hufiger und
meist auch schneller an. Node F merkt sich nun, von wem er die
Orginatorpakete von Node A am hufigsten erhlt. Schnelligkeit ist hier
entscheidend weil Node F sich immer nur fr das am schnellsten ankommende
Paket mit bereinstimmender Orginatoradresse und Sequenznummer interessiert.
Will Node F nun mit Node A kommunizieren benutzt er den Nachbarn mit der besten
Statistik als Router.

Herrscht Gleichstand an empfangenen Paketen von zwei oder mehreren Nachbarn
entscheidet die grte TTL (geringster Hopcount). Herrscht Gleichstand auch
bei der TTL entscheidet wer das letzte eingegangene Orginator-Paket zum
Zielknoten gebroadcastet hat.


#######################################
# Verbessertes B.A.T.M.A.N.-Verfahren #
#				      #
#	   B.A.T.M.A.N.-II	      #
#######################################



Das einfachste B.A.T.M.A.N.-Verfahren hat einen Haken: Es bercksichtigt nicht,
dass Verbindungen unsymmetrisch sein knnen. Die Annahme ist, dass auf dem
Pfad auf dem die Pakete von Node A den Node F erreichen auch die beste
bertragung in die Gegenrichtung mglich ist. Das ist im Fall von
unsymmetrischen Links ein Trugschluss. Unsymmetrische Links treten auf wenn
ein Router zwar einen anderen hrt, aber umgekehrt nicht. Es kann sein, dass
eine perfekte bertragung mglich ist - aber nur in eine Richtung. Das
einfache B.A.T.M.A.N.-Verfahren wrde hier komplett scheitern. Es muss also
geprft werden ob Links symmetrisch sind und nur Informationen die von
diesen kommen drfen ausgewertet und verwendet werden.

Dafr gibt es ein einfaches Set von Regeln:

1.) Symmetrieprfung

Nachbarn, die unsere eigenen Orginatornachrichten mit TTLMAX - 1 wiederholen
haben Uns gesehen und wir haben sie gesehen. Nur Nachbarn, die unsere
eigenen Orginatorpakete (aus der Sicht des Nodes) mit TTLMAX-1 wiederholen,
werden bercksichtigt. Bekommen wir in einem bestimmten Zeitraum unsere
Orginatornachrichten nicht von unseren Nachbarn als Wiederholung zu sehen
ist der Link unsymmetrisch.

2.) Broadcasts von Nodes zu denen wir keinen symmetrischen Link haben,
werden ignoriert und nicht weitergeleitet.  Wir ignorieren sie so lange bis
die Symmetrieprfung wieder erfolgreich ist.


3.) Ausnahme

Broadcasts von Orginatoren aus der direkten Nachbarschaft werden immer
wiederholt (Broadcasts mit TTLMAX), auch dann wenn sie (noch) nicht
symmetrische Nachbarn sind. In diesem Fall ist ein Unsymmetrieflag in dem
wiederholten Broadcast enthalten - damit der Orginator weiss, dass wir
Ihn gesehen haben. Andere Knoten wissen, dass sie den Broadcast den wir
wiederholen ignorieren knnen. Die wiederholte Orginatornachricht die mit
dem Unsymmetrieflag gesendet wird geht nur den Orginator was an, alle
anderen Knoten ignorieren sie.

Diese Ausnahme ist notwendig um ein Henne-und-Ei Problem zu verhindern.
Ansonsten wrden wir die Orginatornachrichten unserer direkten Nachbarn
stets ignorieren - weil sie unsymmetrisch sind und bleiben. Und sie wrden
uns ignorieren... Andere Nodes drfen indirekt empfangene Orginatormeldungen
mit TTLMAX -1 nicht wiederholen wenn der Unsymmetrieflag gesetzt wird -
sonst fllt B.A.T.M.A.N. doch noch auf Broadcasts rein, die von
unsymmetrischen Links stammen.


Happy testing!

Elektra, Thomas, Axel, Felix 