OSPFって、用語が多くて急に難しく感じますよね。LSA、LSDB、SPF、エリア、DR/BDR…単語は見たことあるのに「結局なにが起きてるの?」が腹落ちしない。
この記事は、初心者が一番つまずく“流れ”を軸に、OSPFを「詳しく」でも迷子にならない形で整理します。

OSPFとは:初心者が最初に押さえる全体像
ルーティングプロトコルの中でのOSPF
OSPFが「リンク状態型」である意味
OSPF(Open Shortest Path First)は、ルータ同士で「どの道がつながっているか」を共有して、一番良い道順(最短の道)を自分で計算する仕組みです。
OSPFの特徴は、“経路そのもの”をやり取りするというより、「地図」をみんなで揃える”ところにあります。
この「地図」のことを LSDB(リンク状態データベース) と呼びます。
LSDBは、ネットワーク全体のつながり方をまとめたメモ帳みたいなものです。
OSPFでは、ルータはまずこのLSDBを集めて、そこから「自分を出発点」にして最短の道順を計算し、ルーティングテーブル(どこへどう送るかの表)を作ります。
これはRFC(公式の仕様書)にも「LSDBから最短経路木を作ってルーティングテーブルを作る」と説明されています。
初心者が混乱しやすいのは、「LSA」「SPF」などの言葉が急に沢山出てくる事です。
でも、覚え方はシンプルでOKです。
- LSA:地図に貼る“ふせん”(「ここにつながる道があるよ」という情報)
- LSDB:ふせんが集まった“地図帳”
- SPF:地図帳を使って「一番近い道」を計算する作業
つまりOSPFは、みんなで地図を同じにしてから、各自で計算して決めるプロトコルです。だからこそ、後で説明する「ネイバー(お隣)作り」や「地図の同期」がとても大事になります。
OSPFのコア概念:LSDBとSPF
同じ地図(LSDB)を共有する理由
LSDB→SPF→経路表の流れ
OSPFの流れは、大体次の3段階です。
- 地図(LSDB)を揃える
- 最短ルート(SPF)を計算する
- 結果をルーティングテーブルに入れる
最初にやる「地図を揃える」が、OSPFらしさの中心です。
ルータは、道の情報を LSA という形で配って、周りのルータも同じ情報を持てるようにします。
情報が増えるとLSDB(地図帳)が更新されます。
すると、ルータはSPF計算をして「このあて先へはこの道が一番いい」と決め直します。
RFCでも、LSDBから最短経路木を作り、それがルーティングテーブルにつながる、と説明されています。
ここで大事なポイントが1つあります。
LSAは“経路表”ではないという事です。
LSAはあくまで「地図の材料」です。
材料(LSA)が集まって地図(LSDB)になり、地図を見て計算(SPF)して、ようやく経路表になります。
だから、もし障害が起きたときは「経路表がおかしい」の前に、次の順で考えると原因に近づき易いです。
- そもそもLSAが正しく届いている?(地図の材料)
- ルータ同士のLSDBは同じ?(地図が一致してる?)
- SPF計算の結果はどうなってる?(計算ミスではなく“材料違い”かも)
OSPFが分かってくると、「いま問題なのは地図が違うのか、計算結果なのか」を切り分け出来るようになります。
これが“詳しく理解する”って事の大きな一歩です。
Helloから始まるネイバー形成
Hello/Deadと成立条件
一致しないと上がらない項目
OSPFは、まず Helloパケット で「近くにOSPFを話せる相手がいるか」を探します。
Helloは、簡単に言うと「定期的に送る挨拶」です。
挨拶が届くと、相手が生きている事が分かります。
でも初心者がよくハマるのが、Helloは届いているのに、ネイバー(隣の相手)が成立しないケースです。
これは大体「条件が一致していない」せいです。
よくあるチェックポイントは、まずこの4つです。
- Hello間隔/Dead時間:挨拶の頻度と、相手が消えたと判断する時間。ここがズレると仲良くなれません。
- エリア番号(Area ID):同じエリアにいないと、そもそも別チーム扱いです。
- 認証(パスワード):片方だけ鍵をかけていると会話出来ません。
- ネットワークタイプ:その回線が「みんなで話す場所」なのか「1対1」なのかで動きが変わります。
特に「エリア違い」「タイマー違い」は、実務でも本当に多いです。
ネイバーが上がらないときは、まずこの条件の一致を確認すると早いです。
そして、Helloで見つけた相手と必ず“全部の情報交換”をする訳ではありません。
OSPFは、場面によって「この相手とは深く情報交換する(隣接)」を選びます。
次の章で説明する状態(2-Way、Fullなど)が、そのヒントになります。
Ciscoの解説でも、隣接が出来るまでに状態が変わっていく事が説明されています。
ネイバー状態遷移とDB同期パケット
2-WayからFullまでの会話
DBD/LSR/LSU/LSAckの役割
Helloで相手を見つけたら、次は「地図(LSDB)を同じにする作業」に入ります。
この時、OSPFは“会話の手順”をちゃんと持っています。
代表的な流れはこうです。
- DBD:お互いの地図帳の「目次」を見せ合う
- LSR:足りないページを「それちょうだい」とお願いする
- LSU:お願いされたページ(LSA)を送る
- LSAck:受け取ったよ、と返事する
この流れを覚えると、「なぜFullにならないのか」が見えます。
OSPFは、ネイバーができても、すぐFull(完全に同期)になるとは限りません。
途中で ExStart / Exchange / Loading といった状態を通ります。
Ciscoの資料でも、隣接が出来るまでにこうした状態がある事が説明されています。
特に有名な詰まりポイントが、ExStartやExchangeで止まるケースです。
ここは「DBDのやり取り(地図の目次交換)」がうまくいっていない可能性が高いです。
原因として多いのが MTU不一致(送れるデータの最大サイズが左右で違う)です。
Ciscoのトラブルシュート資料でも、Exstart/Exchangeで止まる問題の調査がまとめられています。
ざっくり言うと、片方が「この大きさで送るよ」と思って送ったものを、もう片方が「その大きさは受け取れない」と判断して会話が進まない、という感じです。
だから、ネイバーが「2-Wayで止まる」「ExStartで止まる」「Fullにならない」と出たら、Hello条件だけじゃなく、DB同期の会話が進んでいるかを見るのがコツです。
OSPFは“地図合わせプロトコル”なので、地図が合わない限り先へ進めません。
LSAを最低限で整理する
Type1/2/3/5/7だけ先に覚える
「届く範囲」で覚えるLSA
LSAは種類が多くて、最初はしんどいです。だから初心者は、まず Type1 / 2 / 3 / 5 / 7 だけに絞ってOKです。
コツは「番号を丸暗記」ではなく、“どこまで届く情報か”で覚える事です。
- Type1(Router LSA):そのエリアの中だけに届く「自分の情報」
- Type2(Network LSA):同じネットワークにいるメンバー情報(まとめ役が出す)
- Type3(Summary LSA):別エリアの情報を「要約して」エリアに持ち込む
- Type5(External LSA):OSPFの外から入ってきた道(再配布)
- Type7(NSSA External LSA):NSSAという特別エリアの中だけで使う外部情報
特に覚えておくと強いのが Type7 です。
NSSAではType5が使えないので、代わりにType7を流し、NSSAの境界にいるABRがType5に変換して外へ出します。
CiscoのNSSA解説にも「Type7はABRでType5に変換される」と書かれています。
これはRFCでも考え方が説明されています。
この「どこまで届くか」で見ると、エリア設計が理解し易くなります。
- エリアの中だけに広がる情報
- エリアをまたぐときに要約される情報
- 外部から来る情報(増えやすい)
OSPFは地図(LSDB)を持つ分、情報が増えすぎると重くなります。
だから「外部情報は入れない」「要約だけにする」みたいに、情報を増やしすぎない工夫が必要になります。
次のコストやエリア設計は、その延長線上です。
コスト設計とルート選択
Costとreference-bandwidth
ref-bwを直さないと事故る理由
OSPFが「どの道を使うか」を決めるときは、コスト(Cost)の合計が小さい道を選びます。
コストは、基本的に「回線が速いほど小さくなる」ように計算されます。
多くの機器では、次の式がベースです。
コスト = 参照帯域(reference bandwidth) ÷ 回線の帯域
これはCiscoのFAQでも説明されていて、参照帯域として100Mbpsを使う例が出ています。
ここでの落とし穴が、参照帯域の初期値が小さいままな事です。
例えば参照帯域が100Mbpsだと、1Gbpsや10Gbpsの高速回線は計算上どれもコスト1になりやすく、「速さの差」を表現出来ません。
すると、設計者は「こっちをメインにしたい」と思っていても、機械の計算では差がつかず、想定と違う流れになる事があります。
こうした問題は「高速リンクが全部コスト1になって困る」という形で解説される事もあります。
だから実務では、ネットワーク全体で参照帯域を大きくして、ちゃんと差が出るようにします。
ただし大事なのは、一部だけ変えない事。
OSPFは「みんなが同じ地図と同じルールで計算する」前提です。
地図(LSDB)が同じでも、計算の尺度(参照帯域)がバラバラだと、ルータごとに“正しいと思う道”がズレてしまい、トラブルの元になります。
OSPFがLSDBからSPF計算をして経路を作る、という基本から考えると、ここがズレる危険性は想像し易いです。
まとめると、コスト設計は「後から直せばいい」ではなく、最初に決めておくべき土台です。
初心者ほど、ここを押さえると一気に強くなります。
エリア設計:Area0・Stub・NSSA
エリアを分ける目的は“増殖防止”
Stub/NSSAでLSAを減らす考え
OSPFでエリアを分ける一番の理由は、ざっくり言うと 「情報(LSA)が増えすぎないようにするため」です。
OSPFは地図(LSDB)を持つので、情報が増えるほど、配る量も増えて、計算もしんどくなります。
だから、必要に応じてエリアで区切ります。
中心になるのが Area0(バックボーン)です。
複数のエリアをつなぐときは、基本的にArea0が背骨になります。
ここは「OSPFの道路の中心みたいなもの」と思うとOKです。
そして、情報を減らす代表が Stub や NSSA です。
- Stubエリア:外部の細かい経路(Type5)を入れない。代わりに「外へ出るならこの道(デフォルトルート)」を入れて、最低限で済ませる考え方。スタブ系でデフォルトルートを入れる話はCiscoの資料でも説明があります。
- NSSA:Stubっぽいけど、エリア内で外部経路(再配布)も少し扱いたいときの折衷案。Type5は入れず、Type7で持ち、ABRがType5に変換して外へ出す。これはCiscoのNSSA解説で明確に書かれています。
考え方は難しくなくて、「このエリアの人たちは、外の細かい道まで知らなくていいよね?」という発想です。
例えば支店ネットワークで、支店は“本社やインターネットに出られれば十分”なら、外部の経路を全部持つより、デフォルトだけの方がシンプルで安全です。
逆に、支店でも外部経路を細かく使い分けたいなら、NSSAなどを検討します。
つまりエリア設計は、地理の話というより 「どこまで情報を持たせるか」の話です。
ここが分かると、OSPFの設計が一気に現実的になります。
トラブルシュート&安全運用
失敗あるあるの原因切り分け
MTU不一致・認証・再配布事故
最後に、初心者が現場で詰まりやすいポイントを「症状→よくある原因」でまとめます。
ここを知っているだけで、OSPFはかなり扱い易くなります。
(1) Helloは見えるのにFullにならない
状態がExStartやExchangeで止まるときは、DBD(目次交換)の会話がうまくいっていない可能性が高いです。
ここで本当に多いのが MTU不一致です。
Ciscoは「Exstart/Exchangeで止まるときの調査方法」をまとめた資料を出しています。
対策の考え方は単純で、両側の設定やインターフェースの条件(MTUなど)を揃える事です。
(2) ネイバーがそもそも上がらない
Hello/Deadの値、エリア番号、認証の一致をまず疑います。
OSPFは条件が揃わないと「会話しない」ので、ここは基本チェックです。
ネイバー状態の流れ自体はCiscoの説明が分かり易いです。
(3) 経路が入らない/変な経路が優先される
原因として多いのが 再配布(外部経路の入れ方)の設計ミスです。
外部はType5、NSSA内はType7など、LSAの扱いが変わります。
NSSAでType7をType5に変換する話はCiscoの解説にあります。
フィルタやメトリック(コスト)の付け方が甘いと、想定と違う経路が選ばれたり、遠回りになったりします。
(4) 安全運用(認証)で詰む
認証を入れると安全になりますが、片側だけ設定してしまうとネイバーが出来ません。
OSPFv3(IPv6用)については、仕組みの基本は同じで、仕様書でもOSPFの基本の動きは変わらないと説明されています。
結局、OSPFのトラブルは「どの段階で止まっているか」を当てるゲームです。
- Helloで止まる → 条件不一致
- DBDで止まる → MTUなど同期の問題
- LSAで混乱 → エリアや再配布の設計
- コストが変 → 参照帯域やコスト設計
この順番で見れば、だんだん“勘”ではなく“理由”で直せるようになります。
まとめ
OSPFは「経路を配る」より “地図をそろえて計算する”仕組みです。
まずHelloで相手を見つけ、次にDBD/LSR/LSU/LSAckで地図(LSDB)を同期してから、SPFで最短の道を計算します。
LSAは全部覚えなくてよくて、最初はType1/2/3/5/7を「届く範囲」で理解すると楽です。
NSSAのType7がABRでType5に変換されるのは超重要ポイントです。
そして実務では、コスト設計(参照帯域)と、Fullにならないときの原因(MTU不一致など)を知っているだけで、OSPFは一気に扱いやすくなります。
まずはこのミニ構成(3台)で進める
(外の世界はまだ無視)
R1 —— R2 —— R3
- R1–R2:10.0.12.0/24(R1=10.0.12.1, R2=10.0.12.2)
- R2–R3:10.0.23.0/24(R2=10.0.23.2, R3=10.0.23.3)
- ルータID用にLoopbackも作る(任意だけど分かりやすい)
- R1 Lo0=1.1.1.1/32, R2 Lo0=2.2.2.2/32, R3 Lo0=3.3.3.3/32
段階1:単一エリア(ぜんぶ Area 0)=いちばん基本
狙い
3台とも「同じエリア(0)」に入れて、OSPFが動くところを見る。
Ciscoのサンプルでも router ospf 1 と network ... area 0 で単一エリアを作っています。
R1(単一エリア)
conf t
!
interface lo0
ip address 1.1.1.1 255.255.255.255
!
interface g0/0
ip address 10.0.12.1 255.255.255.0
no shut
!
router ospf 1
network 1.1.1.1 0.0.0.0 area 0
network 10.0.12.0 0.0.0.255 area 0
end
R2(単一エリア)
conf t
interface lo0
ip address 2.2.2.2 255.255.255.255
!
interface g0/0
ip address 10.0.12.2 255.255.255.0
no shut
!
interface g0/1
ip address 10.0.23.2 255.255.255.0
no shut
!
router ospf 1
network 2.2.2.2 0.0.0.0 area 0
network 10.0.12.0 0.0.0.255 area 0
network 10.0.23.0 0.0.0.255 area 0
end
R3(単一エリア)
conf t
interface lo0
ip address 3.3.3.3 255.255.255.255
!
interface g0/0
ip address 10.0.23.3 255.255.255.0
no shut
!
router ospf 1
network 3.3.3.3 0.0.0.0 area 0
network 10.0.23.0 0.0.0.255 area 0
end
動いたか確認(3つだけでOK)
show ip ospf neighbor
show ip route ospf
show ip ospf interface brief
段階2:スタブ(Stub)=「外の細かい道は知らなくていい」エリア
狙い
支店(Area 1)に「外の道の細かい情報」を入れないで、とりあえず外へ出る道(デフォルト)だけ渡す感じ。
Ciscoの説明でも、スタブエリアには外部経路情報を送らず、代わりにABRがデフォルト経路を入れると書かれています。
そして「スタブにするには、そのエリア内の全ルータで area X stub を入れる」と明記されています。
変更する構成(R2–R3側をArea 1にする)
R1 —— R2 —— R3
Area0 ABR Area1(Stub)
- R1–R2:Area 0のまま
- R2–R3:Area 1に変更
- Area 1 にいるルータ(R2とR3)に stub設定 を入れる
R2(ABR)でArea 1を作って stub にする
R2は「Area0とArea1の境界」=ABRです。
conf t
router ospf 1
!
! R2-R3のネットワークを Area 1 にする(ここがポイント)
no network 10.0.23.0 0.0.0.255 area 0
network 10.0.23.0 0.0.0.255 area 1
!
! Area 1 をスタブにする
area 1 stub
end
R3(Area 1側)にも stub を入れる(超重要)
conf t
router ospf 1
!
! Area 0 → Area 1に変える
no network 10.0.23.0 0.0.0.255 area 0
network 10.0.23.0 0.0.0.255 area 1
!
! Area 1 をスタブにする(R3にも必要)
area 1 stub
end
確認ポイント
show ip ospf neighbor
show ip route
- R3側で、外へ出るための“それっぽい”デフォルトルートが見えたりします(環境により表示は少し違います)。
- もし経路が変で困ったら、まず「R2もR3も area 1 stub を入れた?」を疑うのが早いです(片方だけだと成立しません)。
「完全スタブ」にしたいなら
ABR(R2)だけ、こうできます:area 1 stub no-summary
Ciscoのガイドでも no-summary はABR側で使う説明があります。
段階3:NSSA=「スタブっぽいけど、支店から外部経路を少し入れたい」
狙い
Area 1 を「基本スタブ」にしつつ、支店(R3)から「外の道(外部経路)」をちょっとだけOSPFに持ち込みたいときに使うのがNSSA。
Ciscoの説明では、NSSAではType5(外部LSA)が許可されないので、代わりにASBRがType7を作り、ABRがType5へ変換すると書かれています。
そしてNSSA化は area 1 nssa をエリア内の全ルータへ入れる、とあります。
さらに大事:NSSAのABRはデフォルトではNSSAへデフォルトルートを入れないので、入れたいなら
area 1 nssa default-information originate が必要、とCiscoが明言しています。
NSSAに切り替える(StubをNSSAに置き換える)
R2(ABR):Area 1をNSSAにして、デフォルトルートも入れる
conf t
router ospf 1
!
! まず stub を消す(入れっぱなしにしない)
no area 1 stub
!
! Area 1 を NSSA にする
area 1 nssa default-information-originate
end
R3(Area 1側):Area 1をNSSAにする
conf t
router ospf 1
no area 1 stub
area 1 nssa
end
「外部経路を少し入れる」を一番簡単にやる(R3をASBRにする)
ここではR3に「架空の外部ネット(192.168.100.0/24)」があることにして、staticで作ってOSPFへ再配布します。
R3:外部ネットを作る(static)
conf t
ip route 192.168.100.0 255.255.255.0 Null0
end
R3:そのstaticをOSPFに再配布
conf t
router ospf 1
redistribute static subnets
end
NSSAだと、この外部経路は N1/N2(Type7系) として見えるのがふつうです。
show ip routeのコードにも N1/N2 が出てきます。
NSSAでの確認コマンド
R3(Area1)で見る
show ip route ospf
show ip ospf database nssa-external
R2(ABR)で見る
show ip ospf database external
show ip route ospf
- R3側:
O N1/O N2っぽい表示で外部経路が見える - R1側:ABRでType7→Type5に変換されて、外部(E1/E2)として見えてくるイメージ(環境で表記は少し違う)
よくある詰まりポイント
- NSSAにしたのにR3が外へ出られない
→ R2(ABR)にarea 1 nssa default-information-originateを入れてる?(NSSAはデフォルトでデフォルトルートを入れない) - R2だけNSSAでR3がNSSAじゃない
→ それはダメ。同じエリア内は「NSSAだよね」を全員で一致させる必要があります。
まとめ
この記事で一番大事な結論はこれです。
OSPFは「道順(経路)を配る」より先に、みんなで同じ“地図”を持つプロトコルです。
その地図の集まりが LSDB(地図帳)で、そこから各ルータが SPF計算(最短の道を探す計算)をして、ルーティングテーブル(どこへ送るかの表)を作ります。
つまり LSDB → SPF → 経路表 の順番です。
1) 最初の入口:Helloで「隣の人」を見つける
OSPFはまず Hello(あいさつ)で、近くの相手と話せるか確認します。
ただし、Helloが届いていても、条件が合わないとネイバーになれません。
良くある原因は「タイマー(Hello/Dead)」「エリア番号」「認証」「ネットワークタイプ」などの不一致です。
2) “本番の会話”:2-Way〜Fullは「地図をそろえる途中」
ネイバーができると、いきなり完成ではなく、状態が少しずつ進みます(Down/Init/2-Way/ExStart/Exchange/Loading/Full)。
ここで覚えておきたいのは、Full=地図(LSDB)が綺麗に同期出来た状態という事。
そして同期の会話はざっくりこうです。
- DBD:地図帳の「目次」を見せ合う
- LSR:足りないページを「ちょうだい」と頼む
- LSU:ページ(LSA本体)を送る
- LSAck:「受け取ったよ」と返事する
この流れを知っていると、「Fullにならない」を原因から追いやすくなります(例:Exchangeで止まる=同期の会話が詰まってる)。
3) LSAは丸暗記より「どこまで届く情報か」で覚える
初心者はまず Type1/2/3/5/7 だけでOKです。ポイントは番号よりも「届く範囲」。
- Type1/2:主にエリア内の情報
- Type3:エリアをまたぐ要約(ABRが作る)
- Type5:OSPFの外から来た外部経路
- Type7:NSSAの中だけの外部経路(あとで変換される)
特にNSSAは、Type7がABRでType5に変換されてOSPF全体へ出ていく、という動きが核です。
4) コスト設計は「あとで何とかなる」じゃなく土台
OSPFはコスト(Cost)の合計が小さい道を選びます。
だから、コストが思った通りになっていないと、経路選択も思った通りになりません。
(特に高速回線が多い環境では、参照帯域の考え方が大事になりやすいです。)
5) エリア設計は「情報を増やしすぎないため」
OSPFは地図(LSDB)を持つ分、情報が増えるほど大変になります。
だからエリアで区切ります。
スタブや完全スタブは、ざっくり言うと 「外の細かい経路は持たずに、デフォルトルートだけで外へ出る」発想です。
Ciscoの資料でも、スタブ系エリアにデフォルトルートを入れる説明があります。
NSSAはそのスタブの考え方を残しつつ、支店側から外部経路を少し入れたいときに使う、折衷案です(Type7→Type5変換)。
6) 最後に:トラブルは「どの段階で止まってるか」を当てるゲーム
OSPFの不具合は、だいたい次のどれかです。
- Hello段階:条件不一致でネイバーになれない
- 同期段階:2-Way/Exchange/Loadingで止まって地図がそろわない
- 設計段階:LSAやエリア種類、コスト設定のせいで経路が想定外
とくに「2-Way」はネットワーク種類によっては“問題ではないこともある”とCiscoが説明しています。
だから、表示だけで焦らず「今は入口なのか、同期なのか、設計なのか」を切り分けるのが一番の近道です。
コメント