Zum Hauptinhalt springen

7. Sequenzzähler

Dieser Abschnitt beschreibt das allgemeine Schema für Bootstrap und Betrieb von Sequenzzählern in RPL, wie z. B. die DODAGVersionNumber in der DIO-Nachricht, die DAOSequence in der DAO-Nachricht und die Pfadsequenz (Path Sequence) in der Transit-Information-Option.

7.1. Übersicht der Sequenzzähler

Diese Spezifikation verwendet drei verschiedene Sequenznummern, um die Aktualität und Synchronisation von Protokollinformationen zu validieren:

  • DODAGVersionNumber: Dieser Sequenzzähler ist in der DIO-Basis vorhanden, um die Version des gebildeten DODAG anzuzeigen. Die DODAGVersionNumber wird von der Wurzel jedes Mal monoton erhöht, wenn die Wurzel beschließt, eine neue Version des DODAG zu bilden, um die Integrität erneut zu validieren und eine globale Reparatur zu ermöglichen. Die DODAGVersionNumber wird unverändert den DODAG hinunter propagiert, während Router der neuen DODAG-Version beitreten. Die DODAGVersionNumber ist in einem DODAG global signifikant und gibt die Version des DODAG an, in der ein Router arbeitet. Ein älterer (kleinerer) Wert zeigt an, dass der Ursprungsrouter nicht auf die neue DODAG-Version migriert ist und nicht als Elternteil verwendet werden kann, sobald der empfangende Knoten auf die neuere DODAG-Version migriert ist.

  • DAOSequence: Dieser Sequenzzähler ist in der DAO-Basis vorhanden, um eine DAO-Nachricht und eine DAO-ACK-Nachricht zu korrelieren. Die DAOSequence-Nummer ist lokal signifikant für den Knoten, der eine DAO-Nachricht für seinen eigenen Verbrauch ausgibt, um den Verlust einer DAO-Nachricht zu erkennen und Wiederholungen zu ermöglichen.

  • Pfadsequenz (Path Sequence): Dieser Sequenzzähler ist in der Transit-Information-Option in einer DAO-Nachricht vorhanden. Der Zweck dieses Zählers besteht darin, eine Bewegung, bei der eine neuere Route eine veraltete ersetzt, von einem Routenredundanzszenario zu unterscheiden, bei dem mehrere Routen für dasselbe Ziel parallel existieren. Die Pfadsequenz ist in einem DODAG global signifikant und gibt die Aktualität der Route zum zugehörigen Ziel an. Ein älterer (kleinerer) Wert, der von einem Ursprungsrouter empfangen wird, zeigt an, dass der Ursprungsrouter veraltete Routing-Zustände hält und der Ursprungsrouter nicht mehr als potenzieller nächster Hop für das Ziel betrachtet werden sollte. Die Pfadsequenz wird von dem Knoten berechnet, der das Ziel ankündigt, d. h. das Ziel selbst oder ein Router, der ein Ziel im Namen eines Hosts ankündigt, und bleibt unverändert, wenn der DAO-Inhalt von Eltern-Routern zur Wurzel propagiert wird. Wenn ein Host keinen Zähler an seinen Router übergibt, ist der Router für die Berechnung der Pfadsequenz im Namen des Hosts verantwortlich, und der Host kann sich zu diesem Zweck nur bei einem Router registrieren. Wenn eine DAO-Nachricht, die dasselbe Ziel enthält, zu einem bestimmten Zeitpunkt zum Zwecke der Routenredundanz an mehrere Eltern ausgegeben wird, ist die Pfadsequenz in allen DAO-Nachrichten für dasselbe Ziel gleich.

7.2. Betrieb der Sequenzzähler

RPL-Sequenzzähler sind nach Art eines 'Lollipops' unterteilt [Perlman83], wobei die Werte ab 128 als lineare Sequenz verwendet werden, um einen Neustart anzuzeigen und den Zähler zu bootstrappen, und die Werte kleiner oder gleich 127 als kreisförmiger Sequenznummernraum der Größe 128 verwendet werden, wie in [RFC1982]. Es wird der Betriebsmodus beim Übergang vom linearen Bereich in den kreisförmigen Bereich berücksichtigt. Schließlich sind Sequenznummern beim Betrieb im kreisförmigen Bereich nicht vergleichbar, wenn festgestellt wird, dass sie zu weit voneinander entfernt sind, wie unten detailliert beschrieben.

Ein Vergleichsfenster, SEQUENCE_WINDOW = 16, wird basierend auf einem Wert von 2^N konfiguriert, wobei N in dieser Spezifikation als 4 definiert ist.

Für einen gegebenen Sequenzzähler:

  1. Der Sequenzzähler SOLLTE vor der Verwendung auf einen implementierungsdefinierten Wert initialisiert werden, der 128 oder größer ist. Ein empfohlener Wert ist 240 (256 - SEQUENCE_WINDOW).

  2. Wenn eine Erhöhung des Sequenzzählers dazu führen würde, dass der Sequenzzähler über seinen Maximalwert hinaus erhöht wird, MUSS der Sequenzzähler auf Null zurückgesetzt werden. Beim Erhöhen eines Sequenzzählers größer oder gleich 128 ist der Maximalwert 255. Beim Erhöhen eines Sequenzzählers kleiner als 128 ist der Maximalwert 127.

  3. Beim Vergleich zweier Sequenzzähler MÜSSEN die folgenden Regeln angewendet werden:

    1. Wenn ein erster Sequenzzähler A im Intervall [128..255] liegt und ein zweiter Sequenzzähler B in [0..127] liegt:

      1. Wenn (256 + B - A) kleiner oder gleich SEQUENCE_WINDOW ist, dann ist B größer als A, A ist kleiner als B und die beiden sind nicht gleich.

      2. Wenn (256 + B - A) größer als SEQUENCE_WINDOW ist, dann ist A größer als B, B ist kleiner als A und die beiden sind nicht gleich.

      Zum Beispiel, wenn A 240 ist und B 5 ist, dann ist (256 + 5 - 240) 21. 21 ist größer als SEQUENCE_WINDOW (16); somit ist 240 größer als 5. Als weiteres Beispiel, wenn A 250 ist und B 5 ist, dann ist (256 + 5 - 250) 11. 11 ist kleiner als SEQUENCE_WINDOW (16); somit ist 250 kleiner als 5.

    2. In dem Fall, in dem beide zu vergleichenden Sequenzzähler kleiner oder gleich 127 sind, und in dem Fall, in dem beide zu vergleichenden Sequenzzähler größer oder gleich 128 sind:

      1. Wenn der absolute Betrag der Differenz zwischen den beiden Sequenzzählern kleiner oder gleich SEQUENCE_WINDOW ist, wird ein Vergleich wie in [RFC1982] beschrieben verwendet, um die Beziehungen größer als, kleiner als und gleich zu bestimmen.

      2. Wenn der absolute Betrag der Differenz der beiden Sequenzzähler größer als SEQUENCE_WINDOW ist, ist eine Desynchronisation aufgetreten und die beiden Sequenznummern sind nicht vergleichbar.

  4. Wenn festgestellt wird, dass zwei Sequenznummern nicht vergleichbar sind, d. h. die Ergebnisse des Vergleichs nicht definiert sind, sollte ein Knoten den Vergleich so betrachten, als ob er so ausgewertet wurde, dass der Sequenznummer Vorrang gegeben wird, die zuletzt als inkrementierend beobachtet wurde. Andernfalls sollte der Knoten den Vergleich so betrachten, als ob er so ausgewertet wurde, dass die resultierenden Änderungen an seinem eigenen Zustand minimiert werden.