3-5 OSPF — リンクステート型と SPF / LSDB / Area の三段構え
リンクステート型 OSPF の Hello からの 7 状態遷移、LSDB の Type 1/2/3、SPF (ダイクストラ)、ABR と Stub area の仕組みを整理する。multi-area 構成 (Area 0 + Area 1 stub) を 4 台で実機検証する。
1. 前節の振り返りと本節の内容
第 3 章では、3-3 で距離ベクトル型 (Distance Vector) の RIP (Routing Information Protocol)、3-4 で同系譜の EIGRP (Enhanced Interior Gateway Routing Protocol) を題材に、隣接管理 / メトリック / 収束計算という 3 つの設計軸を見てきました。EIGRP は Hello による隣接管理と DUAL (Diffusing Update Algorithm) による事前計算で、距離ベクトル型の「周期 Update に縛られる」「自身では全体トポロジを持てない」という弱点をかなり埋めています。それでも、根本のところで EIGRP も「隣接が広告してくる metric を信じて自分の経路を決める」というモデル自体は維持しています。
本節の OSPF (Open Shortest Path First) は、この出発点そのものを変えにいきます。隣接が広告するのは「自分はどのリンクを何の cost で持っているか」という リンクの状態 (Link State) だけで、経路の計算は受け取った各ルータが手元で全トポロジを組み立て直して ダイクストラ で自前計算します。隣接の「言い分」を信じる距離ベクトル型に対し、リンクステート型 (Link State) は「事実 (リンクの状態) を共有し、計算は自分でやる」モデルです。
このモデルは規模を上げると有利に効く一方で、LSA (Link State Advertisement) / LSDB (Link State Database) / SPF (Shortest Path First) / Area といった用語階層がいきなり増えます。本節では、Cisco IOS-XE 4 台で Area 0 (backbone) と Area 1 (stub) を持つ multi-area 構成を組み、LSA Type 1〜5 の役割、Type 3 を ABR (Area Border Router) が両方向に注入する流れ、Stub での Type 5 ブロック、SPF 実行回数と計算時間の実機証跡まで一通り押さえます。最後に Phase E で EIGRP との AD (Administrative Distance) 比較 (110 vs 170) を取りに行き、3-4 §10 で予告した「AD 170 観察」を完全に回収します。
実機検証では教科書通りに動く部分 (Stub の Type 5 ブロック / 7 状態遷移 / SPF 実行回数のカウント) と、Cisco IOS-XE の実装に由来する「ギャップ」(Loopback の /32 広告 / EIGRP redistribute との別プレフィックス共存) の両方を、別物として並べて記録します。
2. リンクステート型と距離ベクトル型 — 発想の転換
リンクステート型の発想は 「隣接の経路計算結果を信じるのではなく、全員で同じトポロジ DB (Database) を持って各自で計算する」 という一点に尽きます。距離ベクトル型 (RIP / EIGRP) との対比は以下のとおりです。
| 観点 | 距離ベクトル型 (RIP / EIGRP) | リンクステート型 (OSPF) |
|---|---|---|
| 隣接が広告する内容 | 計算済みの経路 (prefix + metric) | リンクの状態 (どの IF が誰に繋がっていて cost いくつか) |
| トポロジ全体を持つか | 持たない (自分が知っているのは隣接の言い分だけ) | 持つ (LSDB に Area 内の全リンク状態が入る) |
| 経路の計算方法 | 隣接が言う metric +α で評価 | LSDB から 自前で ダイクストラ |
| ループ対策 | Split Horizon / Poison Reverse 等の防衛策 | LSDB の同期と SPF 計算自体がループフリー |
| 規模拡大 | 不利 (Triggered Update でも DB 全体を持てない) | 有利 (Area 分割で LSDB の伝播範囲を局所化できる) |
リンクステート型は「LSDB を全員で同期しておけば、ループは原理的に発生しない」という点が最大の強みで、距離ベクトル型の Split Horizon / Route Poisoning といった防衛策が要らない構造になっています。代償として、LSA の交換 + LSDB の同期 + SPF 計算という 3 段階を全ルータが回す必要があり、初期収束に必要な処理は重くなります。
OSPF はこの三段構えを「LSA で配布 → LSDB に格納 → SPF で計算」という流れで回します。以降の節で、この 3 段階を順に見ていきます。
3. 検証ラボ — 4 ノード multi-area (Area 0 + Area 1 stub)
検証ラボは、3-3 / 3-4 で使った R1/R2/R3 の三角構成に R4 を Area 1 (stub) として追加し、R3 を ABR に仕立てる構成です。Area 0 = backbone は OSPF の規約 (任意の Area は backbone に隣接していなければならない) を満たすため、ABR の役割そのものを観察するために必要な最小構成となります。
| ルータ | Router-ID | 役割 | サービス網 (Loopback) |
|---|---|---|---|
| R1 | 10.0.1.1 | Area 0 internal | Lo10 = 10.10.1.0/24 |
| R2 | 10.0.2.1 | Area 0 internal | Lo20 = 10.20.2.0/24 |
| R3 | 10.0.3.1 | ABR (Area 0 ↔ Area 1) | Lo30 = 10.30.3.0/24 |
| R4 | 10.0.4.1 | Area 1 stub internal | Lo40 = 10.40.4.0/24 |
P2P (Point-to-Point) /31 リンクは Area 0 内で 3 本 (R1↔R2 / R2↔R3 / R1↔R3)、Area 境界が 1 本 (R3↔R4) です。
OSPF を起動する IF は network <ip> <wildcard> area <id> で 1 つずつ選びます。Area 0 internal の R1 を例にとると、Loopback と 3 本のリンクを個別の network 文で Area 0 に入れます (R2 も同様に自分の Loopback とリンクを並べる形です)。
router ospf 1
router-id 10.0.1.1
network 10.0.1.1 0.0.0.0 area 0
network 10.10.1.0 0.0.0.255 area 0
network 10.12.0.0 0.0.0.1 area 0
network 10.13.0.0 0.0.0.1 area 0ABR の R3 は 2 つの area への network 文を持ち、加えて Area 1 を stub にするため area 1 stub を宣言します。
router ospf 1
router-id 10.0.3.1
area 1 stub
network 10.0.3.1 0.0.0.0 area 0
network 10.13.0.0 0.0.0.1 area 0
network 10.23.0.0 0.0.0.1 area 0
network 10.30.3.0 0.0.0.255 area 0
network 10.34.0.0 0.0.0.1 area 1R4 (Area 1 stub) も同じく area 文に stub キーワードを付けます。
router ospf 1
router-id 10.0.4.1
area 1 stub
network 10.0.4.1 0.0.0.0 area 1
network 10.34.0.0 0.0.0.1 area 1
network 10.40.4.0 0.0.0.255 area 1area 1 stub は Area 1 に属する全ルータ (ここでは ABR の R3 と internal の R4) で宣言を一致させる必要があります。一致しないと Hello のオプションフィールドにある E ビット (External routing capability) が食い違い、RFC 2328 §10.5 の規定で受信側がその Hello を破棄するため、そもそも隣接関係が成立しません (E ビットが合わないルータどうしは互いを有効な隣接として認識せず、neighbor テーブルに上がってこない、これも OSPF の罠です)。上の 2 つの設定例を投入すると、R3↔R4 は FULL に達し、ABR の R3 が Area 1 へ default 経路を自動注入します (§8 / §11 で実機確認)。
network <ip> <wildcard> area <id> は EIGRP の network 文と同じく「OSPF を起動する IF (Interface) を選ぶセレクタ」であって、広告するプレフィックスを直接書く構文ではありません。area <id> の指定で「その IF はどの Area に属するか」も同時に決まります。
4. Hello による隣接と 7 状態遷移
OSPF の隣接確立は EIGRP より厳格で、Down → Init → 2-Way → ExStart → Exchange → Loading → Full という 7 つの状態を通って FULL に到達します (本ラボの Broadcast / P2P リンクで観察できる遷移)。各状態の役割を理解すると、トラブル時に show ip ospf neighbor の State を見るだけで「どこで止まっているか」が判別できます。厳密には Loading は 要求すべき LSA が残っている場合だけ経由する状態で、Exchange 完了時に Link State Request リストが空なら Exchange から直接 Full へ遷移します (RFC 2328 §10.3)。また RFC 2328 が定義する neighbor state は全部で 8 つあり、手動 neighbor を使う NBMA 環境でのみ現れる Attempt 状態が加わります。本ラボの構成では Attempt を経由しないため、ここでは通常観察する 7 状態として扱います。
実機で 4 台同時に投入した直後 (約 30 秒待機後) の R1 視点は以下のとおりです。
R1#show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
10.0.3.1 1 FULL/BDR 00:00:31 10.13.0.1 GigabitEthernet3
10.0.2.1 1 FULL/BDR 00:00:36 10.12.0.1 GigabitEthernet2State 列の FULL/<役割> の役割部分 (DR/BDR/DROTHER) は DR (Designated Router) / BDR (Backup DR) 選出の結果です。Hello / Dead タイマーは OSPF の Network Type に依存して既定値が変わり、Broadcast / Point-to-Point では Hello 10 秒 / Dead 40 秒 が既定値となります。show ip ospf interface で実値を確認できます。
R1#show ip ospf interface GigabitEthernet2
GigabitEthernet2 is up, line protocol is up
Internet Address 10.12.0.0/31, Interface ID 8, Area 0
...
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5OSPF の既定値は EIGRP の Hello 5 秒 / Hold 15 秒 と比較すると Hello は遅く、Dead は長くなっています。リンクステート型は隣接が落ちると LSA flooding + SPF 再計算という重い処理が走るため、Hello を頻繁にして「揺れ」で誤検出するコストが高くなります。Hello 間隔の既定値はその設計トレードオフの帰結です。
隣接成立の条件は EIGRP より厳しく、Area ID / Hello & Dead タイマー / サブネットマスク / 認証 / Stub フラグ が一致しないと FULL に上がりません。show ip ospf interface の出力でこれら全てが見えるので、隣接が張れない時はまずここを確認します。なおサブネットマスクの一致は Broadcast / NBMA など共有ネットワークでの条件で、Point-to-Point リンクや Virtual Link では受信 Hello の Network Mask は照合されません (RFC 2328 §10.5。これらのリンクでは Router-ID で隣接を識別する)。本ラボの Ethernet /31 は IOS-XE 既定 Network Type が BROADCAST のため、マスク一致が条件として効いています。
5. DR / BDR の選出と P2P /31 での Network LSA
Multi-access ネットワーク (Ethernet 等) では、N 台居ると N×(N-1)/2 本の隣接が必要になり LSA flooding が爆発します。OSPF は DR / BDR を 1 台ずつ選出し、他のルータ (DROTHER) は DR/BDR とだけ FULL を張ることでこの組み合わせ爆発を抑える設計を持ちます。
選出ロジックは「Priority 高い方が DR、同値なら Router-ID 高い方が勝つ。一度 DR が決まったら後から高い Priority のルータが来ても奪わない (non-preemptive)」というものです。Priority を 0 にすると選出に参加しない (DROTHER 固定) という設定もできます。
本ラボの P2P /31 リンクでも、IOS-XE 既定の Network Type は BROADCAST のため DR/BDR が選出されます。
R1#show ip ospf interface GigabitEthernet2
...Process ID 1, Router ID 10.0.1.1, Network Type BROADCAST, Cost: 1
...Transmit Delay is 1 sec, State DR, Priority 1
Designated Router (ID) 10.0.1.1, Interface address 10.12.0.0
Backup Designated router (ID) 10.0.2.1, Interface address 10.12.0.1ip ospf network point-to-point を IF 単位で明示すると DR/BDR 選出をスキップして純粋な P2P 隣接として扱えます (Hello は 10 秒のまま)。設計の意図を文書化したい場合は明示するのが良いものの、本ラボでは「P2P /31 でも IOS-XE は DR を選ぶ」という既定挙動を そのまま観察対象としています。
DR が選出される影響は Type 2 (Network LSA) の出現に直結します。本来 P2P リンクなら Type 2 は不要ですが、IOS-XE の既定では Net Link States に 10.12.0.0 / 10.13.0.0 / 10.23.0.0 / 10.34.0.0 の 4 本が並びます。
6. LSA Type 一覧 — 何が誰から誰に流れるか
OSPF が交換する情報は LSA という単位で型分けされています。Type 1〜5 と Type 7 (NSSA) の役割を整理すると、show ip ospf database の出力を読む時に迷いません。
| Type | 名前 | 生成元 | 配布範囲 | 役割 | 本ラボでの観察ポイント |
|---|---|---|---|---|---|
| 1 | Router LSA | 全 OSPF ルータ | 同一 Area 内 | 自身のリンク (P2P / Transit / Stub / Virtual) を列挙 | R1/R2/R3 (Area 0) + R3/R4 (Area 1) の Router Link States |
| 2 | Network LSA | DR | 同一 Area 内 | Multi-access ネットワークに居るルータ一覧を集約 (P2P /31 でも IOS-XE は DR を選ぶ) | Net Link States の 10.12.0.0 / 10.13.0.0 / 10.23.0.0 / 10.34.0.0 |
| 3 | Summary LSA | ABR | 別 Area | Area 間でプレフィックスのみ要約配布 (トポロジは渡さない) | R3 が Area 0 と Area 1 へ両方向注入。R1 視点では O IA 10.34.0.0/31 等 |
| 4 | ASBR Summary LSA | ABR | 別 Area | ASBR の到達情報を別 Area に告知 | ASBR 不在のため本ラボでは出現せず |
| 5 | AS-External LSA | ASBR | AS 全域 (stub / NSSA を除く) | OSPF 外プロトコルからの再配送経路 | Stub の R4 は show ip ospf database external が空 = Type 5 ブロックを実機確認 |
| 7 | NSSA External LSA | NSSA 内 ASBR | NSSA 内 → ABR で Type 5 に変換 | Stub では Type 5 が禁じられているため、外部経路を入れたい時に使う NSSA 専用 | NSSA 不使用のため出現せず |
Type 5 を Stub Area がブロックする仕組みが Area 設計の存在意義そのものです (LSDB のサイズを Area 境界で局所化する仕組み)。Type 4 / 7 は概念だけ押さえておけば、後で NSSA (Not So Stubby Area) を使う設計に出会った時に迷いません。
押さえどころは 3 点です。
- Type 1 / 2 は同一 Area 内の生情報。Router LSA (Type 1) が「自分のリンク状態」、Network LSA (Type 2) が「同じ Multi-access に居るルータの集合」。これだけで Area 内の SPF 計算が可能
- Type 3 (Summary LSA) は ABR が Area 境界で要約配布。トポロジ情報は渡さず、プレフィックスと cost だけが別 Area に渡る。これが Area 分割の本質
- Type 5 (AS-External LSA) は AS 全域に拡散される再配送経路。Stub Area / NSSA はこの Type 5 をブロックする設計で、LSDB のサイズを抑える機構
実機ベースで「型に基づいて何が見えるか」を以降の節で順に追います。
7. Area 0 で見る Router LSA と Network LSA
R1 (Area 0 internal) の LSDB で 同一 Area 内 の Type 1 / 2 がどう並ぶかを観察します。show ip ospf database でサマリが出力されます。
R1#show ip ospf database
OSPF Router with ID (10.0.1.1) (Process ID 1)
Router Link States (Area 0)
Link ID ADV Router Age Seq# Checksum Link count
10.0.1.1 10.0.1.1 1687 0x8000000A 0x00BEA4 4
10.0.2.1 10.0.2.1 1588 0x8000000A 0x0070CF 4
10.0.3.1 10.0.3.1 1611 0x8000000A 0x00BB72 4
Net Link States (Area 0)
Link ID ADV Router Age Seq# Checksum
10.12.0.0 10.0.1.1 1687 0x80000002 0x000DF1
10.13.0.0 10.0.1.1 1687 0x80000002 0x000EEE
10.23.0.0 10.0.2.1 1588 0x80000002 0x009759
Summary Net Link States (Area 0)
Link ID ADV Router Age Seq# Checksum
10.0.4.1 10.0.3.1 1611 0x80000002 0x006DAF
10.34.0.0 10.0.3.1 1611 0x80000002 0x00F908
10.40.4.1 10.0.3.1 1611 0x80000002 0x008B69Router Link States (Area 0)に Type 1 が 3 本 (R1/R2/R3 が各自生成)。3 本ともLink count 4で並ぶ。Router-LSA は Area スコープで生成されるため、ABR の R3 が Area 0 用に出す Router-LSA には Area 0 側のリンクだけが載り、Area 1 側の Gi4 は含まれない (ABR は Area ごとに別々の Router-LSA を生成し、Area 1 側のリンクは Area 1 用の Router-LSA に載る)。出力上も R3 の Area 0 Router-LSA が他より多いわけではない点に注意Net Link States (Area 0)に Type 2 が 3 本。Link ID は DR の IF アドレス、ADV Router は DR の Router-ID。R1 がこの 4 台構成では Gi2 / Gi3 両方の DR を取り、R2 が Gi2/Gi3 の BDR と Gi2-R3 間で 1 つの DR を取得Summary Net Link States (Area 0)に Type 3 が 3 本。Area 1 から流れ込んできた経路 (R4 の Lo0, R3↔R4 リンク, R4 の Lo40) で、ADV Router が全部 R3 (ABR) になっているのが Type 3 の特徴
Router LSA の中身を show ip ospf database router で展開すると、R1 が自分の 4 本のリンク (Lo0 / Lo10 / Gi2 / Gi3) をどう申告しているかが分かります。
R1#show ip ospf database router
LS age: 1692
Options: (No TOS-capability, DC)
LS Type: Router Links
Link State ID: 10.0.1.1
Advertising Router: 10.0.1.1
LS Seq Number: 8000000A
Checksum: 0xBEA4
Length: 72
Number of Links: 4
Link connected to: a Stub Network
(Link ID) Network/subnet number: 10.0.1.1
(Link Data) Network Mask: 255.255.255.255
TOS 0 Metrics: 1
Link connected to: a Stub Network
(Link ID) Network/subnet number: 10.10.1.1
(Link Data) Network Mask: 255.255.255.255
TOS 0 Metrics: 1
Link connected to: a Transit Network
(Link ID) Designated Router address: 10.13.0.0
(Link Data) Router Interface address: 10.13.0.0
TOS 0 Metrics: 1
Link connected to: a Transit Network
(Link ID) Designated Router address: 10.12.0.0
(Link Data) Router Interface address: 10.12.0.0
TOS 0 Metrics: 1ここに 本ラボ最初のギャップが現れます。Lo10 = 10.10.1.0/24 (本来サブネット) が、LSDB 上では Link ID = 10.10.1.1 / Network Mask = 255.255.255.255 (= /32 ホスト経路) として広告されています。Cisco OSPF の Loopback IF は既定で LOOPBACK ネットワークタイプとして扱われ、サブネット長に関係なく /32 で広告される仕様です。後段の §13 で再度この挙動が効いてきます (EIGRP redistribute との共存問題)。
ip ospf network point-to-point を Loopback に指定すると本来のサブネット長で広告されますが、本ラボでは既定挙動の方を そのまま観察対象として扱います。
8. ABR の Type 3 双方向注入と Area 跨ぎ経路
ABR である R3 視点の LSDB を見ると、Area 0 と Area 1 の両方の database を持ち、Summary Net Link States が 両方の Area に並んでいることが確認できます。
R3#show ip ospf database
OSPF Router with ID (10.0.3.1) (Process ID 1)
Router Link States (Area 0)
Net Link States (Area 0)
Summary Net Link States (Area 0)
... 3 本 (10.0.4.1 / 10.34.0.0 / 10.40.4.1) ...
Router Link States (Area 1)
Net Link States (Area 1)
Summary Net Link States (Area 1)
... 10 本 (0.0.0.0 default + Area 0 由来の各経路) ...show ip ospf database summary self-originate で R3 自身が生成した Type 3 だけ抽出すると、Area 0 向けに 3 本 (Area 1 由来)、Area 1 向けに 10 本 (Area 0 由来 + default) が並びます。ABR が Type 3 を「両方向」に注入する様子がこのコマンドで実観察できます。
R1 から見ると、Area 1 由来の経路は すべて O IA (OSPF Inter-Area) として RIB (Routing Information Base) に入ります。
R1#show ip route ospf
O IA 10.0.4.1/32 [110/3] via 10.13.0.1, 00:01:18, GigabitEthernet3
O IA 10.34.0.0/31 [110/2] via 10.13.0.1, 00:02:07, GigabitEthernet3
O IA 10.40.4.1/32 [110/3] via 10.13.0.1, 00:01:18, GigabitEthernet3cost は R3 が Type 3 に積んだ値 (R3 → R4 が cost 1, R3 → R4 Lo40 が cost 2) に、R1 → R3 の cost 1 を加算した値となります。Area 跨ぎでも cost は単純加算で連続性が保たれます (NSSA や virtual link が絡むと話が変わりますが、本ラボでは扱いません)。
R4 (Area 1 stub) 視点では逆向きで、Area 0 由来の経路もすべて O IA になります。
R4#show ip route ospf
O*IA 0.0.0.0/0 [110/2] via 10.34.0.0, 00:02:25, GigabitEthernet2
O IA 10.0.1.1/32 [110/3] via 10.34.0.0, 00:02:25, GigabitEthernet2
O IA 10.0.2.1/32 [110/3] via 10.34.0.0, 00:02:25, GigabitEthernet2
O IA 10.0.3.1/32 [110/2] via 10.34.0.0, 00:02:25, GigabitEthernet2
O IA 10.10.1.1/32 [110/3] via 10.34.0.0, 00:02:25, GigabitEthernet2
O IA 10.12.0.0/31 [110/3] via 10.34.0.0, 00:02:25, GigabitEthernet2
O IA 10.13.0.0/31 [110/2] via 10.34.0.0, 00:02:25, GigabitEthernet2
O IA 10.20.2.1/32 [110/3] via 10.34.0.0, 00:02:25, GigabitEthernet2
O IA 10.23.0.0/31 [110/2] via 10.34.0.0, 00:02:25, GigabitEthernet2
O IA 10.30.3.1/32 [110/2] via 10.34.0.0, 00:02:25, GigabitEthernet2O*IA 0.0.0.0/0 の * は「default 候補」のマークで、Stub area の特徴に該当します。
9. SPF — ダイクストラ の実機証跡
OSPF が LSDB から自前で経路を計算する核は ダイクストラ アルゴリズム (Dijkstra Algorithm) で、IOS-XE では show ip ospf statistics detail で 実行回数と各回の計算時間 (msec) が取得できます。
R1#show ip ospf statistics detail
Area 0: SPF algorithm executed 14 times
SPF 11 executed 01:00:37 ago, SPF type Full
SPF calculation time (in msec):
SPT Intra D-Intr Summ D-Summ Ext7 D-Ext7 Total
1 1 2 0 0 0 0 3
LSIDs processed R:3 N:2 Stub:8 SN:0 SA:0 X7:0
...
SPF 14 executed 01:00:32 ago, SPF type Full
SPF calculation time (in msec):
SPT Intra D-Intr Summ D-Summ Ext7 D-Ext7 Total
0 0 0 0 1 0 0 1
LSIDs processed R:3 N:3 Stub:6 SN:1 SA:0 X7:0executed 14 times= OSPF 起動から 14 回の SPF 実行。本ラボの初期収束 (4 ノードが順次 UP) で R1 がこれだけ ダイクストラ を回した結果- 各 SPF の
SPT / Intra / D-Intr / Summ / D-Summがフェーズ別計算時間 (msec)。本ラボサイズでは大半が 0〜3 msec で完了 LSIDs processedは計算に使った各 Type の LSA 数。R:3 (Router LSA 3 本) + N:3 (Network LSA 3 本) + Stub:6 (Stub network 6 本) + SN:1 (Summary 1 本) などのように、Area の構成に応じて変動
SPF type Full は全再計算を意味します。Incremental SPF (iSPF) もありますが本ラボでは無効 (Incremental-SPF disabled) です。
SPF が回る契機は LSDB のトポロジ情報の変化で、Router-LSA / Network-LSA などの内容 (リンクや cost) が変わった時に full SPF が走ります。一方、LSRefreshTime (1800 秒) 周期の LSA Refresh は、内容が変わらない自己生成 LSA の age / sequence / checksum を更新して LSA を maxage で消えないよう延命するメンテナンス動作であり、トポロジ情報が変わらない限り full SPF の契機にはなりません (この 2 つを混同しないことが重要です)。SPF Throttling (Initial SPF schedule delay 50 msecs / Minimum hold time 200 msecs / Maximum wait time 5000 msecs) でバースト時の SPF 実行頻度に上限が掛けられるため、トポロジが連続変動しても CPU を食い潰さない設計となっています。
ECMP (Equal Cost Multi-Path) は SPF が複数の等コスト経路を発見した時に成立します。本ラボでは R1 → R2 への経路が直結 (Gi2) と R3 経由 (Gi3 → 10.13.0.1 → 10.23.0.0/31) では cost が異なるため ECMP は立ちませんが、R2 が広告するネットワーク (例 10.23.0.0/31) は R1 から見て両経路 cost 2 で等コストとなります。
R1#show ip route 10.23.0.0
Routing entry for 10.23.0.0/31
Known via "ospf 1", distance 110, metric 2, type intra area
Routing Descriptor Blocks:
10.13.0.1, from 10.0.2.1, ... via GigabitEthernet3
Route metric is 2, traffic share count is 1
* 10.12.0.1, from 10.0.2.1, ... via GigabitEthernet2
Route metric is 2, traffic share count is 1
R1#show ip cef 10.23.0.0
10.23.0.0/31
nexthop 10.12.0.1 GigabitEthernet2
nexthop 10.13.0.1 GigabitEthernet3RIB に 2 行の Routing Descriptor Blocks、CEF (Cisco Express Forwarding, data plane) にも 2 nexthop が載ります。show ip cef 側は load-balancing の実態を見られるため、ECMP が正しく効いているかは CEF を確認するのが確実です。
10. Cost と Reference Bandwidth の罠
OSPF の cost は Ref-BW / IF 帯域 という単純な式で決まります。Ref-BW (Reference Bandwidth) の既定値は 100 Mbps です。
R1#show ip ospf
Reference bandwidth unit is 100 mbps100 Mbps / 100 Mbps = 1 で 100M IF は cost 1 です。1 Gbps IF は 100 Mbps / 1 Gbps = 0.1 と計算上は 1 未満になりますが、Cisco IOS の OSPF は cost の最小値を 1 とする ため、結果は cost 1 となります。同様に 10 Gbps も 100 Gbps も計算値が 1 を下回り、すべて cost 1 に丸められます。高速 IF どうしの cost 差が消えてしまうため、現代のデータセンターのように 高速 IF が混在する環境では Ref-BW を上げるのが定石です。
router ospf 1
auto-cost reference-bandwidth 100000 ! 100 Gbps を 1 にするauto-cost reference-bandwidth は AS 内全ルータで揃えるのが原則で、揃わないと「同じ IF を見ているのに R1 と R2 で cost が違う」状態が発生して SPF が非対称となります。これも OSPF 運用の典型的な罠で、show ip ospf | include Reference で全台一致を確認するのが正しい運用です。
IF 単位で cost を直接指定する ip ospf cost <value> も使えます。設計意図 (高優先回線、メンテ用バックアップ等) を cost で表現したい場合はこちらが直接的です。
本ラボの全 IF は 1 Gbps 既定で Ref-BW も既定 100 Mbps のため、全リンクが cost 1 で揃います。これが §9 の ECMP が綺麗に立つ前提となっています。
11. Stub Area と default 経路の自動注入
area 1 stub を ABR (R3) と Area 1 internal (R4) の両端で宣言すると、その Area には Type 5 (AS-External LSA) が一切流れ込まなくなります。代わりに ABR が default 経路 (0.0.0.0/0) を Type 3 として自動注入する仕組みです。LSDB のサイズを抑えつつ、Area 外への到達性は default で確保するという設計となっています。
R3 視点では show ip ospf で Area 1 に明示的に stub フラグが立ち、Generates stub default route with cost 1 が出力されます。
R3#show ip ospf
Area 1
Number of interfaces in this area is 1
It is a stub area
Generates stub default route with cost 1R4 視点で LSDB を見ると、Summary Net Link States の先頭に 0.0.0.0 が並びます。
R4#show ip ospf database
Summary Net Link States (Area 1)
Link ID ADV Router Age Seq# Checksum
0.0.0.0 10.0.3.1 1654 0x80000002 0x003AF4
10.0.1.1 10.0.3.1 1654 0x80000002 0x00AC75
...そして show ip ospf database external が空で返ります。これが Stub における Type 5 完全ブロックの実機証跡で、OSPF の設計が意図通り動いている確認となります。
R4#show ip ospf database external
OSPF Router with ID (10.0.4.1) (Process ID 1)
R4#(返り値 0 件 = OSPF Router with ID ... の行だけ出て中身が無い)
R4 の RIB には O*IA 0.0.0.0/0 (candidate default, inter-area) が乗り、外向きトラフィックは全てこの default で R3 へ向かいます。
R4#show ip route 0.0.0.0
Routing entry for 0.0.0.0/0, supernet
Known via "ospf 1", distance 110, metric 2, candidate default path, type inter area
* 10.34.0.0, from 10.0.3.1, ... via GigabitEthernet2
Route metric is 2, traffic share count is 1candidate default path の表記が O*IA の * の正体です。Gateway of last resort も 10.34.0.0 to network 0.0.0.0 で R3 に向いています。Stub Area の住人にとっては「外の世界の細かい話は知らない、迷ったら ABR」というシンプルな到達性モデルとなります。
Totally Stubby Area (area 1 stub no-summary) を使うと、Type 3 (Area 跨ぎの細かいプレフィックス) すらブロックして default だけになります。NSSA (area 1 nssa) は Type 5 をブロックしつつ NSSA 内で発生した再配送経路だけ Type 7 で吸収する亜種です。これらは概念だけ押さえておけば、設計時に「LSDB を更に絞りたい / NSSA 内で再配送したい」というニーズに応じて選択できます。
12. 再配送と Type 5 / ASBR
OSPF 外のプロトコル (EIGRP / BGP (Border Gateway Protocol) / static 等) からの経路を OSPF に持ち込むのが 再配送 (Redistribution) で、再配送するルータが ASBR (AS Boundary Router) となります。ASBR が生成する LSA が Type 5 (AS-External LSA) で、AS 全域に flooding されます (Stub / NSSA を除く)。
本ラボの Phase E では逆向き、つまり OSPF → EIGRP の再配送を R3 で実施します (R1/R2/R3 に EIGRP 100 を「相乗り」で投入する設計)。R4 は OSPF Area 1 stub の internal のままで、EIGRP には参加しません。
R3 の設定は以下の形となります。
router eigrp 100
network 10.13.0.0 0.0.0.1
network 10.23.0.0 0.0.0.1
redistribute ospf 1 metric 100000 100 255 1 1500EIGRP の network <ip> <wildcard> は wildcard に一致するローカル IF を EIGRP 対象に選びます。本ラボの R3 側 IF アドレスは 10.13.0.1 / 10.23.0.1 なので、/31 リンクの両端 (.0 と .1) を含めるため wildcard は 0.0.0.1 とします (0.0.0.0 だと 10.13.0.0 完全一致のみで、R3 の 10.13.0.1 を拾えません。R3 の実 IF アドレスを直接書くなら network 10.13.0.1 0.0.0.0 でも可)。
metric 100000 100 255 1 1500 は EIGRP の seed metric (帯域 / 遅延 / 信頼性 / 負荷 / MTU) です。EIGRP は seed metric を明示しないと redistribute された経路を捨てる仕様なので、ここで指定が必要となります (RIP の default-metric 文に相当)。
この図は「教科書通りの AD 比較」を演出として描いたものです。実機では Loopback の /32 既定広告で一度プレフィックスがズレるため、§13 では Loopback を point-to-point 化して同一 /24 に揃え直し、そこで初めて教科書どおりの AD 対決が観察できる二段構成で進めます。
show ip eigrp topology で R1 視点を見ると、OSPF 由来の経路が route is External / External protocol is OSPF として乗っています。
R1#show ip eigrp topology 10.30.3.0/24
EIGRP-IPv4 Topology Entry for AS(100)/ID(10.10.1.1) for 10.30.3.0/24
State is Passive, Query origin flag is 1, 1 Successor(s), FD is 51456
Descriptor Blocks:
10.13.0.1 (GigabitEthernet3), from 10.13.0.1, Send flag is 0x0
Composite metric is (51456/51200), route is External
...
External data:
AS number of route is 1
External protocol is OSPF, external metric is 0
Administrator tag is 0 (0x00000000)route is External の判定と External protocol is OSPF の付帯情報が、AD 170 を引き寄せる根拠です。本来であれば同じ宛先に対して OSPF (AD 110) と EIGRP external (AD 170) の両方が候補にあがった時に AD 比較で OSPF が勝つ、というのが教科書通りの流れとなります。
ところが、本ラボで実観察してみると、教科書通りの「同じプレフィックスでの AD 比較」は起こりません。これが §13 のテーマです。
13. AD 170 実観察 + 同一 /24 での AD 対決 (3-4 §10 回収)
3-4 EIGRP の §10 で「OSPF からの再配送なら AD 170 = D EX が観察できる」と予告されています。Phase E で実機投入すると、確かに R1 の RIB に D EX 10.30.3.0/24 [170/51456] が乗ります。
R1#show ip route eigrp
10.0.0.0/8 is variably subnetted, 17 subnets, 3 masks
D 10.20.2.0/24 [90/130816] via 10.12.0.1, 00:01:15, GigabitEthernet2
D 10.23.0.0/31 [90/3072] via 10.13.0.1, 00:01:17, GigabitEthernet3
[90/3072] via 10.12.0.1, 00:01:17, GigabitEthernet2
D EX 10.30.3.0/24 [170/51456] via 10.13.0.1, 00:01:07, GigabitEthernet3show ip route 10.30.3.0 で詳細を見ると、distance 170 / type external まで明示されます。3-4 §10 の予告は完全に回収されました。
R1#show ip route 10.30.3.0
Routing entry for 10.30.3.0/24
Known via "eigrp 100", distance 170, metric 51456, precedence routine (0), type external
Redistributing via eigrp 100ここまでは想定通りです。ただし、この状態のままでは「同じ宛先で OSPF と EIGRP が AD 比較される」という教科書通りの構図は成立しません。
理由は §7 で先に触れた Cisco OSPF の Loopback デフォルト動作にあります。R3 の Lo30 (config では 10.30.3.1/24) を OSPF は隣接へ /32 ホスト経路として広告します。一方 R3 で redistribute ospf 1 を回すと、Lo30 は R3 のローカルでは設定マスクどおりの 10.30.3.0/24 という接続サブネットとして EIGRP に注入されます (OSPF が隣接へ流す /32 とは別物で、R3 自身が持つ /24 サブネットの方が EIGRP に乗ります)。プレフィックスが /32 と /24 で違うため、R1 の RIB ではこの 2 つが別経路として共存します。longer-prefixes で 10.30.3.0/24 配下を一括表示すると、2 つが並んで乗っているのが分かります。
R1#show ip route 10.30.3.0 255.255.255.0 longer-prefixes
10.0.0.0/8 is variably subnetted, 17 subnets, 3 masks
D EX 10.30.3.0/24 [170/51456] via 10.13.0.1, 00:02:17, GigabitEthernet3
O 10.30.3.1/32 [110/2] via 10.13.0.1, 00:07:33, GigabitEthernet3D EX 10.30.3.0/24 (EIGRP external 170) と O 10.30.3.1/32 (OSPF 110) は宛先プレフィックスが別物なので、AD 比較が一切起きずに両方とも RIB に残っています。
教科書的な「AD 比較で OSPF 110 vs EIGRP external 170 → OSPF 勝ち」を見せるには、R3 の Loopback に ip ospf network point-to-point を明示して /24 で広告させる必要があります。
R3(config)#interface Loopback30
R3(config-if)#ip ospf network point-to-pointこのコマンドを入れると Lo30 の OSPF Network Type が LOOPBACK から POINT_TO_POINT に変わり、設定マスク (/24) のまま広告されます。R3 視点で確認すると以下のとおりです。
R3#show ip ospf interface Loopback30
Loopback30 is up, line protocol is up
Internet Address 10.30.3.1/24, Interface ID 13, Area 0
Attached via Network Statement
Process ID 1, Router ID 10.0.3.1, Network Type POINT_TO_POINT, Cost: 1これで OSPF も 10.30.3.0/24 を広告するようになり、R1 視点で同じ /24 を OSPF (110) と EIGRP external (170) の両方が持つ状態になります。再度 R1 の RIB を見ると、今度は AD 110 の OSPF が勝って O 10.30.3.0/24 だけが残ります。
R1#show ip route 10.30.3.0 255.255.255.0 longer-prefixes
10.0.0.0/8 is variably subnetted, 16 subnets, 3 masks
O 10.30.3.0/24 [110/2] via 10.13.0.1, 00:00:46, GigabitEthernet3show ip route 10.30.3.0 で詳細を見ると、distance 110 の OSPF intra-area 経路が RIB を取っているのが確認できます。先ほどまであった D EX 10.30.3.0/24 (AD 170) は EIGRP の topology table には残ったまま RIB からは消えています。
R1#show ip route 10.30.3.0
Routing entry for 10.30.3.0/24
Known via "ospf 1", distance 110, metric 2, type intra area
Last update from 10.13.0.1 on GigabitEthernet3, 00:00:52 ago
Routing Descriptor Blocks:
* 10.13.0.1, from 10.0.3.1, 00:00:52 ago, via GigabitEthernet3
Route metric is 2, traffic share count is 1RIB から消えても、EIGRP の topology table 自体には external エントリが残っています。show ip eigrp topology で見ると route is External のまま 0 Successor(s) (RIB に出していない) になっており、AD は「どのプロトコルの経路を RIB に載せるか」を決めるが、AD 負けしたプロトコルがその経路を計算・保持すること自体は止めない様子が分かります。
R1#show ip eigrp topology 10.30.3.0/24
EIGRP-IPv4 Topology Entry for AS(100)/ID(10.10.1.1) for 10.30.3.0/24
State is Passive, Query origin flag is 1, 0 Successor(s), FD is Infinity
Descriptor Blocks:
10.13.0.1 (GigabitEthernet3), from 10.13.0.1, Send flag is 0x0
Composite metric is (51456/51200), route is External
...
External data:
AS number of route is 1
External protocol is OSPF, external metric is 0
Administrator tag is 0 (0x00000000)ここで強調したいのは、OSPF と EIGRP の AD 比較の理屈は正しい という点です。教科書記述が誤りなのではなく、Cisco OSPF の Loopback デフォルト動作 (/32 広告) が「教科書記述の前提 (同一プレフィックス) を素直には満たさない」だけです。ip ospf network point-to-point でその前提を整えれば、教科書どおり AD 110 の OSPF が AD 170 の EIGRP external に勝つ、というのが実機で確認できます。
3-3 で「Invalid 180s / Flush 240s を待たず Route Poisoning + Triggered Update で秒オーダー収束」、3-4 で「対称トポロジでは Feasible Successor が立たない」と並べてきた 「教科書と実機の素直なギャップ」シリーズの 3 番目 が、3-5 ではこの 「Loopback /32 既定広告と再配送の別プレフィックス共存」 となります。共存している間は AD 比較が起きず、Loopback を p2p 化して同一 /24 に揃えて初めて AD 比較が前面に出る、という順序が実機ラボの学びです。
実運用上は、再配送境界での「同じ宛先を複数プロトコルが広告する」状況自体を避けるのが基本です (route-map で双方向 filter する、distribute-list を効かせる、tag で再配送ループを止める等)。本ラボは「同一プレフィックスを複数プロトコルが広告すると AD で RIB が決まる」という基本動作を実機で見せるための構成であり、本番設計では再配送境界を filter で締めるのが定石である点も合わせて押さえておきましょう。
14. OSPF / EIGRP / RIP 総括表
3-3 〜 3-5 で扱った 3 つの IGP (Interior Gateway Protocol) を 1 つの表に並べておきます。IGP の設計軸を一度俯瞰しておくと、BGP のような EGP (Exterior Gateway Protocol) のスケールメリットが何の対比で語られているかが分かりやすくなります。
| 観点 | RIP | EIGRP | OSPF |
|---|---|---|---|
| 設計分類 | 距離ベクトル型 | 距離ベクトル型 (Cisco 拡張) | リンクステート型 |
| 規格 | RFC 2453 (RIPv2) | RFC 7868 (informational) | RFC 2328 (OSPFv2) |
| メトリック | ホップ数 (max 15) | 複合 (帯域 + 遅延 既定) | cost = Ref-BW / 帯域 |
| 隣接管理 | 周期 Update (30 秒) | Hello 5 秒 / Hold 15 秒 | Hello 10 秒 / Dead 40 秒 |
| 隣接成立条件 | (隣接概念なし) | AS / K 値 / 同一 SN | Area / Hello&Dead / Mask / 認証 / Stub |
| 経路計算 | DB 受信時に再計算 | DUAL (事前 FS 計算) | ダイクストラ (LSDB から自前) |
| ループ対策 | Split Horizon + Poison Reverse | DUAL の Feasibility Condition | LSDB 同期で原理的にループ無し |
| 集約 | Auto-summary (既定 ON) | 任意 IF で ip summary-address | ABR で area range / ASBR で summary-address |
| Area 概念 | 無し | 無し | あり (Area 0 backbone + 他 Area) |
| AD (Cisco) | 120 | internal 90 / external 170 | 110 |
| 再配送境界 | (使わない) | seed metric 必須 | ASBR が Type 5 で AS 全域に拡散 |
| マルチキャスト | 224.0.0.9 | 224.0.0.10 | 224.0.0.5 / 224.0.0.6 (DR/BDR) |
距離ベクトル型は「隣接の言い分を信じる」モデルなのでループ対策に防衛策が必要、リンクステート型は「事実 (リンクの状態) を共有して各自で計算する」モデルなので Area 内の全ルータの LSDB が同期して SPF が収束した後の経路はループフリーになる、というのが設計の核です (収束途中で一時的に LSDB や FIB がずれている間は、マイクロループのような過渡的なループが起こり得る点は別問題です)。EIGRP は両者の中間に位置し、距離ベクトル型の延長線上にいながら DUAL で事前計算してリンクステート型の特性を一部取り込んでいます。
AD 値も整理しておくと、Cisco 既定では EIGRP internal (90) < OSPF (110) < RIP (120) < EIGRP external (170) の順で、同じ宛先を複数プロトコルが広告した時はこの優先順で RIB が決まります。EIGRP の internal と external で AD が 80 も離れているのは、「自前 AS 内で計算したものは信用するが、外から再配送で持ち込まれたものは疑う」という設計思想の表れです。
15. 第 3 章のここまでと次節以降の内容
3-1 〜 3-5 で IP アドレッシング (3-1)、サブネット / VLSM (Variable Length Subnet Mask) / 集約 (3-2)、RIP (3-3)、EIGRP (3-4)、OSPF (3-5) と進めてきました。L3 編 16 節中の 5 節を消化したことになります。
ここまでで押さえておきたいのは次の 3 点です。
- 「経路をどうやって配るか」と「経路をどう選ぶか」は別問題。前者がプロトコルの設計分類 (距離ベクトル型 / リンクステート型 / パスベクトル型)、後者がメトリック / AD / SPF 等の計算ロジック
- AD は「同じ宛先を複数プロトコルが広告した時の優先順位」専用の概念。プロトコル内で経路を選ぶときには使わない (プロトコル内では各自のメトリックで決まる)
- 「教科書の前提が実機構成で素直に成立するか」を毎回疑う。本章では RIP の収束タイマー / EIGRP の FS (Feasible Successor) / OSPF の Loopback /32 と 3 つの実機ギャップを記録した。教科書記述は正しくても、Cisco 実装の既定挙動やトポロジ条件で見え方が変わる
次節は 3-6 BGP です。これまで扱ってきた IGP (RIP / EIGRP / OSPF) はすべて単一 AS 内の話でしたが、BGP は AS 間 (= インターネット規模) で経路を交換する パスベクトル型 (Path Vector) プロトコルです。「ベストパスを選ぶ」「ループを防ぐ」「ポリシーを表現する」の 3 点が IGP とは設計レベルで異なってきます。Cisco の検証ラボでは小規模な eBGP / iBGP 構成を組んで、AS_PATH / LOCAL_PREF / MED (Multi-Exit Discriminator) 等のベストパス選択属性を実機で確認していきましょう。
第 3 章後半 (3-6〜3-16) は BGP とその応用 (3-6〜3-9)、再配送 (3-10)、ルーティングポリシー総括 (3-11)、FHRP (First Hop Redundancy Protocol、3-12)、IPv6 (3-13 アドレス体系 / 3-14 NDP・SLAAC / 3-15 ルーティング)、マルチキャストルーティング (3-16〜) で構成する予定です。