付録 D. IsRouter フラグルールの要約 (Summary of IsRouter Rules)
この付録では、近隣キャッシュエントリで IsRouter フラグを維持および使用するためのルールを要約します。
D.1. 概要 (Overview)
近隣キャッシュエントリの IsRouter フラグは、近隣がルータであることが既知かどうかを示します。この情報は適切なパケット転送に不可欠であり、近隣探索動作のいくつかの側面に影響します。
D.2. IsRouter フラグの設定 (Setting the IsRouter Flag)
IsRouter フラグは、次の場合に TRUE に設定されます:
-
Router Advertisement を受信: 近隣から Router Advertisement を受信した場合、その近隣の IsRouter フラグを TRUE に設定しなければなりません (MUST)。
-
Router フラグ付き Neighbor Advertisement: Router (R) フラグが設定された Neighbor Advertisement を受信した場合、IsRouter フラグを TRUE に設定しなければなりません (MUST)。
-
Router Solicitation を送信: Router Solicitation を送信する際、宛先の近隣キャッシュエントリが作成されるか既に存在する場合、実装は IsRouter を TRUE に設定してもよい (MAY)(ただし、通常 Router Solicitation は全ルータマルチキャストアドレスに送信されます)。
D.3. IsRouter フラグのクリア (Clearing the IsRouter Flag)
IsRouter フラグは、次の場合に FALSE に設定されます:
-
Router フラグなしの Neighbor Advertisement: Router (R) フラグがクリア(0に設定)された Neighbor Advertisement を受信した場合、IsRouter フラグを FALSE に設定しなければなりません (MUST)。
-
Router Lifetime の満了: Default Router List 内のルータの Router Lifetime が満了した場合、IsRouter フラグは TRUE のままですが、ルータは Default Router List から削除されます。
D.4. IsRouter フラグの使用 (Using the IsRouter Flag)
IsRouter フラグはいくつかの方法で動作に影響します:
D.4.1. Default Router List 管理
- IsRouter = TRUE の近隣のみが Default Router List に追加可能
- IsRouter が TRUE から FALSE に変更されると、近隣は Default Router List から削除されなければなりません (MUST)
D.4.2. Redirect メッセージ処理
Redirect メッセージを処理する場合:
- リダイレクトのターゲットが宛先と異なる場合、ターゲットはより良い最初のホップルータとして示されています
- リダイレクトターゲットの IsRouter フラグは TRUE に設定されるべきです (SHOULD)
D.4.3. Neighbor Advertisement 処理
IsRouter=TRUE の近隣から R=0 の Neighbor Advertisement を受信した場合:
- IsRouter を FALSE に設定
- Default Router List から近隣を削除
- これは通常、近隣がルータでなくなったことを示します
D.5. 競合状態と特殊ケース (Race Conditions and Special Cases)
D.5.1. ルータからホストへの遷移
ルータがホストに遷移する場合:
- ルータは Router Advertisement の送信を停止
- ルータは R=0 の Neighbor Advertisement を送信
- ホストは NA を受信し、IsRouter=FALSE を設定し、Default Router List から削除
- ホスト上の Router Lifetime は最終的に満了(まだ削除されていない場合)
D.5.2. ホストからルータへの遷移
ホストがルータになる場合:
- 新しいルータは Router Advertisement の送信を開始
- ホストは RA を受信し、IsRouter=TRUE を設定
- 新しいルータが Default Router List に追加される
- ルータはプロセスを迅速化するために R=1 の Neighbor Advertisement を送信してもよい (MAY)
D.5.3. 同時メッセージ
Router Advertisement と Neighbor Advertisement (R=0) の両方が近接して受信される場合:
- 受信した順序でメッセージを処理
- 最後に処理されたメッセージが最終的な IsRouter 状態を決定
- Router Advertisement は常に IsRouter=TRUE を設定
- R=0 の Neighbor Advertisement は常に IsRouter=FALSE を設定
D.6. 実装ガイドライン (Implementation Guidelines)
D.6.1. 初期化
新しい近隣キャッシュエントリを作成する場合:
- IsRouter のデフォルト値は FALSE であるべきです (SHOULD)
- 受信したメッセージによって確認された場合にのみ TRUE に設定
D.6.2. 整合性チェック
実装は整合性を確保すべきです (SHOULD):
- IsRouter=TRUE で Default Router List エントリが存在しない場合、これは許容されます(近隣はルータだがデフォルトルータではない)
- Default Router List エントリが存在するが IsRouter=FALSE の場合、これはリストからルータを削除することによって修正されなければならないエラー条件です (MUST)
D.6.3. ログとデバッグ
実装はデバッグのために IsRouter フラグの遷移を記録すべきです (SHOULD):
- IsRouter が FALSE から TRUE に変更される場合
- IsRouter が TRUE から FALSE に変更される場合
- IsRouter が FALSE になったためにルータが Default Router List から削除される場合
D.7. セキュリティ上の考慮事項 (Security Considerations)
IsRouter フラグは攻撃者によって操作される可能性があります:
攻撃: R=0 の悪意のある Neighbor Advertisement
- 攻撃者は正当なルータに対して R=0 の NA を送信
- ホストは Default Router List からルータを削除
- トラフィックが中断される
軽減策:
- 近隣探索メッセージを認証するために SEND (RFC 3971) を使用
- IsRouter フラグ変更に対する合理的なレート制限を実装
- 疑わしいパターン(頻繁な IsRouter 遷移)を監視
D.8. 状態遷移の例 (Example State Transitions)
例1: 通常のルータ探索
初期: 近隣キャッシュエントリなし
アクション: fe80::1 から Router Advertisement を受信
結果: エントリを作成、IsRouter=TRUE、Default Router List に追加
例2: ルータが利用不可能になる
初期: IsRouter=TRUE、Default Router List 内のルータ
アクション: R=0 の Neighbor Advertisement を受信
結果: IsRouter=FALSE、Default Router List から削除
例3: ルータへのリダイレクト
初期: fe80::2 の近隣キャッシュエントリなし
アクション: fe80::2 をより良いルータとして示す Redirect メッセージを受信
結果: エントリを作成、IsRouter=TRUE(リダイレクトターゲットによって暗示)
D.9. 要約表 (Summary Table)
| イベント | IsRouter に対するアクション | Default Router List への影響 |
|---|---|---|
| RA を受信 | TRUE に設定 | リストに追加(存在しない場合) |
| R=1 の NA を受信 | TRUE に設定 | 直接的な影響なし |
| R=0 の NA を受信 | FALSE に設定 | リストから削除 |
| Redirect を受信 | TRUE に設定(ターゲットに対して) | ターゲットが優先ルータになる |
| Router Lifetime が満了 | 変更なし | リストから削除 |