OSPFプロトコルとは
動的ルーティングプロトコルは、ネットワークの変化に自動的に対応できるため、大規模なネットワークにおいて静的ルーティングよりも広く採用されています。OSPF(Open Shortest Path First)は、リンクステートアルゴリズムを採用した代表的なIGP(Interior Gateway Protocol)であり、RFC2328で標準化されています。
静的ルーティングの限界
静的ルートは手動設定が必要であり、以下の問題があります:
- ネットワーク規模が大きくなると、設定作業が膨大になる。
- トポロジ変更時に自動収束せず、手動での修正が必要。
動的ルーティングプロトコルの分類
距離ベクトル型プロトコル
距離ベクトル型プロトコルでは、ルータは自身のルーティングテーブルを定期的に近隣に送信します。各ルータは宛先までの「方向」と「距離」のみを把握し、ネットワーク全体のトポロジを理解しません。
リンクステート型プロトコル
リンクステート型プロトコルでは、ルータはルート情報ではなく「リンクステート」を交換します。LSA(Link State Advertisement)には、インタフェースの状態やコスト、接続先などが記述されます。
LSAフラッディング
OSPFルータは、隣接関係を構築した後、LSAを相互にフラッディングします。
LSDBの構築
各ルータは受信したLSAをLSDB(Link State Database)に格納し、ネットワーク全体のトポロジを把握します。
SPF計算
各ルータはLSDBを基に、SPF(Shortest Path First)アルゴリズムを実行し、自身をルートとする最短路のツリーを生成します。
ルーティングテーブルの生成
SPF計算で得られた最適パスをルーティングテーブルに登録します。
OSPFの基本的な用語
エリア(Area)
OSPFエリアは、ルータを論理的にグループ化するための識別子(Area ID)です。これにより、LSAのフラッディング範囲を制限できます。
Router-ID
OSPFドメイン内でルータを一意に識別するためのIDです。手動設定または自動選択されます。
コスト(Cost)
OSPFのメトリックはコストで表され、各インタフェースに設定されます。デフォルトのコストは 100 Mbit/s / インタフェース帯域幅 で計算されます。経路全体のコストは、宛先から自身までの入り口インタフェースのコストの合計です。
OSPFプロトコルメッセージ
| メッセージ名 | 機能 |
|---|---|
| Hello | 定期的に送信され、近隣関係の検出と維持に使用。 |
| Database Description (DD) | LSDBの概要情報を交換し、データベース同期の開始に使用。 |
| Link State Request (LSR) | 不足するLSAを要求。 |
| Link State Update (LSU) | 要求されたLSAを送信。 |
| Link State Acknowledgment (LSAck) | 受信したLSAの確認応答。 |
OSPFの三大テーブル
近隣テーブル
display ospf peer コマンドで確認でき、OSPF近隣関係の状態を表示します。
LSDBテーブル
display ospf lsdb コマンドで確認でき、LSAのタイプや発信元ルータ(AdvRouter)が表示されます。
OSPFルーティングテーブル
display ospf routing コマンドで確認でき、宛先、コスト、ネクストホップなどが含まれます。これはシステムのルーティングテーブルとは別のものです。
OSPFの動作原理
近隣関係と隣接関係
OSPFルータ間には2つの関係があります:
- 近隣関係: Helloメッセージの交換により確立。
- 隣接関係: DD、LSR、LSU、LSAckの交換を経てLSDBが完全に同期した後に確立。隣接関係が確立されて初めてルーティング計算が行われます。
隣接関係確立の流れ
- 近隣関係の確立: Helloメッセージでお互いを発見。
- マスター/スレーブの選出: DDメッセージのシーケンス番号を使用。
- LSDB情報の交換: DDメッセージでLSDBの概要を交換。
- LSDBの同期: LSRとLSUを使用して不足情報を補完。
ネットワークタイプ
OSPFは4つのネットワークタイプをサポート: Broadcast、NBMA、P2MP、P2P。デフォルトはインタフェースのデータリンク層に依存し、両端で一致している必要があります。手動で変更可能です。
DRとBDR
マルチアクセスネットワーク(例:Ethernet)では、全ルータ間で隣接関係を張るとオーバーヘッドが大きいため、DR(Designated Router)とBDR(Backup Designated Router)を選出します。DRotherルータはDR/BDRとのみ隣接関係を確立し、DRother同士は2-way状態で止まります。BDRはDR障害時に引き継ぎます。
シングルエリアとマルチエリア
OSPFドメインは1つ以上のエリアで構成されます。
- シングルエリア: 設計は簡単ですが、大規模になるとLSDBが巨大化し、SPF計算負荷が高まります。
- マルチエリア: LSAフラッディングをエリア内に制限し、トポロジ変更の影響を局所化。ルート集約によりルーティングテーブルを縮小。
ルータの種類
- Internal Router: 単一エリア内のみ。
- ABR (Area Border Router): 複数エリアを接続。
- Backbone Router: バックボーンエリア(Area 0)に属する。
- ASBR (AS Boundary Router): 外部ネットワークと接続。
OSPFの基本設定
設定コマンド
OSPFプロセスの作成(システムビュー)
[Huawei] ospf [ process-id | router-id router-id ]process-id のデフォルトは1。router-id は手動指定可能。
エリアの作成と移動(OSPFビュー)
[Huawei-ospf-1] area area-idarea-id は整数(0~4294967295)またはドット付き10進数。
インタフェースの指定(エリアビュー)
[Huawei-ospf-1-area-0.0.0.0] network network-address wildcard-maskwildcard-mask はサブネットマスクの反転。
コストの設定(インタフェースビュー)
[Huawei-GE1/0/1] ospf cost costcost は1~65535。デフォルトは帯域幅から自動計算。
帯域幅参照値の変更(OSPFビュー)
[Huawei-ospf-1] bandwidth-reference valuevalue は1~2147483648(Mbit/s)、デフォルトは100。
DR優先度の設定(インタフェースビュー)
[Huawei-GigabitEthernet0/0/0] ospf dr-priority prioritypriority は0~255。値が大きいほど優先。
設定例
トポロジ: R1(1.1.1.1/32)とR3(3.3.3.3/32)をR2経由で接続。エリア0とエリア1を使用。
1. インタフェースの設定
#R1
[R1] interface LoopBack 0
[R1-LoopBack0] ip address 1.1.1.1 32
[R1-LoopBack0] interface GigabitEthernet 0/0/0
[R1-GigabitEthernet0/0/0] ip address 10.1.12.1 30
#R3
[R3] interface LoopBack 0
[R3-LoopBack0] ip address 3.3.3.3 32
[R3-LoopBack0] interface GigabitEthernet 0/0/1
[R3-GigabitEthernet0/0/1] ip address 10.1.23.2 30
2. OSPFの設定
#R1
[R1] ospf 1 router-id 1.1.1.1
[R1-ospf-1] area 0
[R1-ospf-1-area-0.0.0.0] network 1.1.1.1 0.0.0.0
[R1-ospf-1-area-0.0.0.0] network 10.1.12.0 0.0.0.3
#R2
[R2] ospf 1 router-id 2.2.2.2
[R2-ospf-1] area 0
[R2-ospf-1-area-0.0.0.0] network 10.1.12.0 0.0.0.3
[R2-ospf-1-area-0.0.0.0] area 1
[R2-ospf-1-area-0.0.0.1] network 10.1.23.0 0.0.0.3
#R3
[R3] ospf 1 router-id 3.3.3.3
[R3-ospf-1] area 1
[R3-ospf-1-area-0.0.0.1] network 3.3.3.3 0.0.0.0
[R3-ospf-1-area-0.0.0.1] network 10.1.23.0 0.0.0.3
3. 確認
<R2> display ospf peer brief
OSPF Process 1 with Router ID 2.2.2.2
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet0/0/0 1.1.1.1 Full
0.0.0.1 GigabitEthernet0/0/1 3.3.3.3 Full
<R1> display ip routing-table
...
Destination/Mask Proto Pre Cost Flags NextHop Interface
3.3.3.3/32 OSPF 10 2 D 10.1.12.2 GigabitEthernet0/0/0
<R1> ping -a 1.1.1.1 3.3.3.3
Reply from 3.3.3.3: bytes=56 Sequence=1 ttl=254 time=50 ms
各ルータの近隣状態がFullであること、R1がOSPFで3.3.3.3/32を学習し、pingが成功していることを確認。