7. Contatori di Sequenza
Questa sezione descrive lo schema generale per il bootstrap e il funzionamento dei contatori di sequenza in RPL, come il DODAGVersionNumber nel messaggio DIO, la DAOSequence nel messaggio DAO e la Path Sequence nell'opzione Transit Information.
7.1. Panoramica del Contatore di Sequenza
Questa specifica utilizza tre diversi numeri di sequenza per convalidare la freschezza e la sincronizzazione delle informazioni del protocollo:
-
DODAGVersionNumber: Questo contatore di sequenza è presente nel DIO Base per indicare la Versione del DODAG in fase di formazione. Il DODAGVersionNumber viene incrementato monotonicamente dalla radice ogni volta che la radice decide di formare una nuova Versione del DODAG per riconvalidare l'integrità e consentire che avvenga una riparazione globale. Il DODAGVersionNumber viene propagato invariato verso il Basso del DODAG man mano che i router si uniscono alla nuova Versione del DODAG. Il DODAGVersionNumber è globalmente significativo in un DODAG e indica la Versione del DODAG in cui sta operando un router. Un valore più vecchio (minore) indica che il router di origine non è migrato alla nuova Versione del DODAG e non può essere utilizzato come genitore una volta che il nodo ricevente è migrato alla Versione del DODAG più recente.
-
DAOSequence: Questo contatore di sequenza è presente nel DAO Base per correlare un messaggio DAO e un messaggio DAO ACK. Il numero DAOSequence è localmente significativo per il nodo che emette un messaggio DAO per il proprio consumo per rilevare la perdita di un messaggio DAO e abilitare i nuovi tentativi.
-
Path Sequence (Sequenza del Percorso): Questo contatore di sequenza è presente nell'opzione Transit Information in un messaggio DAO. Lo scopo di questo contatore è differenziare un movimento in cui una rotta più recente sostituisce una obsoleta da uno scenario di ridondanza del percorso in cui esistono più rotte in parallelo per la stessa destinazione. La Path Sequence è globalmente significativa in un DODAG e indica la freschezza della rotta verso la destinazione associata. Un valore più vecchio (minore) ricevuto da un router di origine indica che il router di origine detiene stati di instradamento obsoleti e il router di origine non dovrebbe più essere considerato come un potenziale next hop per la destinazione. La Path Sequence è calcolata dal nodo che annuncia la destinazione, ovvero la Destinazione stessa o un router che annuncia una Destinazione per conto di un host, e rimane invariata mentre il contenuto del DAO viene propagato verso la radice dai router genitori. Se un host non passa un contatore al suo router, allora il router è incaricato di calcolare la Path Sequence per conto dell'host e l'host può registrarsi solo a un router a tale scopo. Se un messaggio DAO contenente la stessa Destinazione viene emesso a più genitori in un dato momento allo scopo di ridondanza del percorso, allora la Path Sequence è la stessa in tutti i messaggi DAO per quella stessa destinazione.
7.2. Funzionamento del Contatore di Sequenza
I contatori di sequenza RPL sono suddivisi in modo "lollipop" [Perlman83], dove i valori da 128 e superiori sono utilizzati come una sequenza lineare per indicare un riavvio e avviare il contatore, e i valori minori o uguali a 127 sono utilizzati come uno spazio di numeri di sequenza circolare di dimensione 128 come in [RFC1982]. Viene data considerazione alla modalità di funzionamento durante la transizione dalla regione lineare alla regione circolare. Infine, quando si opera nella regione circolare, se i numeri di sequenza vengono rilevati come troppo distanti, allora non sono confrontabili, come dettagliato di seguito.
Una finestra di confronto, SEQUENCE_WINDOW = 16, è configurata in base a un valore di 2^N, dove N è definito come 4 in questa specifica.
Per un dato contatore di sequenza:
-
Il contatore di sequenza DOVREBBE essere inizializzato a un valore definito dall'implementazione, che è 128 o superiore prima dell'uso. Un valore raccomandato è 240 (256 - SEQUENCE_WINDOW).
-
Quando un incremento del contatore di sequenza farebbe incrementare il contatore di sequenza oltre il suo valore massimo, il contatore di sequenza DEVE tornare a zero. Quando si incrementa un contatore di sequenza maggiore o uguale a 128, il valore massimo è 255. Quando si incrementa un contatore di sequenza minore di 128, il valore massimo è 127.
-
Quando si confrontano due contatori di sequenza, DEVONO essere applicate le seguenti regole:
-
Quando un primo contatore di sequenza A è nell'intervallo [128..255] e un secondo contatore di sequenza B è in [0..127]:
-
Se (256 + B - A) è minore o uguale a SEQUENCE_WINDOW, allora B è maggiore di A, A è minore di B, e i due non sono uguali.
-
Se (256 + B - A) è maggiore di SEQUENCE_WINDOW, allora A è maggiore di B, B è minore di A, e i due non sono uguali.
Ad esempio, se A è 240 e B è 5, allora (256 + 5 - 240) è 21. 21 è maggiore di SEQUENCE_WINDOW (16); quindi, 240 è maggiore di 5. Come altro esempio, se A è 250 e B è 5, allora (256 + 5 - 250) è 11. 11 è minore di SEQUENCE_WINDOW (16); quindi, 250 è minore di 5.
-
-
Nel caso in cui entrambi i contatori di sequenza da confrontare siano minori o uguali a 127, e nel caso in cui entrambi i contatori di sequenza da confrontare siano maggiori o uguali a 128:
-
Se la grandezza assoluta della differenza tra i due contatori di sequenza è minore o uguale a SEQUENCE_WINDOW, allora viene utilizzato un confronto come descritto in [RFC1982] per determinare le relazioni maggiore di, minore di e uguale.
-
Se la grandezza assoluta della differenza dei due contatori di sequenza è maggiore di SEQUENCE_WINDOW, allora si è verificata una desincronizzazione e i due numeri di sequenza non sono confrontabili.
-
-
-
Se due numeri di sequenza sono determinati come non confrontabili, cioè i risultati del confronto non sono definiti, allora un nodo dovrebbe considerare il confronto come se fosse stato valutato in modo tale da dare la precedenza al numero di sequenza che è stato osservato incrementare più di recente. In mancanza di ciò, il nodo dovrebbe considerare il confronto come se fosse stato valutato in modo tale da minimizzare le modifiche risultanti al proprio stato.