-
1 Einleitung
-
Die
Berechnung einer Route in einem Netzwerk, welches aus beliebig vielen
Knoten und gewichteten Kanten besteht und dabei beliebig vermascht
ist, basiert heutzutage im Wesentlichen auf dem Dijkstra-Routing-Algorithmus.
Die bekanntesten Anwendungen: Internet-Router, Routenplaner und
GPS-basierte Navigation von Kraftfahrzeugen auf dem Straßennetz.
Bei diesem Algorithmus wird, bildlich gesprochen, eine Teilmenge
der Netzkanten in Pfeile verwandelt, die alle auf einen bestimmten
Knoten s (wie source) ausgerichtet sind, insofern zu jedem Netzknoten
genau ein Vorgängerknoten
näher bei
s bestimmt wird, derart, dass diese den Dijkstra-kürzest-Wegebaum
(Dijkstra-shortest-path-tree) ergeben. Der Knoten s kann sich davon
genau EINE kürzeste
Route hin zu jeglichem Zielknoten d (wie destination), respektive
genau EINE erste Kante/ersten Nachbarknoten auf dieser Route herleiten.
Literatur: Google-Suche nach „Dijkstra", dann besonders
empfohlen: Algorithmus von Dijkstra – Wikipedia.
-
Bei
der hierin behandelten Thematik geht es um die Bestimmung und Nutzung
potentiell VIELER Routen (sprich um multipath) zwischen einem aktuellen
Knoten und einem Zielknoten, d.h. wie ein x-beliebiger Knoten ganz
AUTARK all seine hierfür
tauglichen Weiterleitungsknoten bestimmt (von denen er gleichfalls überwiegend
völlig
autark einen auswählen
kann), derart, dass sich insgesamt konsistente Routen ergeben, und
zwar sowohl beste als auch Umweg machende aber dennoch schleifenfreie
Routen, ja sogar (sinnvolle!) Schleifen enthaltende Routen, etwa
um aus einer unverhofften Sackgasse wieder herauszukommen. Literatur: Google-Suche
nach Multipath. Es existieren zahlreiche wissenschaftliche Dokumente
und auch Algorithmen, welche jedoch alle den Dijkstra-Routing-Algorithmus nur wiederholt
aufrufen, dabei die Kanten der zuvor gefundenen Routen komplett
oder teilweise vom zugrundeliegenden Netz ausblenden, um ggf. weitere
Routen zu bekommen.
-
Aus
dem Stand der Technik sind insbesondere auch bekannt die Druckschrift
US 2002/0067720 A1, welche ein Verfahren zum Routing in Netzwerken
beschreibt, basierend auf Entfernungsinformationen, um schleifenfreie
Mehrfach-Pfade zu erhalten, die nicht notwendigerweise identische
Kosten aufweisen.
-
Die
Druckschrift US 2005/0088965 A1 befasst sich mit einem Verfahren
zum Auffinden schleifenfreier Alternativ-Pfade, die im Falle des
Ausfalls von Kanten oder Knoten eines Netzwerks für die Verkehrslenkung zum
Tragen kommen, Druckschrift
US
5,115,495 A schließlich
befasst sich mit einem Routingverfahren, welches auf Entfernungsinformationen
zwischen den Knoten des Netzwerks und einem Zielknoten basiert und dementsprechende
Primär-
und Alternativ-Pfade ausweist, wobei die mit einem Knoten verbundenen
Kanten in Bezug auf den Zielknoten als baumaufwärts, horizontal oder baumabwärts gerichtet
bezeichnet werden.
-
Vom
Kaliber des Dijkstra-Verfahrens selbst ist sehr wohl das Nachfolgende:
Während ein
Internet-Router mit dem Dijkstra-Algorithmus bezüglich eines Zielknotens für genau
EINE angrenzende Kante eine hierfür relevante Information erhält, bekommt
er dank der Verfahren speziell nach Absatz 2 und 3 für ALLE angrenzenden
Kanten eine diesbezüglich
relevante Information, ja sogar für ALLE Kanten des ganzen Netzes.
Statt minimalster Orientierung wird die maximalste Orientierung
ermöglicht.
Dabei geschieht dies nicht nur für
Multipath-Anwendungen in der Vorwärtsrichtung, sondern auch für Multipath-Anwendungen
in der Rückwärtsrichtung.
-
2 Multipath-Richtungsfeld
-
Es
wird ein Verfahren zur Erzeugung eines, wie an dieser Stelle erstmals
bezeichnet, Multipath-Richtungsfeldes MPRF[d] vorgestellt. Hierbeiwerden
sämtliche
Kanten eines Netzes zu Pfeile konvertiert, welche allesamt auf einen
einzigen vorgegebenen Netzknoten d ausgerichtet sind, das heißt, dass,
ausgehend von jeglichem Netzknoten, jede gerichtete Pfeilfolge zum
Ausrichtungsknoten d hinführt,
und zwar schleifenfrei und derart, dass sie erst dort beim Knoten
d nicht mehr fortgesetzt werden kann.
-
Anmerkung zum Namen:
-
„Multipath" ist ein feststehender
Begriff. Das gleiche gilt für „Richtungsfeld" auf dem Gebiet der
Differentialgleichungen (Englisch: „direction field"). Es ist daher nicht
unwahrscheinlich, dass sich irgendwann einmal der Begriff „multipath
direction field MPDF[d]" durchsetzen
wird.
-
Verfahren [Hummel-1]:
Multipath-Richtungsfeld MPRF[d]
-
Dieses
Verfahren konvertiert alle (gewichteten) Kanten eines Netzes in
ein Multipath-Richtungsfeld MPRF[d].
-
Dazu
wird zunächst
der Dijkstra-Routing-Algorithmus mit dem vorgegebenen Knoten d als
Ausgangsknoten (source) bzw. Baumwurzelknoten (root) durchgeführt. Damit
wird bekanntlich während
einer Iterationsschleife für
jeden Netzknoten k ein sogenannter Vorgängerknoten j ermittelt, über welchen
eine kürzeste
Route hin zum Knoten d führt
(Initialisierend wird dem Knoten d als Vorgängerknoten d selbst zugeordnet
sowie die Distanz 0 zu sich selbst). Zugleich wird damit die Distanz
D zwischen k und d, sprich D (k; d), festgelegt: D (k; d) = D (j;
d) + Gewichtswert der Kante zwischen k und j. Damit ist die Kante
zwischen k und dessen Vorgängerknoten
j zu einem Pfeil mit Pfeilspitze beim Vorgängerknoten j konvertiert. Wann
immer während
dieses Iterationsprozesses mehrere gleichwertige Kandidaten-Knoten
auftreten, von denen einer ausgewählt werden muss, um für ihn als
nächsten
den diesbezüglichen
Vorgängerknoten
festzulegen, so möge – falls
für die
jeweilige Anwendung von Nöten – eine wohlbestimmte
und allen Netzknoten geläufige
Entscheidungsregel (tie-break rule) hierzu herangezogen werden.
Beispiel: Man selektiere unter den gleichwertigen Kandidatenknoten
jenen mit kleinster Adresse/kleinster Identifikationsnummer aus.
-
Die
Zuordnung eines Vorgängerknotens
j zu jeweils einem Knoten k geschieht in einer sich wohl ergebenden
Sequenz SEQ, beginnend beim Knoten d selbst, und endend bei einem
Netzknoten, welcher am weitesten von d entfernt ist.
-
Die
Erfindung beginnt damit, dass man während der Iteration des Dijkstra-Routing-Algorithmus sich alle
Knoten k speichert, und zwar in der Reihenfolge SEQ, in welcher
diesen ein Vorgängerknoten
j zugeteilt wurde. Außerdem
werde jedem während
dieser Iteration erzeugtem Pfeil eine spezielle Kennzeichnung zugeordnet,
etwa symbolisch die blaue Farbe, die besagt, dass es sich um einen
Dijkstra-best-hop
handelt.
-
Im
Anschluß an
die Iteration des Dijkstra-Routing-Algorithmus wird erfindungsgemäß in der
Reihenfolge SEQ, beginnend bei d, von Netzknoten zu Netzknoten gegangen,
etwa zum Netzknoten j, und es werden dabei sämtliche Kanten, welche an Knoten
j angrenzen und welche bis dahin noch nicht zu Pfeile konvertiert worden
sind, zu Pfeile konvertiert und zwar mit Pfeilspitze beim aktuellen
Knoten j. Falls für
einen hierbei erzeugten Pfeil, beginnend beim Knoten k und endend
beim Knoten j, gilt, dass Distanz D (k; d) = Distanz D (j; d) +
Gewichtungswert der Kante zwischen k und j, so werde dem erzeugten
Pfeil als Kennzeichnung die Farbe Rot zugeteilt. Andernfalls wird,
sofern D (j; d) < D
(k; d), dem erzeugten Pfeile die Farbe Grün als Kennzeichnung zugeteilt.
Andernfalls, d.h. weil D (j; d) = D (k; d), wird dem erzeugten Pfeil
die Farbe Gelb als Kennzeichnung zugeteilt.
-
Damit
sind sämtliche
Netzkanten zu Pfeile in vier verschiedenen Farben konvertiert, die
allesamt auf Knoten d ausgerichtet sind, sprich das Multipath-Richtungsfeld
MPRF[d] ist fertig.
-
Prinzipiell
haben wir bzgl. eines jedweden Netzknotens x genau einen blauen
wegführenden
Pfeil, sowie null, einen, oder mehrere wegführende rote Pfeile, sowie null,
einen, oder mehrere wegführende
grüne Pfeile,
sowie null, einen, oder mehrere wegführende gelbe Pfeile, sowie
null, einen oder mehrere herbeiführende
gelbe Pfeile, sowie null, einen oder mehrere herbeiführende grüne Pfeile,
sowie null, einen oder mehrere herbeiführende rote Pfeile, sowie null,
einen oder mehrere herbeiführende
blaue Pfeile. Dementsprechend lassen sich alle Nachbarknoten y des
Knotens x im Multipath-Richtungsfeld mit Ausrichtungsknoten d klassifizieren.
D.h. jeglicher Nachbarknoten y von x gehört einer der folgenden 8 MPRF[d]-Klassen
des Knotens x an:
MPRF[d]-Klasse (1) DIJKSTRA_BESTHOP (x; d):
y
ist Pfeilspitze des stets genau einen von x wegführenden blauen Pfeils.
y
wird nachfolgend auch mit Dijkstra-best-hop bzgl. d, kurz DBHx;d, bezeichnet.
MPRF[d]-Klasse (2)
CLOSEST (x; d):
y ist Pfeilspitze eines von x wegführenden
roten Pfeils.
Es gilt D (DBHx;d; d)
= D (y; d) < D
(x; d):
MPRF[d]-Klasse (3) CLOSER (x; d):
y ist Pfeilspitze
eines von x wegführenden
grünen
Pfeils
Es gilt: D (DBHx;d; d) < D (y; d) < D (x; d):
MPRF[d]-Klasse
(4) EQUIDISTANT_OFF (x; d):
y ist Pfeilspitze eines von x wegführenden
gelben Pfeils
Es gilt: D (y; d) = D (x; d)
MPRF[d]-Klasse
(5) EQUIDISTANT_TO (x; d):
y ist Pfeilanfang eines zu x herbeiführenden
gelben Pfeils, d.h. x ist Element von EQUIDISTANT_OFF (y; d).
MPRF[d]-Klasse
(6) CLOSER_INV (x; d)://INV wie invers
y ist Pfeilanfang eines
zu x herbeiführenden
grünen
Pfeils.
D.h. x ist Element der Klasse CLOSER (y; d)
MPRF[d]-Klasse
(7) CLOSEST_INV (x; d):
y ist Pfeilanfang eines zu x herbeiführenden
roten Pfeils,
d.h. x ist Element der Klasse CLOSEST (y; d)
MPRF[d]-Klasse
(8) DIJKSTRA_BESTHOP_INV (x; d):
y ist Pfeilanfang eines zu
x herbeiführenden
blauen Pfeils
d.h. x ist das einzige Element der Klasse DIJKSTRA_BESTHOP
(y; d)
Die MPRF[d]-Klassen (1) bis (4) mögen die MPRF[d]-Oberklasse
TOWARDS_DESTINATION
(x; d) bilden.
Die MPRF[d]-Klassen (5) bis (8) mögen die
MPRF[d]-Oberklasse
AWAY_FROM_DESTINATION (x; d) bilden.
-
Ein
Netzknoten, der das MPRF[d] erzeugt, „sieht" alle Pfeile bzw. alle MPRF[d]-Klassen (1) bis (8)
für alle
Netzknoten x, insbesondere natürlich
alle zu ihm selbst hinführenden
Pfeile sowie alle von ihm selbst wegführenden Pfeile.
-
Naturgemäß sind für den Netzknoten
x = d die Klassen (1) bis (5) leer.
-
Falls
die Gewichtung aller Kanten einheitlich ist, z.B. falls alle Kanten
die Gewichtung 1 haben, so treten die MPRF[d]-Klassen (3) und (6)
grundsätzlich
NICHT auf!
-
Ein
Ausführungsbeispiel
des erfindungsgemäßen Verfahrens
wird nachfolgend anhand der Zeichnung näher erläutert. Es zeigt dabei:
-
Zeichnung
1 ein Multipath-Richtungsfeld MPRF[d] eines Netzwerks mit Knoten
und Kanten. Jeder Knoten kann Verfahren [Hummel-1] mit Zielknoten
d durchführen
und erhält
dasselbe Multipath-Richtungsfeld MPRF[d] gemäß Zeichnung 1.
-
Verwendete Entscheider-Regel
(tie-break-rule): Lexigraphische Reihenfolge
-
Die
Kante q-r hat die Gewichtung 3. Die Kante u-v hat die Gewichtung
2. Alle übrigen
Kanten haben die Gewichtung 1.
Blauer Pfeil von p nach q:
d.h.
q ist Element der Klasse DIJKSTRA_BESTHOP (p; d)
p ist Element
der Klasse DIJKSTRA_BESTHOP_INV (q; d)
Weitere blaue Pfeile:
q→r, r→d, s→v, v→r, w→d, t→u, u→v, x→y, y→v, z→y.
Roter
Pfeil von t nach x:
d.h. x ist Element der Klasse CLOSEST (t;
d)
t ist Element der Klasse CLOSEST_INV (x; d)
Weiterer
roter Pfeil: v→w
Grüner Pfeil
von q nach s:
d.h. s ist Element der Klasse CLOSER (q; d)
q
ist Element der Klasse CLOSER_INV (s; d)
Weiterer grüner Pfeil:
u→y
Gelber
Pfeil von t nach p:
d.h. p ist Element der Klasse EQUIDISTANT_OFF
(t; d)
t ist Element der Klasse EQUIDISTANT_TO (p; d)
Weitere
gelbe Pfeile: u→q,
x→u
-
All
diese Klassen sind hilfreich bei der Beschreibung aller nachfolgenden
Anwendungsverfahren. Um aber die Resultate des MPRF[d] mit minimalsten Speicheraufwand
festzuhalten, genügt
es, Knoten d zu speichern sowie pro Netzkante drei Bits wie folgt:
- (1): Welcher Begrenzungsknoten der Kante ist
Pfeilspitze und welcher ist Pfeilausgangspunkt. Ein einziges Bit
speichere diese Info, etwa so:
„1": Begrenzungsknoten mit der größeren Adresse/Identifikationsnummer
ist Pfeilspitze. „0": Begrenzungsknoten
mit der kleineren Adresse(Identifikationsnummer ist Pfeilspitze.
- (2): Vier verschiedene Kantenfarben (2-Bit-Information):
00
= Farbe Blau für
Dijkstra_BESTHOP
01 = Farbe Rot für CLOSEST
10 = Farbe Grün für CLOSER
11
= Farbe Gelb für
EQUIDISTANT
-
Darüber hinaus
finden sich nachfolgend auch Anwendungen, bei welchen die Knotenfolge
SEQ bezüglich
MPRF[d] von Interesse ist, sprich auch nachdem dieses Multipath-Richtungsfeld
komplett erstellt worden ist. D.h. auch die Knotenfolge SEQ (beginnend
mit d und endend mit einem weitest von d entfernten Knoten), welche
sich beim Dijkstra-Routing-Algorithmus ergibt, ist ggf. als Teil
des Multipath-Richtungsfeldes MPRF[d]
abzuspeichern.
-
Anmerkung:
Geschuldet dem integralen Dijkstra-Routing-Algorithmus, existiert
für jeden
Netzknoten x die Information D (x; d) der kürzesten Distanz zwischen x
und dem Ausrichtungsknoten d des MPRF[d].
-
3 Multipath Transport
in Vorwärtsrichtung
-
Es
geht darum, für
den Transport eines Objekts, z.B. eines Internet-Datenpakets, vielfache
Routen hin zu einem Zielknoten zu ermöglichen und diesen Transport
entsprechend durchzuführen.
-
Während speziell
beim „connection-less" Internet-Routing
jeder Router einen Dijkstra-kürzest-Wegebaum
mit sich selbst als Baumwurzelknoten ermittelt und davon für jeglichen
Zielknoten seine EINE „Dijkstra-best-hop" Kante ableitet,
erzeuge hier jeder Netzknoten x bezüglich eines jeglichen Zielknotens
d das diesbezügliche
Multipath-Richtungsfeld MPRF[d] und erkennt darin unmittelbar die
von x selbst wegführenden Pfeile
sowie die auf x selbst zeigenden Pfeile, bzw. die MPRF[d]-Klassen (1) bis (8)
bezogen auf x selbst. Indem jeder Knoten das für Zielknoten d bestimmte Weiterleitungsobjekt
zu irgendeinem Nachbarknoten seiner MPRF[d]-Klassen (1) und (2) weiterleitet, ergeben
sich im allgemeinen mehrere gleichkürzeste Routen. Indem jeder
Knoten das Weiterleitungsobjekt hierfür zu irgend welchem Nachbarknoten
aus seinen MPRF[d]-Klassen (1) bis (4) sendet, ergeben sich dadurch
kürzeste
als auch längere
Routen, die aber alle schleifenfrei sind. Indem jeder Knoten das
Weiterleitungsobjekt auch noch an Nachbarknoten der MPRF[d]-Klasse
(5) EQUIDISTANT_TO (x; d) sendet, besteht die Gefahr dass dieses
u.U. in einer Endlosschleife von Knoten zu Knoten geleitet wird,
ohne die Distanz zum Zielknoten d zu verändern. Diese Gefahr existiert
genau dann nicht, wenn Knoten x zusammen mit weiteren Knoten seiner
Umgebung, welche von d gleichweit entfernt sind, ein maschenloses
Teilnetz bilden, und wenn man unterstellt, dass kein Knoten das
Weiterleitungsobjekt so ohne weiteres an jenen Knoten weiterleitet,
von dem er es unmittelbar erhalten hat. Dieses Teilnetz äquidistanter Knoten
ist genau dann maschenlos, wenn es aus N Knoten und L = N – 1 Kanten
besteht. Der Knoten x möge dies
mit Hilfe des folgenden Algorithmus feststellen:
-
[Hummel-2] – Bestimmung
der Größe eines äquidistanten
Teilnetzes:
-
Der
Algorithmus [Hummel-2] berechnet für jeglichen Eingabeparameter-Knoten
x die Größe des zusammenhängenden
Teilnetzes von äquidistanten
Knoten bezüglich
des Zielknotens d, zu welchem auch x gehört, d.h. dessen Anzahl von
Knoten N sowie dessen Anzahl von Kanten L. Falls sich herausstellt,
dass L = N – 1,
so ist dieses Teilnetz maschenlos, sonst aber maschenbehaftet.
gv_number_of_equidistant_nodes
= 0;//gv bedeutet global variable
gv_number_of_equidistant
links = 0;
Markiere alle Kanten der gesamten Netzes mit 0.
Markiere
alle Knoten des gesamten Netzes mit 0.
recursive_equidistant_subnetwork
(node x);//Aufruf dieses Unterprogramms
-
Die
Variable gv_number_of_equidistant_nodes enthält nun den Wert für N und gv_number_of_equidistant_links
enthält
nun den Wert für
L.
-
Definition
des rekursiven Unterprogramms recursive_equidistant_subnetwork: recursive_equidistant_subnetwork
(node_param);
-
Falls
L = N – 1,
so kommen auch Nachbarknoten aus MPRF[d]-Klasse (5) EQUIDISTANT_TO
(x; d) für
die Weiterleitung in Frage, und zwar ohne die geringste Gefahr einer
Schleifenbildung.
-
Falls
aber L>N – 1 so lässt sich
der Gefahr einer Endlos-Schleife mit Hilfe der folgenden Aktionsanweisung
AA1 begegnen:
Ein Knoten x, welcher zunächst keine zu befolgende Aktionsanweisung
erhalten hat, und der das Weiterleitungsobjekt zu einem Nachbarknoten
aus EQUIDISTANT_TO (x; d) oder EQUIDISTANT_OFF (x; d) senden möchte, tue
dies, wobei er dem Weiterleitungsobjekt eine Aktionsanweisung AA1
mit auf den Weg gibt, die dafür
sorgt, dass maximal N – 1
mal hintereinander ein äquidistanter
Nachbarknoten selektiert wird. Dies mag Schleifen nicht restlos
ausschließen,
verhindert aber Schleifen, die wirklich problematisch sind (Endlosschleifen).
-
Aktionsanweisung AA1: „Limit
forwarding to eguidistant nodes":
-
Am
Beispiel der Beförderung
von Internet-Datenpakete sei so eine Aktionsanweisung dargestellt:
Im Internet-Protocol-Header werde ein zu standardisierender optionaler
Parameter „Limit
forwarding to equidistant nodes" gesetzt,
sowie ein anfänglicher „Time-to-Live" Wert (im TTL-Feld)
auf N – 1
gesetzt, sobald ein Knoten das Datenpaket zu einem äquidistanten
Nachbarknoten sendet und der optionale Parameter zuvor noch nicht
gesetzt war. Dieser TTL-Werte werde von jedem empfangenden gleichfalls äquidistanten
Nachfolgerknoten um 1 dekrementiert. Sobald er dadurch den Wert
0 erreicht, darf das Datenpaket beim nächsten Hops zu keinem weiteren äquidistanten
Knoten weitergeleitet werden. Auch ist der optionale Parameter „Limit forwarding
to equidistant nodes" hierbei
zu löschen.
Dieser ist gleichfalls zu löschen
wenn das Datenpaket schon vorher zu einem nicht-äquidistanten Knoten weitergeleitet
wird. Dies gilt selbstverständlich,
wenn es dabei zu einem Nachbarknoten aus den MPRF[d]-Klassen (1)–(3) weitergeleitet
werden kann. Dies gilt aber auch dann, wenn es mangels Alternativen
zu einem Nachbarknoten aus den MPRF[d]-Klassen (6)–(8) weitergeleitet werden
muss.
-
Kompatibilität mit herkömmlichen
Router-Knoten, welche die Aktionsanweisung AA1 nicht verstehen, sprich
die Objektweiterleitung zu ihrem Dijkstra-best-hop Nachbarknoten
tätigen,
aber die AA1-Anweisung dabei nicht entfernen: Der erste nachfolgende,
die AA1 Aktionsanweisung verstehende Knoten x kann und möge erkennen,
daß er
das Weiterleitungsobjekt von einem Nachbar y aus DIJKSTRA_BESTHOP_INV
(x; d) empfangen hat, und nicht von einem Nachbar aus EQUIDISTANT_TO
(x; d) oder EQUIDISTANT_OFF (x; d), und sollte deshalb die AA1-Anweisung löschen. Noch
besser ist es – mit
Hinblick auf die herkömmliche
Nutzung des Time-To-Live Parameters – die AA1-Aktionsanweisung
genau dann nicht zu senden/weiterzuleiten, wenn der jeweilige Knoten
weiß,
dass der Nachfolgeknoten diese nicht versteht.
-
In
der Phase, in welcher [Hummel-1] und [Hummel-2] durchgeführt werden,
werde die vorliegende Situation in Form eines Aktions-Indikators
A gespeichert bzw. festgehalten, welcher den beiden MPRF[d]-Klassen
EQUIDISTANT_TO (x; d) und EQUIDISTANT_OFF (x; d) gleichermaßen zugeordnet
werden kann. Etwa:
A = 0 besagt „maschenloses äqudistantes
Teilnetz"
A
= N – 1
besagt „maschenhaftes äquidistantes
Teilnetz" und gibt
zugleich den anfänglichen
TTL-Wert an.
-
Als
nächstes
betrachten wir die Nachbarknoten y aus MPRF[d]-Klasse (6) CLOSER_INV
(x; d):
Bei einer derartigen Selektion eines Nachbarknotens
y entfernen wir uns wieder vom Zielknoten d und müssen deshalb
erzwingen, dass Nachbarknoten y unbedingt einen Weiterleitungsknoten
z aus DIJKSTRA_BESTHOP (y; d) oder CLOSEST (y; d) selektiert (um
den momentanen Hops weiter weg von d sogleich wieder mehr als auszugleichen).
Indem Knoten y erkennt, dass es das Weiterleitungsobjekt von einem
Nachbarknoten aus seiner Klasse CLOSER (y; d) erhalten hat, möge er sich
dazu veranlasst sehen, ohne dass es hierfür einer explizit mitgeteilten
Aktionsanweisung bedarf. Man beachte: Der hierbei von y selektierte Knoten
z kann unmöglich
gleich x sein denn es gilt: D (z; d) < D (x; d). Sollte y nicht in der Lage
sein, einen Knoten z derart zu selektieren, so ist das Weiterleitungsobjekt
zu löschen
sofern dies wie etwa bei Internet-Datenpaketen vertretbar ist.
-
Als
nächstes
betrachten wir die Nachbarknoten y aus MPRF[d]-Klasse (7) CLOSEST_INV
(x; d):
Bei einer derartigen Selektion eines Nachbarknotens
y entfernen wir uns wieder vom Zielknoten d und müssen deshalb
erzwingen, dass y einen Weiterleitungsknoten z ungleich x aus DIJKSTRA_BESTHOP
(y; d) oder CLOSEST (y; d) selektiert, und dass daraufhin z einen
Weiterleitungsknoten aus DIJKSTRA_BESTHOP (z; d) oder CLOSEST (z;
d) oder CLOSER (z; d) selektiert. Knoten y möge sich veranlasst sehen, so
zu handeln, indem er selber merkt, dass er das Weiterleitungsobjekt
von einem Nachbarn aus CLOSEST (y; d) empfangen hat (Übrigens
kann y gleichermaßen
vorgehen, falls es das Weiterleitungsobjekt von einem Nachbarknoten aus
seiner Klasse DIJKSTRA_BESTHOP (y; d) erhält). D.h. Knoten x braucht überhaupt
keine Aktionsanweisung für
Knoten y mitliefern. Man beachte: Es ist gewährleistet, dass es für y mindestens
einen Weiterleitungsknoten z ungleich x gibt, der infrage kommt,
nämlich
das Element aus DIJKSTRA_BESTHOP (y; d). Knoten y muss aber auch
den von ihm selektierten Knoten z veranlassen, seinerseits einen
Weiterleitungsknoten aus DIJKSTRA_BESTHOP (z; d) oder CLOSEST (z;
d) oder CLOSER (z; d) zu selektieren. Dazu gibt er dem Weiterleitungsobjekt
die Aktionsanweisung AA2 mit.
-
Aktionsanweisung AA2: „Get closer
to destination"
-
Etwa
beim Internet-Routing möge
in Form eines zu standardisierenden optionalen Parameters „Get closer
to destination" dem
nachfolgenden Knoten z befohlen werden, das erhaltene Objekt an
einen Knoten aus DIJKSTRA_BESTHOP (z; d) oder CLOSEST (z; d) oder
CLOSER (z; d) weiter zu leiten. Der Knoten z muss außerdem diesen
optionalen Parameter sogleich wieder löschen.
-
Der
Knoten z muss der Aktionsanweisung AA2 voll und ganz entsprechen
oder aber das Weiterleitungsobjekt löschen, sofern dies wie etwa
bei Internet-Datenpaketen vertretbar ist.
-
Kompatibilität: Ein herkömmlicher
Router, der AA2 nicht versteht, sprich der zwar richtigerweise das Datenpaket
zu seinem Dijkstra-best-hop Nachbarknoten weiterleitet, davor aber
AA2 nicht löscht, „riskiert" dass einmal mehr
als nötig
die Verwendung des Dijkstra-best-hops erzwungen wird. Daran ist
nichts auszusetzen.
-
Schließlich betrachten
wir die Nachbarknoten y aus MPRF[d]-Klasse (8) DIJKSTRA_BESTHOP_INV (x;
d).
-
Durch
nachfolgende Überprüfung zerlegen
wir diese Klasse in die folgenden vier Unterklassen:
- (1) Unterklasse DIJKSTRA_BESTHOP_INV_SHORT_DETOUR (x; d):
Sie
enthält
alle Nachbarknoten y, deren Klassen CLOSEST (y; d) nicht leer sind.
- (2) Unterklasse DIJKSTRA_BESTHOP_INV_LONG_DETOUR (x; d):
Sie
enthält
alle Nachbarknoten y, welche zum einen nicht in der Unterklasse DIJKSTRA_BESTHOP_INV_SHORT_DETOUR
(x; d) sind und über
die eine Umwegroute hin zu einen Knoten z ungleich x bestimmt werden
kann mit D (z; d) = D (x; d), welche dabei x niemals passiert, wobei der
hierfür
erforderliche Berechnungs- und Speicherungsaufwand im Rahmen des
Akzeptierbaren bleibt (Näheres
siehe unten).
- (3) Unterklasse DIJKSTRA_EtESTHOP_INV_LONG_DETOUR_TOO_COMPLEX
(x; d):
Sie enthält
alle Nachbarknoten y, welche nicht zur Unterklasse DIJKSTRA_BESTHOP_INV_SHORT_DETOUR
(x; d) gehören
und über
die eine Umwegroute hin zu einen Knoten z ungleich x bestimmt werden
kann mit D (z; d) = D (x; d), welche dabei x niemals passiert, wobei aber
der hierfür
erforderliche Berechnungs- und Speicherungsaufwand über das
Akzeptierbare hinaus geht (Näheres
siehe unten).
- (4) Unterklasse DIJKSTRA_BESTHOP_INV_DEAD_END (x; d):
Sie
enthält
alle Nachbarknoten y, von wo aus es keine Route hin zu irgendeinen
Knoten z ungleich x gibt mit D (z; d) = D (x; d) ohne x zu passieren
(=Sackgasse). Um die Zugehörigkeit
eines Nachbarknotens y aus DIJKSTRA_BESTHOP_INV (x; d) zur jeweiligen
Unterklasse festzustellen, prüfen
wir zunächst,
ob CLOSEST (y; d) leer ist.
Falls nicht, so gehöre y der
Unterklasse DIJKSTRA_BESTHOP_INV_SHORT_DETOUR (x; d) an. Andernfalls werde
versucht, mit Hilfe des klassischen Dijkstra-Routing-Algorithmus
eine kürzeste
Route von y nach d zu bestimmen, wobei man zuvor vom zugrunde liegenden
Netz den Knoten x sowie die an x angrenzenden Kanten „entfernt" hat. Falls dieser
Versuch misslingt, so gehört
y der Unterklasse DIJKSTRA_BESTHOP_INV_DEAD_END (x; d) an.
Falls
er aber gelingt, so wird die ermittelte kürzeste Route irgendwo einen
ersten Knoten w mit D (w; d) <=
D (x; d) haben. Diesen ersten Teil der Route von y nach w unterteilen
wir in Knotenfolgen S11, S12, ...., Sr1, Sr2 derart, dass die Distanzwerte
D (j; d) aller Knoten j einer Knotenfolge Si1 für i von 1 bis r jeweils eine
monoton nicht abnehmende Zahlenfolge bilden, wohingegen die Distanzwerte
D (j; d) aller Knoten j der Knotenfolge Si2, für i von 1 bis r, jeweils eine
monoton streng abnehmende Zahlenfolge bilden. zik bezeichne
den jeweils letzten Knoten der Folge Sik mit i = 1, ..r und k =
1,2 wobei zr2 = w. Die Knoten zik müssen in
der Reihenfolge, in welcher sie in der ermittelten Route auftreten,
als Interimszielknoten angesteuert werden. Dies ist ohne Zweifel
mit Aufwänden
verbunden. Falls man diese Aufwände
im Einzelfall für
nicht gerechtfertigt hält,
weil etwa r sich zu groß erweist,
oder weil die Klassen (1)–(7)
genügend
viele Knoten enthalten, so werde y der Unterklasse DIJKSTRA_BESTHOP_INV_LONG_DETOUR_TOO_COMPLEX
(x; d) zugeteilt, ansonsten aber der Unterklasse DIJKSTRA_BESTHOP_INV_LONG_DETOUR
(x; d). Hierbei ist für
jedes einzelne Element y dieser Unterklasse die Liste der zugehörigen Knoten
zik i = 1, .. r und k = 1, 2 mit abzuspeichern.
-
Ein
Nachbarknoten aus DIJKSTRA_BESTHOP_INV_DEAD_END (x; d) bzw. DIJKSTRA_BESTHOP_INV_LONG_DETOUR_TOO_COMPLEX
(x; d) kommt für
die Weiterleitung eines Objekts mit Zielknoten d nicht in Frage.
-
Selektiert
x für die
Objektweiterleitung einen Nachbarknoten y aus DIJKSTRA_BESTHOP_INV_SHORT_DETOUR
(x; d) so gilt selbiges wie bei der Selektion eines Nachbarknotens
aus CLOSEST_INV (x; d) – siehe
oben.
-
Selektiert
x einen Nachbarknoten y aus DIJKSTRA_BESTHOP_INV_LONG_DETOUR (x;
d) so werde mittels einer mehrfachen „Brief im Brief" -Umwickelung (beim
Beispiel Internet mittels IP-in-IP encapsulation) dafür gesorgt,
dass die zugeordneten Knoten z11, z12, ..., zr1, zr2 als Zwischenziele angesteuert werden.
Auf dem innersten hinzugefügten „Briefumschlag" steht die Adresse
des Zielknotens zr2, auf dem äußersten:
z11. Auf jedem „Briefumschlag" mit Zieladresse
zi1 für
i = 1, .., r ist ferner ein Aktionsanweisung AA3 vermerkt, welche jeden
Transitknoten k auf dem Weg nach zi1 anweist,
einen nächsten
Knoten ausschließlich
aus den Klassen DIJKSTRA_BESTHOP (k; zi1)
oder CLOSEST (k; zi1) oder CLOSER (k; zi1) der respektiven Multipath-Richtungsfelder
MPRF[zi1] für i = 1, ..., r zu selektieren.
-
Auf
jedem „Briefumschlag" mit Zieladresse
zi2 für
i = 1, .., r ist hingegen ein Aktionsanweisung AA4 vermerkt, welche
jeden Transitknoten k auf dem Weg nach zi2 anweist,
einen nächsten
Knoten ausschließlich aus
den Klassen DIJKSTRA_BESTHOP (j; zi1) oder
CLOSEST (j; zi1) der respektiven Multipath-Richtungsfelder MPRF[zi2] für
i = 1, ..., r zu selektieren. Dem originären „Briefumschlag" mit Zielknoten d
wird eine Aktionsanweisung AA2 „Get closer to destination" (siehe oben) hinzugefügt, welche
den Knoten zr2 = w veranlasst, ausschließlich einen
nächsten
Knoten aus den Klassen DIJKSTRA_BESTHOP (w; d) oder CLOSEST (w;
d) oder CLOSER (w; d) zu selektieren und außerdem eben diese Aktionsanweisung
wieder zu entfernen.
-
Kompatibilität:
-
Die
AA3 und AA4 verstehenden Router-Knoten müssen sich an diese Aktionsanweisungen
halten, ansonsten aber das Weiterleitungsdatenpaket löschen. Herkömmliche
Router, welche AA3 und AA4 nicht verstehen, würden ohnehin ihnen entsprechen
bzw. sich so verhalten.
-
Anmerkungen:
-
Mit
dem eben vorgestellten Multipath-Routing in Vorwärtsrichtung kann ein völlig neues
Kapitel in der Internet-Technologie aufgeschlagen werden – etwa betreffend
Verkehrslastbalancierung, oder betreffend plötzlicher Router-Ausfälle bzw.
Router-Blockierungen.
Schleifen können
ohne den bislang üblichen
Schrecken gesehen werden. Beispiel: Es kann passieren, dass der „Dijkstra-best-hop"-Nachbarknoten temporär blockiert
ist und dass die einzige Chance für ein erfolgreiches Routen
darin besteht, erst einmal den Rückwärtsgang
einzulegen, eventuell bis zurück
zum Ausgangsknoten oder gar noch weiter zurück, um erst danach zu einem
erfolgreichen Vorwärtsrouten
hin zum Zielknoten überzugehen.
Ferner kann der Time-To-Live Mechanismus in der bisherigen Verwendung
entfallen.
-
4 „Interferenz" von wenigen Multipath-Richtungsfeldern
-
Das
obige Multipath-Verfahren in Absatz 3 setzt voraus, dass bezüglich eines
jeglichen Zielknotens d ein Multipath-Richtungsfeld MPRF[d] erstellt
wird. Falls dies zu aufwendig erscheint, so kann man zum einen das
MPRF[d] nur für
die wichtigsten Zielknoten erstellen, ansonsten aber herkömmlich verfahren
und/oder mit der nachfolgenden „Interferenz" von ein paar wenigen
Multipath-Richtungsfeldern, die gewünschte Routing-Informationen
bezüglich
eines jeglichen Ziels destillieren: Ein jeglicher Knoten x berechnet
hierbei sein individuelles MPRF0[d0 = x], sowie MPRF1 [d1 = NP], wobei NP (wie Nordpol) irgendein
Netzknoten ist, auf welchen sich alle Netzknoten verständigt haben.
Ausnahme: Der Knoten x = NP selbst bilde MPRF0[d0 = x = NP] sowie MPRF1[d1 = SP] wobei SP (wie Südpol) irgendein anderer Netzknoten
sei.
-
Für einen
jeglichen Zielknoten d bilde der Knoten x die folgenden zwei Klassen:
-
1) DIJKSTRA_BESTHOP (x;
d):
-
Sie
enthalte den Nachbarknoten DBHx;d, welcher
wie bei herkömmlichen
Routern ermittelt werde. In der hierin benützten Terminologie: Man navigiert
von d über
Knoten y1 = DIJKSTRA_BESTHOP (d; d0 = x), y2 = DIJKSTRA_BESTHOP
(y1; d0 = x), ..... yp = DIJKSTA_BESTHOP (yp-1;
d0 = x) nach x = DIJKSTRA_BESTHOP (yp; d0 = x) und erhält damit
yp = DBHx;d.
-
2) SUITABLE_NEXT_HOP (x;
d):
-
Sie
enthalte alle Nachbarknoten y von x für die eine der folgenden Bedingungen
zu trifft:
(1):
D (x, d1) < D (DBHx;d,
d1) UND D (y, d1) > D (x, d1).
Oder
aber (2):
D (x, d1) > D (DBHx;d,
d1) UND D (y, d1) < D (x, d1).
Oder aber (3):
D (x, d1) = D (DBHx;d, d1) UND D (x, d1) < D (d, d1) UND D (y, d1) > D (x, d1).
Oder
aber (4):
D (x,d1) = D (DBHx;d,d1)UND D (x,d1) > D
(d,d1)UND D (y,d1) < D (x,d1).
-
Anmerkung:
-
Falls
D (x, d1) = D (DBHx;d,
d1) UND D (x, d1)
= D (d, d1), so bleibe die Klasse SUITABLE_NEXT_HOP (x;
d) leer.
-
Multipath Transport-Prozess:
-
Der
Ausgangsknoten sowie jeglicher Transitknoten x möge – zwecks Weiterleitung des
Transportobjektes – einen
Nachfolgeknoten entweder von seiner Klasse DIJKSTRA_BESTHOP (x;
d) oder von seiner Klasse SUITABLE_NEXT_HOP (x; d) auswählen (falls
DBHx;d identisch mit d ist, so ist selbstverständlich kein
anderer Nachfolgeknoten als DBHx;d zu wählen).
-
Es
gibt dabei eine unschöne
aber doch akzeptierbare Situation:
Es kann sein, dass für Knoten
x die Klasse SUITABLE_NEXT_HOP (x; d) leer ist und dass der Knoten
DBHx;d aus DIJKSTRA_BESTHOP (x; d) sich
als jener erweist, von dem Knoten x soeben das Weiterleitungsobjekt erhalten
hat. In diesem Fall muss x das Weiterleitungsobjekt an diesen Knoten
zurücksenden
und ihm dabei signalisieren, dass er unbedingt seinen Dijkstra-best-hop
Nachbarknoten zur Weiterleitung des Objekts auswählen muss.
-
Alternativen, Modifikationen
zum Multipath Transport-Prozess:
-
Es
soll erzwungen werden, dass nach der Selektion eines Elements der
Klasse SUITABLE_NEXT_HOP (x; d) stets mindestens einmal die Selektion
des Elements der Klasse DIJKSTRA_BESTHOP (x; d) erfolgt.
-
Dafür dürfen die
Bedingungen (1) und (2) durch die weniger rigorosen Bedingungen
(1') und (2') ersetzt werden,
sprich ein Nachbarknoten y ungleich DBHx;d qualifiziert
sich als Element von SUITABLE_NEXT_HOP (x; d), falls zutrifft:
(1'):
D (x, d1) < D
(DBHx;d, d1) UND
D (y, d1) >=
D (x, d1).
Oder aber (2'):
D (x, d1) > D
(DBHx;d, d1) UND
D (y, d1) <=
D (x, d1).
-
Dies
lässt sich
zum Beispiel wie folgt organisieren:
Auf dem Weg zu seinem
Zielknoten d möge
das Weiterleitungsobjekt eine 1-Bit-Information „Take the Dijkstra-best-hop" mit sich führen. Ist
das Bit auf den Wert 1 gesetzt, so bedeutet dies für den das
Objekt empfangenden Knoten x, es müsse das Objekt weiterleiten
an den Nachbarknoten aus Klasse DIJKSTRA-BESTHOP (x; d) und dabei
dieses Bit auf 0 setzen.
-
Empfängt ein
Knoten x das Objekt, wobei beim Empfang dieses Bit auf 0 gesetzt
ist, so hat er die freie Wahl, das Objekt entweder an einen Nachbarknoten
aus DIJKSTRA_BESTHOP (x; d) oder aber aus SUITABLE_NEXT_HOP (x;
d) weiterzuleiten. Im ersteren Fall wird die Information „Take the
Dijkstra-best-hop" =
0 weitergeleitet, im letzteren Fall die Information „Take the
Dijkstra-best-hop" =
1.
-
Ein
Knoten x, welcher entweder mangels Alternativen oder auf Grund der
empfangenen Information „Take
the Dijkstra-besthop" =
1 gezwungen ist, das Objekt an selbigen Knoten zurückzuschicken,
von dem er es empfangen hat, möge
dies tun und zwar zusammen mit der Information „Take the Dijkstra-best-hop" = 1.
-
Weitere alternative Lösungen:
-
Diverse
alternative Lösungen
sind möglich,
etwa indem man weitere Multipath-Richtungsfelder
MPRF2 [d2], ...
ermittelt und zur Bestimmung der Klasse SUITABLE_NEXT_HOP (x; d)
heranzieht.
-
Beispiel:
Alle Netzknoten bestimmen ein zusätzliches Multipath-Richtungsfeld
MPRF2 [d2] welches ausgerichtet
ist auf den von allen gekannten Knoten d2.
Im Falle dass D (x, d1) = D (DBHx;d, d1) UND D (x,
d1) = D (d, d1)
lassen sich dann eventuell doch noch Nachbarknoten y für die Klasse
SUITABLE_NEXT_HOP (x; d) ermitteln, falls nämlich zutrifft:
(1):
D
(x, d2) < D
(DBHx;d, d2) UND
D (y, d2) > D
(x, d2).
Oder aber (2):
D (x,
d2) > D
(DBHx;d, d2) UND
D (y, d2) < D
(x, d2).
Oder aber (3):
D (x,
d2) = D (DBHx;d,
d2) UND D (x, d2) < D (d, d2) UND D (y, d2) > D (x, d2).
Oder
aber (4):
D (x, d2) = D (DBHx;d, d2) UND D (x,
d2) > D
(d, d2) UND D (y, d2) < D (x, d2).
-
5 P2mp & mp2p Kommunikation,
MPRF[d] basierend
-
Akronyme:
-
- p2p = point-to-point; p2mp = point-to-multipoint; mp2p =
multipoint-to-point.
-
Jeder
Netzknoten bestimme das identische Multipath-Richtungsfeld MPRF[d],
d.h. mit Ausrichtung auf denselben Knoten d und unter Beachtung
derselben Entscheidungsregel (tie-break-rule). Es diene der Kommunikation
zwischen Knoten d und allen übrigen
Netzknoten in Vorwärts-
als auch Rückwärtsrichtung,
derart dass die Kommunikationsmeldung jeglichen Netzknoten x ungleich
d genau einmal passiert.
-
Es
diene ferner der Kommunikation zwischen Knoten d und allen übrigen Netzknoten
in Vorwärts-
als auch Rückwärtsrichtung,
derart dass die Kommunikationsmeldung jegliche Netzkante genau einmal
passiert.
-
5.1 P2mp Kommunikation
wobei jeder Knoten genau einmal passiert wird
-
Der
Knoten d möge – für welche
Anwendung auch immer – eine
p2mp-Meldung an all seine Nachbarknoten y aus DIJKSTRA_BESTHOP_INV
(d; d) senden, die diese ihrerseits an ihre Nachbarknoten z aus
ihren Klassen DIJKSTRA_BESTHOP_INV (y; d) weiterleiten, usw. Die
rekursive Wiederholung sorgt dafür,
dass jeder Netzknoten genau ein Exemplar dieser p2mp-Meldung erhält. Die
Rekursion stoppt dadurch, dass ggf. die Klasse DIJKSTRA_BESTHOP_INV
(y;d) leer ist.
-
Falls
das Weiterleiten dieser p2mp-Meldung von irgendeinem Knoten x an
irgendeinen Nachbarknoten y aus irgendwelchen Gründen blockiert ist, so kann
dies bezüglich
eine Benachrichtigungsmeldung an d zurückgesendet werden, wobei stets
ein Knoten k diese an den Nachbarknoten aus DIJKSTRA_BESTHOP (k; d)
sendet.
-
Das
Vorteilhafte: Der Knoten d muss lediglich so viele Exemplare der
p2mp-Meldung aussenden, als die Klasse DIJKSTRA_BESTHOP_INV (d;
d) Elemente hat und kann dennoch mit sämtlichen n Knoten des Netzes
kommunizieren. Ebenso ist auch die Arbeitslast für jeden Netzknoten wohl begrenzt.
-
Beispiel-Anwendungen:
-
Kundgebungen an alle (advertisement).
-
Aufforderung
an alle zu antworten, etwa fast gleichzeitig, etwa mittels einer
mp2p-Meldung – siehe nachfolgend.
-
5.2 Mp2p Kommunikation
wobei jeder Knoten genau einmal passiert wird
-
All
jene Knoten x, deren Klassen DIJKSTRA_BESTHOP_INV (x; d) leer sind,
mögen,
etwa periodisch zur gleichen Zeit oder in Reaktion auf eine unmittelbar
zuvor erhaltene Meldung von d (z.B. nach Erhalt einer p2mp-Meldung,
siehe oben) eine mp2p-Meldung an Knoten d initiieren und sie an
ihre Nachbarknoten aus DIJKSTRA_BESTHOP (x; d) schicken. So ein
Nachbarknoten y möge
innerhalb eines bestimmten Zeitrahmens weitere Exemplare dieser
mp2p-Meldung von allen übrigen
Nachbarn aus DIJKSTRA_BESTHOP_INV (y; d) erwarten und nach Erhalt
sämtlicher
Exemplare genau eine mp2p-Meldung an den Nachbarknoten aus DIJKSTRA_BESTHOP
(y; d) weiterleiten. Nach allen rekursiven Wiederholungen dieses
Vorgangs wird schließlich
der Knoten d von all seinen Nachbarknoten aus DIJKSTRA_BESTHOP_INV
(d; d) je ein Exemplar dieser mp2p-Meldung bekommen.
-
Z.B.
kann der Knoten d auf diese Weise periodisch alle übrige Netzknoten
bzgl. ihrer Einsatzbereitschaft überprüfen.
-
Das
Vorteilhafte: Der Knoten d muss lediglich so viele Exemplare der
p2mp-Meldung empfangen, als die Klasse DIJKSTRA_BESTHOP_INV (d;
d) Elemente hat und kann dennoch mit sämtlichen n Knoten des Netzes
kommunizieren. Ebenso ist auch die Arbeitslast für jeden Netzknoten wohl begrenzt.
-
5.3 P2mp Kommunikation
wobei jede Kante genau einmal passiert wird
-
Der
Knoten d möge – für welche
Anwendung auch immer – eine
p2mp-Meldung an all seine Nachbarknoten y aus der Oberklasse AWAY_FROM_DESTINATION
(d; d) senden, die diese ihrerseits weiterleiten an ihre Nachbarknoten
z aus ihren Oberklassen AWAY_FROM_DESTINATION (y; d), usw. Auf diese
Weise wird die Meldung an alle Netzknoten gesendet, wobei die Meldung
jede Netzkante genau einmal passiert. Ein beliebiger Netzknoten
x erhält
diese p2mp-Meldung im Allgemeinen mehrmals, nämlich von all seinen Nachbarn aus
Oberklasse TOWARDS_DESTINATION (x; d). Er schickt sie weiter an
all seine Nachbarknoten aus Oberklasse AWAY_FROM_DESTINATION (x;
d). Er mag dies nach Empfang des ersten Exemplars dieser p2mp-Meldung
tun, oder nach Erhalt des letzten Exemplars, oder nach Erhalt eines
wohlbestimmten Exemplars, z.B. jenes vom Nachbarknoten aus DIJKSTRA_BESTHOP
(x; d).
-
Durch
rekursive Wiederholung dieses Vorgangs wird die p2mp-Meldung an
sämtliche
Netzknoten derart geschickt dass sämtliche Netzkanten genau einmal
passiert werden.
-
Falls
das Weiterleiten dieser Meldung von irgendeinem Knoten x an irgendeinen
Nachbarknoten y aus irgendwelchen Gründen blockiert ist, so kann
diesbezüglich
eine Benachrichtigungsmeldung an d zurückgesendet werden wobei z.B.
stets ein Knoten k diese an den Nachbarknoten aus DIJKSTRA_BESTHOP
(k; d) sendet.
-
Anwendungen:
-
- 1.MPLS – Label
Distribution Protocol: Die p2mp-Meldung, initiiert vom Knoten d,
welche sämtliche
Netzkanten je einmal passiert, möge
die einzelnen Netzknoten veranlassen, ein label mapping vorzunehmen, um
mittels MPLS labe) switchings Daten von jeglichem Netzknoten nach
Knoten transportieren zu können.
- 2. OAM-Test:: Knoten d möge
mittels der p2mp-Meldung, welche alle Netzkanten je einmal passierte,
die Einsatzbereitschaft einer jeglichen Netzkante überprüfen.
-
5.4 Mp2p Kommunikation
wobei jede Kante genau einmal passiert wird
-
All
jene Knoten x, deren Oberklassen AWAY_FROM_DESTINATION (x; d) leer
sind, mögen,
etwa periodisch zur gleichen Zeit oder in Reaktion auf eine unmittelbar
zuvor erhaltene Meldung von d (z.B. nach Erhalt einer p2mp-Meldung,
siehe oben) eine mp2p-Meldung an Knoten d initiieren und sie an
alle ihre Nachbarknoten y aus TOWARDS_DESTINATION (x; d) schicken.
-
So
ein Nachbarknoten y möge
innerhalb eines bestimmten Zeitrahmens weitere Exemplare dieser mp2p-Meldung
von allen übrigen
Nachbarn aus AWAY_FROM_DESTINATION (y; d) erwarten und nach Erhalt sämtlicher
Exemplare genau eine mp2p-Meldung an alle Nachbarknoten aus TOWARDS
DESTINATION (y; d) weiterleiten. Nach allen rekursiven Wiederholungen
dieses Vorgangs wird schließlich
der Knoten d von all seinen Nachbarknoten (= alle Elemente von AWAY_FROM_DESTINATION
(d; d)) je ein Exemplar dieser mp2p-Meldung bekommen.
-
Anwendungsbeispiel: Überwachung
sämtlicher
Netzkanten durch den Knoten d, wobei dessen Arbeitslast erheblich
reduziert wird, insofern die Anzahl der Meldungsexemplare begrenzt
ist durch die Anzahl der angrenzenden Kanten und nicht etwa von
Ordnung O(n) bzw. Ordnung O(m) ist, wobei n die Anzahl der Netzknoten
und m die Anzahl der Netzkanten sei.
-
6 Netzaufteilung
-
Das
folgende Verfahren beschreibt wie ein beliebiges Netz in m Teilnetze
S0, S1, ..., Sm-1 aufgeteilt wird, wobei von jedem dieser
Teilnetze Si, für i = 0, 1, ..., m-1 zunächst jeweils
nur ein Knoten di, nachfolgend Pivot-Knoten
genannt, bekannt sei. Sinn und Zweck der Aufteilung könnte dabei
sein, dass die Verwaltung des gesamten Netzes von diesen m Pivot-Knoten
d0, d1, ..., dm-1 bewerkstelligt werden soll, indem sich
jeder von ihnen um sein spezielles Teilnetz kümmert.
-
Bei
diesem Verfahren genügt
es, dass jeder Netzknoten x die Topologie des gesamten Netzes kennt, sowie
die m Pivot-Knoten d0, d1,
..., dm-1, sowie welcher von ihnen besonders
herausgestellt ist. Es sei dies d0, nachfolgend
auch mit d bezeichnet.
-
Die
Aufteilung ist derart, dass jeder Netzknoten sowie jede Netzkante
zu genau einem dieser Teilnetze gehört. Mit Hilfe des nachfolgenden
Verfahrens kann jeder Knoten ganz autark allein anhand der oben
genannten Informationen erkennen, zu welchem Teilnetz jeglicher
Netznoten und jegliche Netzkante gehört, insbesondere also, zu welchem
Teilnetz er selbst gehört
zusammen mit allen übrigen
Knoten desselben Teilnetzes, ferner – was wichtig ist für Knoten
mit anliegenden, zu Nachbar-Teilnetzen gehörenden Kanten – an welche
Nachbar-Teilnetze er angrenzt, und damit, in welche nachbarschaftliche
Kommunikation er gegebenenfalls Anteil nehmen muss.
-
Erfindungsgemäß ermittelt
sich jeder Netzknoten x das identische Multipath-Richtungsfeld MPRF[d] unter Anwendung
der Entscheider-Regel (tie-break-rule) mit Ausrichtungsknoten d
= d0. Ferner sortiert er die Pivot-Knoten
in die Reihenfolge um, in welcher sie in der Reihenfolge SEQ des
[Hummel-1]-Algorithmus auftreten. Angenommen die Knoten d0, d1, ..., dm-1 kommen in der Knotenfolge SEQ genau in
dieser Reihenfolge vor.
-
Teilnetz
Sm-1 besteht aus seinem Pivot-Knoten dm-1 sowie aus allen Kanten und Knoten, welche
passiert bzw. erreicht werden, wenn man, ausgehend von x = dm-1, auf alle Knoten aus der Oberklasse AWAY_FROM_DESTINATION
(x; d) kommt und diesen Schritt rekursiv immer wieder wiederholt.
-
Teilnetz
Sm-2 besteht aus seinem Pivot-Knoten dm-2 sowie aus allen Kanten und Knoten, welche
passiert bzw. erreicht werden, wenn man, ausgehend von x = dm-2, auf alle Knoten aus der Oberklasse AWAY_FROM_DESTINATION
(x; d) stößt und diesen
Schritt rekursiv immer wieder wiederholt, jedoch unter der Einschränkung, dass
bei Erreichung eines Knotens, welcher bereits einem Teilnetz mit
größerem Teilnetz-Index
zugeordnet ist (hier Sm-1) der erreichte
Knoten nicht mehr dazugehört,
wohl aber die Kante auf dem Weg zu ihm.
-
In
Fortsetzung dieses iterativen Prozesses bestimmen wir für k = m-3,
m-4, ....2, 1, 0 das jeweilige Teilnetz Sk:
Dieses
besteht aus seinem Pivot-Knoten dk sowie
aus allen Kanten und Knoten, welche passiert bzw. erreicht werden,
wenn man, ausgehend von x = dk, auf alle
Knoten aus der Oberklasse AWAY_FROM_DESTINATION (x; d) stößt und diesen
Schritt rekursiv immer wieder wiederholt, jedoch unter der Einschränkung, dass
bei Erreichung eines Knotens, welcher bereits einem Teilnetz mit
größerem Teilnetz-Index zugeordnet
ist (nämlich Sk+1, ..., Sm-1) der
erreichte Knoten nicht mehr dazugehört, wohl aber die Kante auf
dem Weg zu ihm.
-
Indem
ein beliebiger Netzknoten x0 den folgenden,
als Pseudo-Programmcode geschriebenen Algorithmus [Hummel-3] durchführt, kann
dieser die Topologien aller Teilnetze Sk feststellen,
insbesondere die seines eigenen Teilnetzes, sowie die Nachbarschaftsbeziehung
für jegliche
Kante, welche Knoten aus unterschiedlichen Teilnetzen verbindet.
-
Verfahren [Hummel-3]:
Partitionierung
-
Zunächst erhalten
alle Knoten i die Teilnetz-Nummer 0, vermöge der Zuweisung S[i] = 0 für alle i
= 1, .. n wobei n die Anzahl aller Netzknoten ist.
-
-
Nach
Ablauf der Iteration ist jeder Knoten x einem Teilnetz Sk für
k = 0, 1, ..., m-1 zugeordnet. Sind zwei Knoten x und y benachbart
mit x aus Sp und y aus Sq mit
p < q, so gehört die Kante
zwischen diesen beiden Knoten zum Teilnetz Sp.
Gehören
zwei benachbarte Knoten zum selben Teilnetz, so gehört auch
die diesbezügliche
Verbindungskante zu diesem Teilnetz.
-
Alle
Knoten etwa des Teilnetzes Sk können somit
die Topologie von Sk genauestens erkennen
und z.B. eine p2mp & mp2p
Kommunikation zwischen dk und allen restlichen
Knoten von Sk wie in Absatz 5 beschrieben führen.
-
7 Errichtung eines virtuellen
overlay-Netzes, MPRF[d] basierend
-
Ein
virtuelles overlay-Netz ist ein Netz, dessen Knoten eine Teilmenge
der Knoten des zugrundeliegenden Netzes bilden und dessen (virtuellen)
Kanten aus sogenannten Tunnels bzw. Verbindungen bestehen, von denen
jeder, im allgemeinen, aus einer sich nicht verzweigenden Folge
von Kanten des zugrundeliegenden Netzes zusammensetzt.
-
Ein
beliebig großes
und zugleich beliebig vermaschtes virtuelles overlay-Netz (z.B.
ein sog. virtual private network = VPN), werde erfindungsgemäß ausgehend
von einem overlay-Netzknoten d, wie folgt errichtet:
Zunächst macht
sich Knoten d ein Topologiebild dieses overlay-Netzes. Alsdann konvertiert
er dieses in ein Multipath-Richtungsfeld MPRF[d] (alle Tunnels werden
zu Pfeile) mit sich selbst als Ausrichtungsknoten.
-
Der
Knoten d sende in der p2mp-Meldung seinen eigene Knoten-Identifikation
d als die des Initiators dieser Meldung, sowie die gesamte Topologie
des virtuellen overlay-Netzes, d.h. eine Liste mit allen Endknoten-Paaren
aller virtuellen Kanten. Hierbei sei stets der erste der beiden
Endknoten (= Knoten-A genannt) jener der Pfeilspitze, sowie der
zweite (Knoten-B genannt) jener des Pfeilanfangs gemäß des Multipath-Richtungsfeldes
MPRF[d]. Die p2mp-Meldung enthalte ferner einen Zeiger (bzw. Index),
welcher auf das Endknoten-Paar jener virtuellen Kante (Tunnel/Verbindung)
deutet, die gerade errichtet werden soll indem die p2mp-(Aufbau-) Meldung
vom Knoten A gerade an den Knoten B dieses Paares geschickt wird.
-
Zu
Beginn sendet der Knoten d je ein Exemplar der p2mp-Meldung an alle
Knoten-B jener Knoten-Paare,
deren Knoten-A d selber ist. Falls der jeweilige Knoten-B nicht
unmittelbarer Nachbarknoten von Knoten-A (beim ersten Mal also von
d) ist, so wird dabei die gesamte p2mp-Meldung eingekapselt (Brief-im-Brief)
und innerhalb einer p2p-Meldung mit Ziel gleich dem jeweiligen Knoten-B
transportiert. Zwischen Knoten-A und Knoten-B werde alles getan,
um eine stabile Verbindung bzw. einen stabilen Tunnel aufzubauen
(etwa durch Quittierung mittels einer Acknowledgement-Meldung). Jeder dieser
Knoten-B wird gegebenenfalls die eingekapselte p2mp-Meldung wieder „auswickeln". In jedem Fall wird
Knoten-B in der erhaltenen p2mp-Meldung
all jene Knotenpaare identifizieren, in welchen er selbst als Knoten-A
erscheint. In analoger Weise sendet er zu jedem Knoten-B der so
identifizierten Knotenpaare die p2mp-Meldung weiter, usw. bis letztlich
das gesamte virtuelle overlay-Netz aufgebaut ist.
-
Man
beachte: Jeder Knoten des virtuellen overlay-Netzes lernt zugleich
dessen gesamte Topologie kennen. Ferner: Jeder overlay-Netzknoten
kann beim erstmaligen Empfang der p2mp-Meldung bereits ersehen,
wie oft er in der Liste als Knoten B vorkommt, d.h. wie oft er noch
mit einer eintreffenden p2mp-Meldung zu rechnen hat. Ferner gibt
es verschiedene Optionen, wann ein Knoten die p2mp-Meldung seinerseits
weiterleitet: Etwa sobald er sie zum ersten Mal selbst empfangen
hat, oder sobald er alle Exemplare empfangen hat.
-
Die
Topologie des virtuellen overlay-Netzes könnte durchaus sehr, sehr groß sein.
Dies ist aber kein Problem, wenn man die (eingekapselte) p2mp-Meldung
wohl „segmentiert" sprich Stück für Stück überträgt.
-
Der
Abbau des virtuellen overlay-Netzes könnte von Knoten d mittels einer
p2mp-Meldung auf
ganz analoge Weise durchgeführt
werden.
-
Man
beachte: Selbst wenn das virtuelle overlay-Netz aus beliebig vermaschten
Knoten und Kanten von enorm großer
Anzahl besteht, so können
hierbei keine ungewollten Schleifen beim Auf- oder Abbau des virtuellen
overlay-Netzes passieren.
-
Anwendungen:
-
- 1) VPN (virtual private network)
- 2) Spezielle Teilnetze im Sinne von „Multi-Topologies" (siehe OSPF-Working
Group des IETF): Die Kanten des overlay-Netzes sind keine echten
Tunnels, sondern stets physikalische Leitungen zwischen zwei physikalischen
unmittelbaren Nachbarknoten und genügen dabei gewissen QoS/SLA-Kriterien.
Ihre Menge ist aber eine echte Teilmenge des zugrunde liegenden
gesamten physikalischen Netzes. Ein Ausgangsknoten d „rollt" mittels einer p2mp-Meldung
eine, eventuell von mehreren, (QoS/SLA-spezifische) Topologie aus. Weil
alle beteiligten Knoten x diese Topologie erfahren, sind sie in
der Lage, auf dieser bezüglich
eines jeglichen sonstigen beteiligten Knotens d, ein respektives
Multipath-Richtungsfeld MPRF[d] zu erzeugen, um über dieses Multipath Routing
in Vorwärtsrichtung
gemäß Absatz
3 zu ermöglichen.
-
8 Traffic overload warning
system
-
Ein
Verkehrsüberlast-Warnsystem
soll erfindungsgemäß nachfolgende
Grundkonzeption realisieren.
-
Ein überlasteter
Knoten x0, der es vor allem mit Verkehrsströmen hin
zum Zielknoten d zu tun hat, möge
erfindungsgemäß eine Warnung
an all jene Knoten senden, welche derartige für d bestimmte Verkehrsströme initiieren
und/oder so weiterleiten, dass diese im Normalfall den Knoten x0 passieren werden. Es wird angenommen, dass
x0 ohnehin schon ein Multipath-Richtungsfeld
MPRF[d] errichtet hat, um ankommende Verkehrsströme nach d weiterzuleiten, etwa
wie in Absatz 3 ausführlich
dargelegt. Nun aber wird dieses in Rückwärtsrichtung ausgenutzt. Konkret,
Knoten x0 möge eine „Traffic Notification"- Meldung an all
seine Nachbarknoten y aus Klasse DIJKSTRA_BESTHOP_INV (x0; d) senden, welche ihrerseits diese weiterleiten
an ihre Nachbarknoten aus DIJKSTRA_BESTHOP_INV (y; d). Dieser Vorgang
möge sich
rekursiv fortsetzen, bis dass er auf Grund von leeren DIJKSTRA_BESTHOP_INV – Klassen
von selbst versandet. Die Menge aller Knoten, die hierbei diese
Meldung erhalten, wird nachfolgend mit Dijkstra-best-hop-Einfallsektor
DBH-ES (x0; d) bezeichnet.
-
Knoten
x0 versende die „Traffic Notification"-Meldung mit folgendem
Inhalt:
- – Initiator
Knoten x0
- – Verkehrszielknoten
d,
- – Verkehrsüberlastindikator
TOI (x0; d) mit Wertebereich 0 bis 255 (TOI
wie „traffic
overload indicator")
- TOI (x0; d) = 0 bedeutet: keine Überlast
(mehr).
- TOI (x0; d) > 0 gibt den Grad der Überlast an.
-
Jeder
Knoten y aus DBH-ES (x0; d) speichere sich
diesen Inhalt beziehendlich zur Klasse DJKSTRA_BESTHOP (y; d). Falls
ein Knoten y gerade dabei ist, den Weiterleitungsknoten aus DJKSTRA_BESTHOP
(y; d) zu selektieren, möge
er ggf. den vorliegenden Eintrag berücksichtigen, indem er, falls
möglich,
einen Weiterleitungsknoten etwa aus EQUIDISTANT_OFF (y; d) oder
EQUIDISTANT_TO (y; d) selektiert, in der Hoffnung, ein Passieren
von x0 zu vermeiden.
-
Solange
Knoten x0 überlastet ist, möge er periodisch
als auch bei signifikanten Situationsänderungen solche „Traffic
Notification"- Meldungen
immer wieder aussenden.
-
Ein
Knoten y aus DBH-ES (x0; d) muss daher bei
Erhalt einer neuen „Traffic
Notification"- Meldungen ggf.
einen älteren
diesbezüglichen
Speichereintrag durch einen neueren ersetzen – bei identischem Initiator-Knoten
x0 und identischem Zielknoten d. Falls die
neuere Meldung TOI (x0; d) = 0 enthält, so wird
kein neuer Speichereintrag gemacht, vielmehr, der ältere gelöscht.
-
Das
Verkehrsüberlast-Warnsystem
wird etwas komplizierter, wenn mehrere Knoten x0,
x1, x2, ... Überlastwarnungen
bezüglich
Verkehrströme
mit gleichem Zielknoten d aussenden, wobei sich ihre Einfallsektoren umschließen:
DBH-ES
(x0; d) ⊃ DBH-ES
(x1; d) ⊃ DBH-ES
(x2; d) ⊃ ...
Das heißt:
Falls Knoten y ∈ DBH-ES
(xk; d) und xk ∈ DBH-ES
(xi; d) so ist auch y ∈ DBH-ES (xi;
d).
-
Es
gilt das Prinzip, dass die schwerer wiegende Warnung (größerer TOI-Wert)
die leichter wiegende Warnung (kleinerer TOI-Wert) überschreibt,
nicht aber umgekehrt, sofern die Initiatoren nicht identisch sind. Wenn
also eine von Knoten xi initiierte Traffic
Notification-Meldung zu einem Knoten y gelangt, welcher einen Speichereintrag
vorliegen hat, welcher von einer früheren, von Knoten xk initiierten Traffic Notification-Meldung herrührt und
es ist TOI (xi; d) > TOI (xk; d) so
wird dieser vorgefunden Speichereintrag durch die neuen Daten aus
der aktuellen Meldung überschrieben
und außerdem
mit der Weiterleitung der aktuelle Traffic Notification-Meldung
fortgefahren. Andernfalls erfolgt keine Überschreibung (bzw. keine Löschung bei
(xi; d) = 0) und auch keine Weiterleitung
der aktuellen Traffic Notification-Meldung.
-
Anmerkungen:
Das Konzept ist bemüht,
sparsam mit Speichereinträgen
zu sein. Deshalb ist es angezeigt, dass überlastete Knoten in periodischen
Abständen
ihre Warnungen wiederholt auszusenden.
-
Anwendungen:
-
- 1) „Traffic
Engineering" für die klassische
(=Nicht-MPLS-)Internet-Paket-Weiterleitung.
- 2) Stauvermeidung im Straßenverkehr:
Angenommen, die Knoten sind High-Tech-Einrichtungen an Straßenkreuzungen
und – gabelungen,
welche drahtlos mit benachbarten Knoten kommunizieren können. Nimmt
man ferner an, dass Kraftfahrzeuge bereits beim Losfahren ihr Ziel über die DIJKSTRA_BESTHOP-Klasse von Knoten
zu Knoten weiter signalisieren könnten,
so sollte es möglich sein,
dass die einzelnen Knoten, unter Berücksichtigung von Durchschnittsgeschwindigkeit
und Entfernung den Eintreffzeitpunkt des jeweiligen Kraftfahrzeugs
vorausberechnen und damit in Summe eine in der Zukunft stattfindende Überlast
prognostizieren können.
In diesem Fall sollten die Traffic-Notification-Meldungen auch noch
den prognostizierten Zeitpunkt bzw. Zeitraum der Verkehrsüberlast
enthalten. Auf Grund der erhaltenen und ausgewerteten Warnung sollten
sich im Idealfall die „richtigen" Kraftfahrzeuge im
richtigen Umfang zu einer Routeänderung
entschließen,
derart, dass der prognostizierte Stau erst gar nicht auftritt. Im
Gegensatz zu anderen Konzepten, wie sie etwa von deutschen Forschungsgesellschaften
verfolgt werden, ist dieses MPRF[d]-basierte Konzept völlig dezentral,
d.h. ohne jeglichen „Flaschenhals". Dafür aber benötigt es,
wie erwähnt,
entsprechende High-Tech-Einrichtungen
in großer
Anzahl.
-
9 Fluchtweg-Lenkung (escape
routing)
-
9.1 Einzelner Fluchtweg
-
Während das
Verfahren in Absatz 3 sämtliche
Routen hin zu einem bestimmten Zielknoten ermöglicht, z.B. zur Ausgangstür eines
brennenden Gebäudes,
geht es hierbei um die Bestimmung eines Fluchtwegs, welcher zu einem
völlig
unbekannten Zielknoten z hin führt,
welcher aber von s wohlbekannten sprich vorgegebenen disaster-Knoten
d1, ..., ds weg
führt.
Der unbekannte Zielknoten z soll einen Mindestabstand Dmin zu
sämtlichen
disaster-Knoten d1, ..., ds haben.
Der Fluchtweg selbst wird so gestaltet, dass er vorzugsweise gleichzeitig
von allen disaster-Knoten wegführt.
Wann immer dies nicht möglich
ist wird darauf geachtet, dass er unter keinen Umständen einen
der s disaster-Knoten passiert, aber auch, dass er nach Möglichkeit
keinen unmittelbaren Nachbarknoten von einem dieser s disaster-Knoten
passiert.
-
[Hummel-4] Einzelflucht-Verfahren
-
In
einem Netz mit n Knoten werde der gewünschte Fluchtweg, ausgehend
von einem wohlbestimmten Netzknoten x, an dem sich das flüchtende
Objekt/Subjekt gerade befindet, erfindungsgemäß wie folgt bestimmt:
Zunächst werden
die s Multipath-Richtungsfelder MPRF[di]
mit i = 1, ..., s ermittelt. Dabei werden auch, geschuldet dem Dijkstra-Algorithmus,
die Distanzen D (x; di) für i = 1,
..., s ermittelt.
-
Für alle n
Netzknoten i initialisieren wir 3 Kennzeichnungs-Bits wie folgt:
KZ_Disaster[i]
= 1 falls i einer der s disaster-Knoten ist, sonst = 0;
KZ_Neighbor[i]
= 1 falls i Nachbar zu irgendeinem der s-disaster-Knoten ist, sonst
= 0;
KZ-Visited[i] = 0;
Next_Node[i] = 0 für alle n
Netzknoten.
Success = 0;
recursive_escape (x);
Falls
Success = 1 UND Next_Node[x] = 0, so ist x = z.
Falls Success
= 1 UND Next_Node[x] ungleich 0 so ist der gewünschte Fluchtweg ermittelt
worden und führt entlang
der Knoten x, y1, y2,
...... yr-1, yr =
z mit y1 = Next_Node[x], y2 =
Next_Node[y1], ...., yr =
Next_Node[yr-1] = z.
-
Ansonsten
gibt es keinen Fluchtweg wie gewünscht.
-
Die
hierbei benützte
rekursive Prozedur recursive escape sei wie folgt definiert:
-
Das
Verfahren eignet sich besonders für GPS-basierte Navigation von
Kraftfahrzeugen sowie für
Navigationsgeräte,
die man in der Hand halten kann (z.B. Handy).
-
9.2 Massenfluchtsteuerung – Evakuierung
-
Zum
Zwecke der Evakuierung eines Gebäudekomplexes
oder aber einer Stadt oder eines Gebietes soll eine Massenflucht
optimal gesteuert werden. In jeglichem Fall werde das reale Wegenetz
auf ein Netzmodell mit Knoten und Kanten abgebildet. Bei einem Gebäudekomplex
würden
die Modellnetzkanten Flure und Flurabschnitte zwischen den Eingangstüren der
einzelnen Zimmer oder Vortragssäle,
Treppen, Lifte und dergleichen repräsentieren während die Modellnetzknoten
besagte Eingangstüren,
sowie Verzweigungspunkte der Flure, Treppen, Lifte, usw. sowie die
anzupeilenden Ausgänge
des Gebäudekomplexes
repräsentierten. Im
Falle einer Stadt bilden die Straßenabschnitte zwischen den
Kreuzungen die Kanten, und die Kreuzungen die Knoten. In jedem Fall
aber seien die Fluchtzielknoten besonders markiert (Gebäudeausgänge, Punkte
an denen gewisse Straßen
die Stadt hinter sich lassen). Als Gefahrenzentrum werde irgendein
Knoten d identifiziert. Dieser repräsentiere z.B. einen (vollbesetzten)
Vortragssaal innerhalb eines Gebäudekomplexes
oder ein (volles) Stadion und dergleichen innerhalb der Stadt oder
aber einen strategisch gewählten
Mittelpunkt des Netzes. Zum Zwecke der Lenkung der Massenflucht
werden an den Netzknoten mittels entsprechender Anzeigen die Fliehenden
hin zu allen Fluchtzielknoten gelenkt.
-
Erfindungsgemäß geschieht
dies derart, dass für
jede Netzkante genau eine Fluchtrichtung ermittelt wird, so dass
also niemals Fliehende auf einer einzelnen Netzkante in entgegengesetzten
Richtungen aufeinanderzu gelenkt werden, was z.B. ermöglicht,
dass man deshalb jegliche Strasse in eine Einbahnstraße umfunktionieren
kann, was in der Regel ihre Kapazität verdoppeln würde. Erfindungsgemäß wird auch
dafür gesorgt,
dass Fliehende niemals in eine Sackgasse oder in ein sackgassenartiges
Teilnetz gelenkt werden, sondern dass vielmehr Fliehende aus solchen
Sackgassen oder sackgassenartigen Teilnetzen herausgeleitet werden,
auch wenn dies bedeutet, dass sie sich dem Knoten d erst einmal
nähern
müssen.
-
Ferner
wird ermöglicht,
dass an jedem Netzknoten bezüglich
einer jeglichen für
die Weiterflucht infragekommenden angrenzenden Kanten die jeweilige
Distanz zum nahest gelegenen Fluchtzielknoten angegeben werden kann,
den man über
eben diese Kante erreichen kann, als auch – optional- eine informative
Bezeichnung für
eben diesen Fluchtzielknoten. Einschränkung: Einem Knoten x innerhalb
einer Sackgasse/eines Sackgassenteilnetzes werden keine derartigen
Distanzwerte bereit gestellt. Auch kann als Fluchtzielname für alle dessen
Weiterfluchtnachbarknoten lediglich ein konstanter Name wie etwa „Raus aus
der Sackgasse" bereitgestellt
werden.
-
Erfindungsgemäß werden
alle Fluchtzielknoten als solche markiert und es werde ihnen auch – optional – eine jeweils
individuelle informative Bezeichnung zugeordnet. Daneben wird, wie
oben beschrieben, ein Knoten d festgelegt.
-
Erfindungsgemäß wird zunächst das
Multipath-Richtungsfeld MPRF[d] erzeugt. Die Flüchtenden sollen sich grundsätzlich entgegen
der Pfeile des MPRF[d] bewegen. Um aber das Eindringen in Sackgassenbereiche
zu verhindern, bzw. um Flüchtende,
die dort ihre Flucht beginnen, von dort herauszuleiten, müssen zuvor
alle Pfeile eines solchen Sackgassenbereich identifiziert und umgedreht
werden.
-
Beispiel:
Ein grüner
Pfeil von y nach x müsse
umgedreht werden. D.h. laut Ausgangssituation ist x Element der
Klasse CLOSER (y; d) und y Element aus CLOSER_INV (x; d). Der grüne Pfeil
wird umgedreht indem beim Knoten y das Element x von der Klasse
CLOSER (y; d) nach CLOSER_INV (y; d) verschoben wird, während beim
Knoten x das Element y von der Klasse CLOSER_INV (x; d) nach CLOSER
(x; d) verschoben wird.
-
Sind
all diese Pfeile umgedreht, so kann man ganz generell sagen, dass
an einem beliebigen Knoten x nur Kanten zu Nachbarknoten aus DIJKSTRA_BESTHOP_INV
(x; d), CLOSEST_INV (x; d), CLOSER_INV (x; d) sowie EQUIDISTANT_TO
(x; d) für
die Weiterflucht infrage kommen.
-
Mit
folgendem als Pseudo-Code geschriebenen Verfahren [Hummel-5] werden
alle Sackgassen und sackgassenartige Teilnetze bildenden Pfeile
des MPRF[d] identifiziert und umgedreht, sowie allen Knoten x, welche
nicht zu einem Sackgassenbereich gehören, für jedes Element y aus DIJKSTRA_BESTHOP_INV
(x; d), CLOSEST_INV (x; d), CLOSER_INV (x; d) sowie EQUIDISTANT_TO
(x; d) die beiden Informationen bereit gestellt, nämlich (Info-1)
wie weit ist es von x über
eben diesen Nachbarknoten y zum nahest gelegenen Fluchtzielknoten
und (Info-2) wie heißt
dieser Fluchtzielknoten.
-
[Hummel-5]:
-
Zunächst müssen alle
Fluchtzielknoten k besonders markiert werden, etwa mit DestinationFlag
[k] = 1 wohingegen alle übrigen
Knoten j DestinationFlag[j] = 0 gesetzt haben. Optional, möge jedem
Fluchtzielknoten ein individueller Name zugeordnet sein.
-
Außerdem werden
sämtliche
Netzknoten i mit KZ_Visited[i] = 0 initiiert.
-
Man
tätige
folgenden Programmaufruf:
recursive_proc_invert_direction (d,
d, shortest_distance, destination_name);
-
Die
Speichervariablen shortest_distance und destination_name müssen vor
diesem Aufruf definiert worden sein. Ihre Inhalte nach diesem (alleräußersten)
Aufruf sind ohne Bedeutung. Nach diesem Prozeduraufruf sind alle
Sackgassenbereiche bildenden Pfeile umgedreht, das heißt für jeden
Knoten x sind die für
die Weiterflucht infrage kommenden Nachbarknoten y festgelegt, und
falls x nicht zum Sackgassenbereich gehört, sind je infrage kommende
Kante die Distanz zum nahest gelegenen und dabei über y erreichbaren
Fluchtzielknoten angezeigt, als auch dessen Bezeichnung.
-
Pseudo-Code
der Prozedur recursive_proc_invert_direction:
-
Nachdem
alle Pfeile ihre endgültige
Pfeilrichtung erhalten haben, kann man diesen jeweils einen Widerstandswert
Ri für
alle Kanten i zuordnen, welcher die Beschaffenheit der Kante in
der vorliegenden Fluchtrichtung berücksichtigt (Enge, Holprigkeit,
treppauf/treppab, usw.). Ein Knoten x mit m angrenzenden Pfeilen
mit den Widerständen
Ri für
i = 1; ..., m, welche laut modifiziertem MPRF[d] auf x zeigen, sprich
deren (hierzu umgekehrte) Fluchtrichtung von x wegzeigt, möge die ankommenden
Flüchtenden
bei momentan hohem Andrang anweisen, über diese Kanten im Verhältnis 1/R1:1/R2:...:1/Rm verteilt, die Flucht fortzusetzen, oder
aber, bei momentan niederem Andrang, entsprechend der kürzesten
Distanz zum jeweiligen Fluchtzielknoten.
-
10 ANYCAST-Adressziele über Multipath-Routen
-
Für das Internet
wurden erstmalig im IETF-Protocol RFC2526 IPv6-ANYCAST-Adressbereiche vorgesehen.
Eine ANYCAST-Adresse ist im Prinzip das gleiche wie eine Notrufnummer
etwa für
Polizei oder Feuerwehr. Es geht darum, Datenpakete zu irgendeinem
von vielen gleichwertigen Zielknoten zu senden, die alle mit derselben
ANYCAST-Adresse ausgezeichnet sind, zum Beispiel zum nächstgelegenen.
-
Stand
der Technik ist es, von den vielen potentiellen Zielknoten, den
nahest gelegenen Zielknoten zu bestimmen und diesen entlang der
EINEN kürzesten
Route anzupeilen.
-
Stattdessen
soll jedoch Multipath-Routing in dem Sinne ermöglicht werden, dass man solang
wie möglich
mehrere mit gleicher ANYCAST-Zieladresse ausgezeichnete Zielknoten
und jeden davon über
mehrere Routen anpeilen kann. Dies erhöht die Wahrscheinlichkeit bezüglich der
erfolgreichen Erreichbarkeit.
-
Die
Lösung
ist exakt das gleiche Verfahren wie das für die Massenfluchtsteuerung
in Absatz 9.2. Die Bedeutung der Zielknotenmarkierung ist lediglich
statt „Fluchtziel" nunmehr „ANYCAST-Ziel
für eine
spezielle ANYCAST-Adresse".
Jeder Netzknoten muß außerdem denselben
Knoten d kennen, welcher irgendein Netzknoten sein kann. Dies lässt sich
u.a. durch dieselben üblichen „Advertisement"-Methoden bewerkstelligen,
mit denen jeder Netzknoten die gesamte Topologie des vorliegenden
Netzes erfährt.
-
11 Allgemeingültigkeit
-
Sowohl
der Begriff „Netz" (bestehend aus Knoten
und Kanten) als auch der Begriff „Weiterleitungsobjekt" sind bewusst ganz
allgemein gehalten, weil in der Tat die hier dargelegten Verfahren
und Algorithmen in Gänze
oder zu Teilen auf die verschiedenartigsten Netze und auf die verschiedenartigsten
Weiterleitungsobjekte anwendbar sind.
-
Als
eine kleine und völlig
unvollständige
Auswahl von Netzen seien ausdrücklich
erwähnt:
Telekommunikationsnetze (Beispiel: Internet), Logistische Netze, Stromnetze,
Verkehrswegenetze (Straße,
Schiene, Luft, Wasser), Gehwegenetze innerhalb/außerhalb
von Gebäuden,
Modellnetze für
die Simulation von Strömungen,
Signalnetze (wie z.B. für
Verkehrsampeln oder elektronische Fluchfwegrichtungsanzeiger), logische Netze,
Hybride von logischen und realen Netzen, Grids, Netzmodelle für biologische
Prozesse, usw.
-
Als
eine kleine und völlig
unvollständige
Auswahl von Weiterleitungsobjekten seien ausdrücklich erwähnt: Datenpakete, Transportgüter, Verkehrsmittel,
Personen, elektrischer Strom, Energie in verschiedensten Formen,
feste/flüssige/gasförmige Körper, usw.