8. Protocol Packet Processing (プロトコルパケット処理)
本章では、OSPF ルーターが受信したプロトコルパケットをどのように処理するかを詳しく説明します。これは OSPF 実装の中核部分であり、すべてのパケットタイプの処理ロジックをカバーしています。
章の概要 (Chapter Overview)
OSPF は 5 種類の異なるプロトコルパケットを使用し、それぞれに特定の処理フローがあります:
- Hello パケット
- Database Description (DD) パケット
- Link State Request (LSR) パケット
- Link State Update (LSU) パケット
- Link State Acknowledgment (LSAck) パケット
8.1 プロトコルパケットの受信 (Receiving Protocol Packets)
一般的な受信処理 (General Reception Processing)
ステップ 1: IP レイヤー受信
- 宛先アドレス:224.0.0.5 (AllSPFRouters) または 224.0.0.6 (AllDRouters) またはユニキャスト
- プロトコル番号:89 (OSPF)
- IP TTL:1 でなければならない(仮想リンクを除く)
ステップ 2: OSPF ヘッダー検証
| チェック項目 | 要件 | 失敗時の処理 |
|---|---|---|
| Version Number | 2 でなければならない | パケットを破棄 |
| Packet Type | 1-5 が有効 | パケットを破棄 |
| Checksum | 正しくなければならない | パケットを破棄 |
| Area ID | インターフェース設定と一致 | パケットを破棄 |
| Authentication | 検証に合格 | パケットを破棄 |
8.2 Hello パケット処理 (Hello Packet Processing)
Hello パケットの受信
処理フロー
Hello を受信
↓
Hello パラメータを検証
↓
ネイバーを検索/作成
↓
ネイバー状態を更新
↓
DR/BDR 選出チェック
Hello パラメータ検証
一致しなければならないパラメータ
| パラメータ | 説明 | 不一致時の処理 |
|---|---|---|
| Network Mask | ネットワークマスク | パケットを破棄 |
| Hello Interval | Hello 送信間隔 | パケットを破棄 |
| Dead Interval | ネイバー失効間隔 | パケットを破棄 |
| Options | オプションフラグ | パケットを破棄 |
8.3 Database Description パケット処理 (DD Packet Processing)
DD パケットの受信
前提条件
- ネイバー状態が ExStart 以上
- それ以外はパケットを破棄
処理ロジック分岐
分岐 1: ExStart 状態
Master 決定
if (受信した DD フラグに I, M, MS が含まれる):
if (ネイバー Router ID > 本ルーター Router ID):
本ルーターが Slave になる
ネイバーが Master になる
ネイバーのシーケンス番号を受け入れる
else:
この DD を無視
8.4 Link State Request パケット処理 (LSR Packet Processing)
LSR パケットの受信
前提条件
- ネイバー状態が Exchange 以上
- それ以外はパケットを破棄
処理フロー
LSR を受信
↓
要求リストを走査
↓
各 LSA を LSDB で検索
↓
見つかった: LSU 応答に追加
見つからない: BadLSReq イベント
↓
LSU パケットを送信
8.5 Link State Update パケット処理 (LSU Packet Processing)
LSU パケットの受信
処理の複雑さ
- LSU は複数の LSA を含むことができる
- 各 LSA は独立して処理
- 最も複雑なパケットタイプ
LSA 検証
ステップ 1: 基本検証
| チェック項目 | 要件 |
|---|---|
| LS Checksum | 正しくなければならない |
| LS Type | 既知のタイプでなければならない |
| LS Age | MaxAge (3600秒) 以下 |
8.6 Link State Acknowledgment パケット処理 (LSAck Packet Processing)
LSAck パケットの受信
処理フロー
LSAck を受信
↓
確認された LSA ヘッダーリストを走査
↓
Link State Retransmission List で検索
↓
見つかり一致: 再送信リストから削除
見つからないまたは不一致: この確認を無視
8.7 パケット送信 (Sending Protocol Packets)
送信決定
Hello パケット
- 定期的に送信(Hello Interval)
- 宛先:AllSPFRouters (224.0.0.5)
DD パケット
- データベース同期中
- 宛先:ネイバーのユニキャストアドレス
LSU パケット
- LSR への応答:ユニキャスト
- 新しい LSA のフラッディング:マルチキャストまたはユニキャスト
8.8 再送信メカニズム (Retransmission Mechanism)
Link State Retransmission List
用途
- 未確認の LSA を追跡
- 各ネイバーが独立したリストを維持
RxmtInterval
- デフォルト値:5 秒
- 設定可能
- 高遅延リンクでは増加させるべき
技術要点まとめ (Technical Summary)
主要処理原則
-
厳密な検証
- すべてのパケットは複数の検証層を通過
- 不一致は即座に破棄
- プロトコルのセキュリティを保証
-
状態駆動
- ネイバー状態が処理ロジックを決定
- 明確な状態遷移
- 無効な操作を回避
-
信頼性のある伝送
- 確認メカニズム
- 再送信メカニズム
- シーケンス番号検出
参考資料 (References)
- 完全な原文:RFC 2328 Section 8
注意 (Note):プロトコルパケット処理は OSPF 実装の中核です。各パケットタイプの処理フローを理解することは、正しい実装とトラブルシューティングに不可欠です。