InfraLab

OSPF 仕様書

65 / 65 items

InfraLab Reference Series

Category: OSPF

Updated: 2026-05-12

infralab.jp

ospf

65 items

OSPF 仕様書

Abstract

OSPFv2 / OSPFv3 のパケット種別・隣接ステート・エリア種別 (Stub/NSSA)・LSA タイプ (1〜7)・DR/BDR 選出・コスト計算・タイマー・認証・Cisco 設定例・トラブルシュート。

Table of Contents

  1. 1. 概要4
  2. 2. トランスポート4
  3. 3. パケット種別6
  4. 4. 隣接ステート7
  5. 5. エリア種別6
  6. 6. LSA タイプ8
  7. 7. DR / BDR 選出4
  8. 8. メトリック4
  9. 9. タイマー6
  10. 10. 認証4
  11. 11. Cisco IOS 設定例6
  12. 12. 確認・トラブルシュート6
  13. 13. References14

1. 概要

1.1. OSPF とは

Open Shortest Path First。リンクステート型 IGP。Dijkstra アルゴリズムで最短経路を計算。

Link-State / IGP / Dijkstra (SPF)

1.2. OSPFv2

IPv4 用。RFC 2328。最も普及。

RFC 2328 / IPv4

1.3. OSPFv3

IPv6 用。RFC 5340。Address Family 拡張で IPv4 も収容可 (RFC 5838)。

RFC 5340 / IPv6 (AF 拡張で IPv4 も)

1.4. 用途

エンタープライズ・ISP の AS 内ルーティング標準。階層 (area) で大規模 AS をスケール。

AS 内 / 階層型 (area) / 中〜大規模

2. トランスポート

2.1. IP プロトコル番号

OSPF は IP プロトコル 89 として直接乗る。UDP/TCP は使わない。

IP proto 89

2.2. マルチキャストアドレス (v2)

AllSPFRouters 224.0.0.5 と AllDRouters 224.0.0.6。

AllSPFRouters: 224.0.0.5 / AllDRouters: 224.0.0.6

2.3. マルチキャストアドレス (v3)

IPv6 リンクローカル。FF02::5 と FF02::6。

FF02::5 / FF02::6

2.4. Router ID

32 ビット識別子。慣例として Loopback の IP を割当。

32-bit / Loopback IP 推奨

3. パケット種別

3.1. OSPF パケットヘッダ

OSPFv2 packet に共通する 24B ヘッダ。Type により Hello/DBD/LSR/LSU/LSAck を識別する。

RFC 2328 OSPF Packet Header ASCII 図:

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |    Version    |     Type      |         Packet Length         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                           Router ID                           |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                            Area ID                            |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |           Checksum            |            AuType             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                        Authentication                         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                        Authentication                         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

3.2. Hello

隣接関係確立と維持。Network Mask / Hello Interval / Dead Interval / 既知 Neighbor 等を含む。

type=1 / 隣接確立・維持

RFC 2328 Hello Packet ASCII 図:

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                         Network Mask                          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |         HelloInterval         |    Options    |    Rtr Pri    |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                      RouterDeadInterval                       |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                       Designated Router                       |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                   Backup Designated Router                    |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                         Neighbor ...                          |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

3.3. DBD (Database Description)

LSDB の要約を交換し、不足分を特定する。

type=2 / LSA ヘッダ要約

RFC 2328 Database Description Packet ASCII 図:

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |         Interface MTU         |    Options    |     Flags     |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                      DD Sequence Number                       |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                        LSA Headers ...                        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

3.6. LSAck

LSU の確認応答。

type=5 / LSU の Ack

RFC 2328 Link State Acknowledgment Packet ASCII 図:

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                        LSA Headers ...                        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

4. 隣接ステート

4.1. Down

Hello を受信していない初期状態。

Hello 未受信

4.2. Init

相手からの Hello を受信したが、自分の Router ID が記載されていない。

Hello 受信 / Neighbor リストに自分なし

4.3. 2-Way

双方が互いの Router ID を Hello に記載している。マルチアクセス NW では DR/BDR 選出後に Adjacency に進むかを決定。

双方向 Hello / DR/BDR 選出ここで

4.4. ExStart

マスター/スレーブと初期 DBD シーケンス番号を決める。

DBD master/slave 決定

4.5. Exchange

DBD を交換中。

DBD 交換

4.6. Loading

LSR/LSU で不足 LSA を取得中。

LSR/LSU 進行中

4.7. Full

LSDB が完全同期。隣接関係確立。

完全同期 / 正常状態

5. エリア種別

5.1. Backbone (Area 0)

他のすべてのエリアと隣接または仮想リンクで接続する必須エリア。

Area 0 / 必須 / 全 Area の接続点

5.2. Standard Area

Type 1-5 LSA を受け入れる通常エリア。

Type 1,2,3,4,5 OK

5.3. Stub Area

外部 (Type 5) を遮断、デフォルトルートだけ流す。ASBR は持てない。

Type 5 遮断 / Type 3 デフォルト注入

5.4. Totally Stubby Area

Stub に加え Type 3 (Inter-Area) も遮断。Type 3 のデフォルトだけ。Cisco 拡張。

Type 3/4/5 遮断 / Type 3 default のみ / Cisco

5.5. NSSA (Not-So-Stubby Area)

Stub の制約を緩和し、ASBR を許可。外部経路は Type 7 → ABR で Type 5 に変換。

Type 5 遮断 / Type 7 で再配布許可

5.6. Totally NSSA

NSSA に Type 3 遮断を加えた Cisco 拡張。

Type 3/4/5 遮断 / Type 7 OK / Cisco

6. LSA タイプ

6.1. LSA ヘッダ

OSPFv2 LSA に共通する 20B ヘッダ。LS Type と Link State ID で LSA の意味が決まる。

RFC 2328 LSA Header ASCII 図:

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |            LS Age             |    Options    |    LS Type    |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                         Link State ID                         |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                      Advertising Router                       |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                      LS Sequence Number                       |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |          LS Checksum          |            Length             |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

6.2. Type 1 (Router LSA)

各ルータが自エリア内のリンク情報を生成。エリア内に flood。

Router LSA / 自エリア内 flood

6.3. Type 2 (Network LSA)

DR が生成。マルチアクセス NW 上のルータ一覧。

Network LSA / DR 生成

6.4. Type 3 (Summary / Inter-Area)

ABR が他エリアのプレフィックスを要約して生成。

Summary LSA / ABR 生成 / Inter-Area prefix

6.5. Type 4 (ASBR Summary)

ABR が ASBR の位置 (Router ID) を他エリアに広告。

ASBR Summary / ABR 生成 / ASBR の場所

6.6. Type 5 (External)

ASBR が他プロトコル (BGP/static 等) の経路を OSPF に注入。Stub には流れない。

External LSA / ASBR 生成 / E1 or E2

6.7. Type 7 (NSSA External)

NSSA 内の ASBR が生成。エリア内のみ flood、ABR が Type 5 に変換して外へ。

NSSA External / ABR で Type 5 に変換

6.8. Type 9-11 (Opaque)

MPLS-TE 等で使用される拡張用 LSA。

Opaque LSA / RFC 5250 / TE 拡張

7. DR / BDR 選出

7.1. DR 選出

高い OSPF priority (既定 1)、同点ならルータ ID。priority 0 は永遠に DR 候補にならない。

priority 高 → Router ID 高 / 0 は非候補

7.2. BDR

DR 失効時に即昇格。DR と同時選出。

DR 失効時に昇格 / 同時選出

7.3. DR/BDR が必要な NW タイプ

Broadcast (Ethernet) と NBMA (Frame Relay/ATM)。Point-to-Point/Point-to-Multipoint では不要。

Broadcast / NBMA は必要 / P2P 不要

7.4. 非選出性 (non-election)

DR/BDR は preempt しない。後から高 priority/RID が入っても置き換わらない。

preempt なし / 後発高 priority は無効

8. メトリック

8.1. Cost 計算

参照帯域 / IF 帯域。既定参照帯域 100Mbps (Cisco)。10Gbps 以上は同一 cost=1 になるので auto-cost reference-bandwidth で拡張する。

cost = ref-bw / IF-bw / 既定 ref-bw 100M

8.2. auto-cost reference-bandwidth

ハイスピードリンクで適切な cost 差をつけるため。100000 (100Gbps) を推奨。

auto-cost reference-bandwidth 100000

8.3. E1 (External Type 1)

外部メトリック + 内部 OSPF コストを足す。

external metric + internal cost

8.4. E2 (External Type 2、既定)

外部メトリックのみ。OSPF 内のコストは加算しない。

external metric only / 既定

9. タイマー

9.1. Hello Interval (Broadcast/P2P)

Hello の送出間隔。Ethernet などの broadcast / point-to-point の既定は 10 秒。

既定 10s (broadcast/P2P)

9.2. Hello Interval (NBMA/P2MP)

NBMA や Point-to-Multipoint の既定は 30 秒。

既定 30s (NBMA/P2MP)

9.3. Dead Interval

Hello が無くなってから隣接断とする時間。既定 4 × Hello。両端で一致必須。

既定 4 × Hello / 隣接機で一致必要

9.4. LSA Refresh

各 LSA は 30 分ごとに再 flood (paranoia update)。

30 分間隔

9.5. MaxAge

1 時間 (3600 秒) で LSA を期限切れと判定。

3600 秒 / 期限切れ

9.6. SPF 遅延 (Throttle)

頻繁な SPF 再計算を抑制する指数バックオフ。

spf-interval initial / min / max (ms)

10. 認証

10.1. 認証なし (Type 0)

既定。本番運用では避ける。

Type 0 / 既定 / 推奨しない

10.2. 平文 (Type 1)

Hello に平文鍵を含める。実質保護にはならない。

Type 1 / 平文 (非推奨)

10.3. MD5 / HMAC-SHA (Type 2)

Cryptographic 認証。key-chain で鍵ローテーション可。OSPFv2 で広く使われる。

Type 2 / MD5 or HMAC-SHA / key-chain

10.4. OSPFv3 認証 (IPsec)

OSPFv3 自体は認証フィールドを持たず、IPsec AH/ESP に依存する設計。

IPsec AH/ESP (RFC 4552/7166)

11. Cisco IOS 設定例

11.1. 基本設定

プロセス ID は機器ローカル。Router ID を明示するのが定石。

router ospf 1
 router-id 10.0.0.1
 network 10.0.10.0 0.0.0.255 area 0

11.2. インタフェース直接設定 (新書式)

network 文の代わりに IF で ip ospf area を直接指定。

interface Vlan10
 ip ospf 1 area 0

11.3. Hello/Dead 変更

高速収束のため Hello を短く。両端で一致必須。

interface Gi0/0
 ip ospf hello-interval 3
 ip ospf dead-interval 12

11.4. 認証 (MD5)

key-chain で運用するのが今風。

interface Gi0/0
 ip ospf authentication message-digest
 ip ospf message-digest-key 1 md5 s3cret

11.5. Stub Area 設定

エリア内の全ルータで同じ area type 宣言が必要。

router ospf 1
 area 10 stub

11.6. auto-cost 拡張

10G 以上で正しい cost 差をつける。

router ospf 1
 auto-cost reference-bandwidth 100000

12. 確認・トラブルシュート

12.1. ネイバ確認

Full に到達しているか、ステートと Dead タイマー残を確認。

show ip ospf neighbor [detail]

12.2. インタフェース確認

IF ごとの area・cost・priority・Hello/Dead・DR/BDR を確認。

show ip ospf interface [Gi0/0]

12.3. LSDB 確認

LSA の種別ごと、または特定 prefix の詳細。

show ip ospf database / database router

12.4. MTU 不一致

DBD で MTU を比較し不一致だと ExStart で停止する典型障害。

症状: ExStart で停滞 / 確認: IP MTU 両端

12.5. Hello/Dead 不一致

Hello/Dead の値が不一致だと隣接が確立しない。

症状: Init/2-Way 止まり / 両端値を一致

12.6. Network type 不一致

片側 Broadcast、片側 P2P など Network Type 違いで DR/BDR が成立しないこともある。

show ip ospf interface で Type を確認

13. References

  1. OSPF
  2. OSPFv2
  3. OSPFv3
  4. RFC 2328
  5. RFC 5340
  6. Link State
  7. LSA
  8. Area 0
  9. Stub
  10. NSSA
  11. DR
  12. BDR
  13. SPF
  14. Dijkstra
Related