7. シーケンスカウンタ
本セクションでは、RPL におけるシーケンスカウンタのブートストラップと操作の一般的なスキームについて説明します。これには、DIO メッセージ内の DODAGVersionNumber、DAO メッセージ内の DAOSequence、および Transit Information オプション内の Path Sequence が含まれます。
7.1. シーケンスカウンタの概要
本仕様では、プロトコル情報の鮮度と同期を検証するために、3 つの異なるシーケンス番号を利用します。
-
DODAGVersionNumber: このシーケンスカウンタは、形成されている DODAG のバージョンを示すために DIO Base に存在します。DODAGVersionNumber は、ルートが整合性を再検証し、グローバル修復を行えるようにするために新しいバージョンの DODAG を形成することを決定するたびに、ルートによって単調に増加されます。DODAGVersionNumber は、ルータが新しい DODAG バージョンに参加するにつれて、DODAG を下流に変更されずに伝播されます。DODAGVersionNumber は DODAG においてグローバルに重要であり、ルータが動作している DODAG のバージョンを示します。古い(小さい)値は、発信元ルータが新しい DODAG バージョンに移行しておらず、受信ノードが新しい DODAG バージョンに移行した後は親として使用できないことを示します。
-
DAOSequence: このシーケンスカウンタは、DAO メッセージと DAO ACK メッセージを相関させるために DAO Base に存在します。DAOSequence 番号は、DAO メッセージの損失を検出し、再試行を可能にするために、自身の消費のために DAO メッセージを発行するノードにとってローカルに重要です。
-
パスシーケンス (Path Sequence): このシーケンスカウンタは、DAO メッセージ内の Transit Information オプションに存在します。このカウンタの目的は、新しいルートが古いルートに取って代わる移動と、同じターゲットに対して複数のルートが並行して存在するルート冗長性のシナリオを区別することです。パスシーケンスは DODAG においてグローバルに重要であり、関連するターゲットへのルートの鮮度を示します。発信元ルータから受信した古い(小さい)値は、発信元ルータが古いルーティング状態を保持しており、発信元ルータをターゲットの潜在的なネクストホップとして考慮すべきではないことを示します。パスシーケンスは、ターゲットをアドバタイズするノード、つまりターゲット自体またはホストに代わってターゲットをアドバタイズするルータによって計算され、DAO コンテンツが親ルータによってルートに向かって伝播される際に変更されません。ホストがルータにカウンタを渡さない場合、ルータはホストに代わってパスシーケンスを計算する責任があり、ホストはその目的のために 1 つのルータにのみ登録できます。ルート冗長性の目的で、ある時点で同じターゲットを含む DAO メッセージが複数の親に発行される場合、パスシーケンスはその同じターゲットに対するすべての DAO メッセージで同じです。
7.2. シーケンスカウンタの操作
RPL シーケンスカウンタは、「ロリポップ」方式 [Perlman83] で細分化されており、128 以上の値は再起動を示し、カウンタをブートストラップするための線形シーケンスとして使用され、127 以下の値は [RFC1982] のようにサイズ 128 の循環シーケンス番号空間として使用されます。線形領域から循環領域へ移行する際の動作モードについて考慮されています。最後に、循環領域で動作しているときに、シーケンス番号が離れすぎていることが検出された場合、以下に詳述するように、それらは比較できません。
比較ウィンドウ SEQUENCE_WINDOW = 16 は、2^N の値に基づいて構成され、ここで N は本仕様では 4 と定義されています。
特定のシーケンスカウンタについて:
-
シーケンスカウンタは、使用前に実装定義の値(128 以上)に初期化されるべきです (SHOULD)。推奨値は 240 (256 - SEQUENCE_WINDOW) です。
-
シーケンスカウンタの増加によってシーケンスカウンタが最大値を超えて増加する場合、シーケンスカウンタはゼロにラップバックしなければなりません (MUST)。128 以上のシーケンスカウンタを増加させる場合、最大値は 255 です。128 未満のシーケンスカウンタを増加させる場合、最大値は 127 です。
-
2 つのシーケンスカウンタを比較する場合、以下のルールを適用しなければなりません (MUST):
-
最初のシーケンスカウンタ A が区間 [128..255] にあり、2 番目のシーケンスカウンタ B が [0..127] にある場合:
-
(256 + B - A) が SEQUENCE_WINDOW 以下の場合、B は A より大きく、A は B より小さく、2 つは等しくありません。
-
(256 + B - A) が SEQUENCE_WINDOW より大きい場合、A は B より大きく、B は A より小さく、2 つは等しくありません。
例えば、A が 240 で B が 5 の場合、(256 + 5 - 240) は 21 です。21 は SEQUENCE_WINDOW (16) より大きいため、240 は 5 より大きいです。別の例として、A が 250 で B が 5 の場合、(256 + 5 - 250) は 11 です。11 は SEQUENCE_WINDOW (16) より小さいため、250 は 5 より小さいです。
-
-
比較する両方のシーケンスカウンタが 127 以下の場合、および比較する両方のシーケンスカウンタが 128 以上の場合:
-
2 つのシーケンスカウンタ間の差の絶対値が SEQUENCE_WINDOW 以下の場合、[RFC1982] で説明されている比較を使用して、より大きい、より小さい、および等しいの関係を決定します。
-
2 つのシーケンスカウンタ間の差の絶対値が SEQUENCE_WINDOW より大きい場合、非同期が発生しており、2 つのシーケンス番号は比較できません。
-
-
-
2 つのシーケンス番号が比較できないと判断された場合、つまり比較の結果が定義されていない場合、ノードは、最も最近増加が観測されたシーケンス番号を優先するように評価されたものとして比較を考慮すべきです。これができない場合、ノードは、自身の状態への変更を最小限に抑えるように評価されたものとして比較を考慮すべきです。