7. Bringing Up Adjacencies (隣接関係の確立)
本章では、OSPF ルーターが隣接関係(Adjacency)を確立および維持する方法を詳しく説明します。隣接関係は OSPF プロトコルの中核であり、どのルーター間でリンクステートデータベースを同期するかを決定します。
章の概要 (Chapter Overview)
隣接関係の確立は多段階のプロセスであり、以下を含みます:
- ネイバー発見
- 双方向通信確認
- マスター/スレーブ関係の協議
- データベース同期
- 完全隣接状態の達成
7.1 ネイバー関係 vs 隣接関係 (Neighbor vs Adjacency)
概念の区別
| 概念 | 定義 | 状態 |
|---|---|---|
| ネイバー (Neighbor) | Hello プロトコルで発見された直接接続ルーター | 2-Way 以上 |
| 隣接 (Adjacency) | LSDB を同期するネイバー | Full 状態 |
7.2 ネイバー状態機械 (Neighbor State Machine)
状態遷移図
Down → Init → 2-Way → ExStart → Exchange → Loading → Full
↓
(隣接を確立しない)
状態の詳細
1. Down (失効)
- 初期状態
- Hello パケットを受信していない
- ネイバーが到達不能
2. Init (初期化)
- ネイバーから Hello パケットを受信
- Hello に本ルーターが含まれていない
- 単方向通信
3. 2-Way (双方向通信)
- 受信した Hello に本ルーター ID が含まれる
- 双方向通信が確立
- 決定点:隣接関係を確立するか
4. ExStart (交換開始)
- マスター/スレーブ関係を協議
- Router ID が大きい方が Master
- 初期 DD シーケンス番号を決定
5. Exchange (データベース記述)
- データベース記述パケット(DD)を交換
- ローカル LSDB の内容を記述
- 完全な LSA ではなく、LSA ヘッダーのみ
6. Loading (ロード)
- 欠落または期限切れの LSA を要求
- Link State Request(LSR)を送信
- Link State Update(LSU)を受信
7. Full (完全隣接)
- データベースが完全に同期
- 正常運用状態
- ルート計算可能
7.3 隣接確立決定 (Adjacency Formation Decision)
決定マトリクス
| ネットワークタイプ | 誰と隣接を確立 | 理由 |
|---|---|---|
| ポイントツーポイント | すべてのネイバー | 1 つのネイバーのみ |
| ポイントツーマルチポイント | すべてのネイバー | 複数のポイントツーポイントとして扱う |
| ブロードキャスト | DR と BDR | 隣接数を削減 |
| NBMA | DR と BDR | 隣接数を削減 |
7.4 DR と BDR の選出 (DR/BDR Election)
選出アルゴリズム
選出タイミング
- インターフェース状態が Waiting から DR または DROther に遷移
- Hello パケットが再計算をトリガー
選出ルール
-
優先度比較
- Router Priority = 0:選出に参加しない
- 優先度が高いほど優先
-
Router ID 比較
- 優先度が同じ場合、Router ID が大きい方が勝利
-
2 段階選出
- 第 1 段階:BDR を選出
- 第 2 段階:DR を選出
7.5 データベース記述パケット (Database Description Packets)
DD パケット形式
ヘッダーフィールド
| フィールド | サイズ | 説明 |
|---|---|---|
| Interface MTU | 16ビット | インターフェース MTU サイズ |
| Options | 8ビット | オプション機能 |
| Flags | 8ビット | I/M/MS フラグ |
| DD Sequence Number | 32ビット | シーケンス番号 |
フラグビットの説明
- I (Init): 最初の DD パケット
- M (More): 後続の DD パケットあり
- MS (Master/Slave): 1=Master, 0=Slave
7.6 Link State Request パケット (LSR Packets)
LSR 生成タイミング
トリガー条件
- Exchange 状態:ネイバーがより新しい LSA を持っている
- Loading 状態:欠落している LSA の要求を続行
- Full 状態:時折欠落している LSA を要求
7.7 Link State Update パケット (LSU Packets)
LSU の用途
使用シナリオ
- LSR への応答(ユニキャスト)
- 新しい LSA のフラッディング(マルチキャスト/ブロードキャスト)
- 定期的な LSA のリフレッシュ
7.8 Link State Acknowledgment パケット (LSAck Packets)
確認タイミング
遅延確認
- 複数の LSA を受信後にバッチ確認
- 遅延時間は通常 < 1 秒
- パケット数を削減
即座確認
- 重複した LSA を受信
- より古い LSA インスタンスを受信
7.9 隣接の維持 (Adjacency Maintenance)
Hello プロトコルの役割
継続的監視
- 定期的に Hello パケットを送信
- ネイバーの Hello を監視
- Dead Interval 内に Hello を受信しない場合、ネイバーは失効
Hello 間隔
- ポイントツーポイント/ブロードキャスト:10 秒
- NBMA:30 秒
Dead 間隔
- デフォルト:Hello Interval × 4
- ポイントツーポイント/ブロードキャスト:40 秒
- NBMA:120 秒
7.10 隣接確立の例 (Adjacency Formation Examples)
例 1: ポイントツーポイントリンク
Router A ←────────→ Router B
ステップ 1: 双方が Hello を送信
A → B: Hello (ネイバーリストが空)
B → A: Hello (ネイバーリストが空)
ステップ 2: 双方向通信を確認
A → B: Hello (ネイバーリストに B を含む)
B → A: Hello (ネイバーリストに A を含む)
状態: 2-Way
ステップ 3: マスター/スレーブを協議
A → B: DD (I, M, MS=1, Seq=X)
B → A: DD (I, M, MS=0, Seq=X)
A が Master になる
ステップ 4: データベース記述を交換
A → B: DD (M, MS=1, Seq=X+1) [LSAヘッダーリスト]
B → A: DD (M, MS=0, Seq=X+1) [LSAヘッダーリスト]
...交換が完了するまで続行
ステップ 5: 欠落している LSA を要求
A → B: LSR [LSA 1, 2, 3 を要求]
B → A: LSU [LSA 1, 2, 3]
A → B: LSAck [1, 2, 3 を確認]
ステップ 6: Full 状態に到達
状態: Full
ルート計算可能
技術要点まとめ (Technical Summary)
主要メカニズム
-
状態機械駆動
- 明確な状態遷移
- 7 つのネイバー状態
- イベント駆動の動作
-
信頼性のある同期
- シーケンス番号メカニズム
- 確認と再送信
- Master/Slave 調整
-
最適化設計
- DR/BDR が隣接を削減
- バッチ確認がトラフィックを削減
- 段階的なデータベース同期
参考資料 (References)
- 完全な原文:RFC 2328 Section 7
注意 (Note):隣接関係の確立は OSPF プロトコルの基礎です。状態遷移とパケット交換順序を理解することは、トラブルシューティングに不可欠です。