Aller au contenu principal

7. Compteurs de Séquence

Cette section décrit le schéma général d'amorçage et de fonctionnement des compteurs de séquence dans RPL, tels que le DODAGVersionNumber dans le message DIO, la DAOSequence dans le message DAO, et la Séquence de Chemin (Path Sequence) dans l'option d'Information de Transit.

7.1. Aperçu des Compteurs de Séquence

Cette spécification utilise trois numéros de séquence différents pour valider la fraîcheur et la synchronisation des informations du protocole :

  • DODAGVersionNumber : Ce compteur de séquence est présent dans la Base DIO pour indiquer la Version du DODAG en cours de formation. Le DODAGVersionNumber est incrémenté de manière monotone par la racine chaque fois que la racine décide de former une nouvelle Version du DODAG afin de revalider l'intégrité et de permettre une réparation globale. Le DODAGVersionNumber est propagé tel quel vers le bas du DODAG à mesure que les routeurs rejoignent la nouvelle Version du DODAG. Le DODAGVersionNumber a une signification globale dans un DODAG et indique la Version du DODAG dans laquelle un routeur opère. Une valeur plus ancienne (inférieure) indique que le routeur d'origine n'a pas migré vers la nouvelle Version du DODAG et ne peut pas être utilisé comme parent une fois que le nœud récepteur a migré vers la Version du DODAG plus récente.

  • DAOSequence : Ce compteur de séquence est présent dans la Base DAO pour corréler un message DAO et un message DAO ACK. Le numéro DAOSequence a une signification locale pour le nœud qui émet un message DAO pour sa propre consommation afin de détecter la perte d'un message DAO et de permettre les tentatives.

  • Séquence de Chemin (Path Sequence) : Ce compteur de séquence est présent dans l'option d'Information de Transit dans un message DAO. Le but de ce compteur est de différencier un mouvement où une route plus récente remplace une route obsolète d'un scénario de redondance de route où plusieurs routes existent en parallèle pour la même cible. La Séquence de Chemin a une signification globale dans un DODAG et indique la fraîcheur de la route vers la cible associée. Une valeur plus ancienne (inférieure) reçue d'un routeur d'origine indique que le routeur d'origine détient des états de routage obsolètes et que le routeur d'origine ne doit plus être considéré comme un prochain saut potentiel pour la cible. La Séquence de Chemin est calculée par le nœud qui annonce la cible, c'est-à-dire la Cible elle-même ou un routeur qui annonce une Cible pour le compte d'un hôte, et reste inchangée lorsque le contenu du DAO est propagé vers la racine par les routeurs parents. Si un hôte ne transmet pas de compteur à son routeur, alors le routeur est chargé de calculer la Séquence de Chemin pour le compte de l'hôte et l'hôte ne peut s'enregistrer qu'auprès d'un seul routeur à cette fin. Si un message DAO contenant la même Cible est émis vers plusieurs parents à un moment donné à des fins de redondance de route, alors la Séquence de Chemin est la même dans tous les messages DAO pour cette même cible.

7.2. Fonctionnement des Compteurs de Séquence

Les compteurs de séquence RPL sont subdivisés à la manière d'une « sucette » (lollipop) [Perlman83], où les valeurs de 128 et plus sont utilisées comme une séquence linéaire pour indiquer un redémarrage et amorcer le compteur, et les valeurs inférieures ou égales à 127 sont utilisées comme un espace de numéros de séquence circulaire de taille 128 comme dans [RFC1982]. Une attention particulière est accordée au mode de fonctionnement lors de la transition de la région linéaire à la région circulaire. Enfin, lors du fonctionnement dans la région circulaire, si des numéros de séquence sont détectés comme étant trop éloignés, alors ils ne sont pas comparables, comme détaillé ci-dessous.

Une fenêtre de comparaison, SEQUENCE_WINDOW = 16, est configurée sur la base d'une valeur de 2^N, où N est défini comme étant 4 dans cette spécification.

Pour un compteur de séquence donné :

  1. Le compteur de séquence DEVRAIT être initialisé à une valeur définie par l'implémentation, qui est de 128 ou plus avant utilisation. Une valeur recommandée est 240 (256 - SEQUENCE_WINDOW).

  2. Lorsqu'une incrémentation du compteur de séquence ferait en sorte que le compteur de séquence dépasse sa valeur maximale, le compteur de séquence DOIT revenir à zéro. Lors de l'incrémentation d'un compteur de séquence supérieur ou égal à 128, la valeur maximale est 255. Lors de l'incrémentation d'un compteur de séquence inférieur à 128, la valeur maximale est 127.

  3. Lors de la comparaison de deux compteurs de séquence, les règles suivantes DOIVENT être appliquées :

    1. Lorsqu'un premier compteur de séquence A est dans l'intervalle [128..255] et un second compteur de séquence B est dans [0..127] :

      1. Si (256 + B - A) est inférieur ou égal à SEQUENCE_WINDOW, alors B est supérieur à A, A est inférieur à B, et les deux ne sont pas égaux.

      2. Si (256 + B - A) est supérieur à SEQUENCE_WINDOW, alors A est supérieur à B, B est inférieur à A, et les deux ne sont pas égaux.

      Par exemple, si A est 240, et B est 5, alors (256 + 5 - 240) est 21. 21 est supérieur à SEQUENCE_WINDOW (16) ; ainsi, 240 est supérieur à 5. Comme autre exemple, si A est 250 et B est 5, alors (256 + 5 - 250) est 11. 11 est inférieur à SEQUENCE_WINDOW (16) ; ainsi, 250 est inférieur à 5.

    2. Dans le cas où les deux compteurs de séquence à comparer sont inférieurs ou égaux à 127, et dans le cas où les deux compteurs de séquence à comparer sont supérieurs ou égaux à 128 :

      1. Si la magnitude absolue de la différence entre les deux compteurs de séquence est inférieure ou égale à SEQUENCE_WINDOW, alors une comparaison telle que décrite dans [RFC1982] est utilisée pour déterminer les relations supérieur à, inférieur à et égal.

      2. Si la magnitude absolue de la différence des deux compteurs de séquence est supérieure à SEQUENCE_WINDOW, alors une désynchronisation s'est produite et les deux numéros de séquence ne sont pas comparables.

  4. Si deux numéros de séquence sont déterminés comme n'étant pas comparables, c'est-à-dire que les résultats de la comparaison ne sont pas définis, alors un nœud devrait considérer la comparaison comme si elle avait été évaluée de manière à donner la priorité au numéro de séquence qui a été le plus récemment observé comme s'incrémentant. À défaut, le nœud devrait considérer la comparaison comme si elle avait été évaluée de manière à minimiser les changements résultants sur son propre état.