OSPF の SPF 計算とリンクステート同期
OSPF が全ルータで同じトポロジ地図を共有し、各自がダイクストラ法で最短経路木を作る内部動作が腑に落ちる。LSAタイプとエリア分割の意味まで踏み込める。
- 1.OSPF は LSA をエリア内に氾濫させて全ルータの LSDB(トポロジDB)を一致させ、各ルータが自分を根にダイクストラ法で SPF ツリーを独立計算する。
- 2.SPF はリンク変化のたびに走るため計算負荷が課題で、エリア分割により LSA の氾濫範囲と SPF 再計算範囲を局所化し、規模に対してスケールさせる。
- 3.LSA タイプ(Type1/2 はエリア内、Type3 はエリア間、Type5 は外部)で運ぶ情報と伝搬範囲が決まり、エリア境界(ABR/ASBR)で要約・変換される。
リンクステート型が解く問題
OSPF はリンクステート型の IGP です。ルーティングプロトコル(OSPF / BGP) で触れたとおり、距離ベクタ型が「隣の言い値」を信じて距離を積み上げるのに対し、リンクステート型は 全ルータが同一のトポロジ地図を共有し、各自がその地図から最短経路を計算する という思想に立ちます。地図さえ一致していれば、各ルータの計算結果は矛盾せず、ループや無限カウント問題を構造的に避けられます。
OSPF の動作は大きく2段に分かれます。前半が リンクステート同期(全員の地図を一致させる)、後半が SPF 計算(その地図から経路木を作る)。この2段を分けて理解するのが要点です。
LSA のフラッディングと LSDB 同期
各ルータは自分のリンク状態を LSA(Link State Advertisement) として記述し、これを隣接全体へ氾濫(フラッディング)させます。受け取ったルータは内容を LSDB(Link State Database) に格納し、自分が受信していないインターフェース側へ再送出する。こうして1つの LSA がエリア全体へ波及し、最終的に エリア内の全ルータの LSDB が同一になる(同期する)ことを目指します。
無秩序な再送出はループするため、OSPF は LSA ごとに シーケンス番号・Age(経過時間)・チェックサム を持たせ、新旧を判定します。
| フィールド | 役割 | 判定の向き |
|---|---|---|
| シーケンス番号 | 同一LSAの版数管理 | 大きいほど新しい |
| LS Age | 生成からの経過秒数 | 小さいほど新しい(MaxAgeで失効) |
| チェックサム | 破損・内容差の検出 | 一致で同一とみなす |
隣接間で LSDB をすり合わせる際は、まず DBD(Database Description) でヘッダ一覧を交換して差分を洗い出し、足りない分だけを LSR(Link State Request)→ LSU(Link State Update) で要求・受領します。受領した LSA には必ず LSAck を返し、信頼性のある氾濫を保証します。全データを毎回送らず差分同期する点が、規模に対する効率の鍵です。
ブロードキャストセグメント(イーサネット等)では、N台が総当たりで隣接を張ると関係数が N(N-1)/2 に膨れます。OSPF は代表として DR(Designated Router)と BDR を選び、各ルータは DR/BDR とだけ隣接を張る。これで関係数を線形に抑え、フラッディングも DR 経由に集約されます。Type2 LSA はこの DR が生成します。
ダイクストラ法による SPF ツリー構築
LSDB が揃うと、各ルータは 自分自身を根(ルート) としてダイクストラ法を走らせ、各宛先までの最短経路木(SPF ツリー)を作ります。エッジの重みは各リンクの コスト(既定では参照帯域 / 帯域で算出される非負値)です。非負である点がダイクストラ適用の前提を満たします。
# 各ルータがローカルに実行(root = 自分)
dist[root] = 0、その他は無限大
候補集合(tentative)に root を投入
while 候補が空でない:
u = 候補から dist 最小のノードを取り出す # ここで u が確定(PATHへ)
for each (u, v, cost) を LSDB から参照:
if dist[u] + cost < dist[v]:
dist[v] = dist[u] + cost # 緩和
next_hop[v] = root から u 方向の第一ホップを継承
確定したノードへの第一ホップが、そのままルーティングテーブルのネクストホップになります。重要なのは、全ルータが同じ LSDB を入力にしながら、根だけが異なる SPF を各自で解く こと。入力(地図)が一致しているので、各ルータの経路は互いに整合し、転送ループが生じません。これがリンクステート型の正しさの根拠です。
トポロジが変わる(リンクのアップ/ダウン等)と新しい LSA が氾濫し、LSDB が更新され、影響を受けるルータは SPF を再計算します。SPF は計算量があり、頻繁な変化(フラッピング)は CPU を圧迫します。実装は SPF 連続実行に遅延・抑制(throttle)を入れ、短時間の変化をまとめて1回の計算に集約します。
エリア分割が SPF をスケールさせる
ネットワークが大きくなると、LSDB も SPF の計算量も膨らみます。OSPF は エリア で網を分割し、LSA の氾濫範囲と SPF 再計算の範囲を1エリア内に閉じ込めます。あるエリアでリンクが揺れても、その Type1/2 LSA は他エリアへ出ないため、他エリアのルータは SPF を再計算しません。これがエリア分割の本質的な利得です。
全エリアは中枢の バックボーン(エリア0) に接続し、エリア間トラフィックは必ずエリア0を通ります。エリアの境界に立つのが ABR(Area Border Router)、外部ドメイン(他プロトコルや別 AS)との境界が ASBR(AS Boundary Router) です。
LSA タイプの内部動作
エリアをまたぐと、詳細トポロジはそのまま運ばれず、ABR で 経路情報(プレフィックスとコスト)へ要約 されます。「他エリアの中身は見えないが、そこへ何コストで届くかは分かる」状態を作ることで、エリア外の SPF 計算から詳細を切り離します。主な LSA タイプは次のとおりです。
| Type | 名称 | 生成者 | 伝搬範囲 / 役割 |
|---|---|---|---|
| 1 | Router LSA | 全ルータ | 自分のリンクとコスト。エリア内のみ |
| 2 | Network LSA | DR | ブロードキャスト網の接続ルータ群。エリア内のみ |
| 3 | Summary LSA | ABR | 他エリアのプレフィックスを要約しエリア間へ |
| 4 | ASBR Summary | ABR | ASBR への到達情報をエリア間へ |
| 5 | AS External | ASBR | 外部(再配布)経路をAS全体へ |
Type1 と Type2 が 詳細トポロジ(ダイクストラの入力グラフそのもの)で、エリア内に閉じます。Type3 以降は 要約された経路 であり、受信側はこれをグラフのノードとして扱わず、最終的な距離計算に足し込む形で使います。つまり SPF の「グラフ探索」はエリア内のトポロジ(Type1/2)に対してだけ行われ、エリア間(Type3/4)や外部(Type5)はツリーの末端へコストを加算する という二層構造になっています。
外部経路(Type5)が多いと末端エリアの LSDB が肥大します。スタブエリアは Type5 を遮断し、外向きは ABR が注入する既定経路(Type3 の 0.0.0.0/0)で代替します。Totally Stubby ではさらに Type3 も締め、エリア内は自エリア詳細+既定経路だけになり、LSDB と SPF 負荷が最小化されます。締め出した先へは「とにかく ABR へ送れば届く」と割り切る設計です。
全体像を一段で
OSPF は「地図を完全に一致させ(フラッディングによる LSDB 同期)、各自が同じ地図から自分中心の最短経路木を解く(ダイクストラ法)」プロトコルです。一致した地図を前提とするからループに強く、その代償として全員へ地図を配り続けるコストが生じます。エリア分割と LSA タイプは、この「配る範囲」と「計算する範囲」を局所化し、規模に耐えさせるための仕組みです。挙動の確認は show ip ospf database(LSDB)や show ip route ospf(SPF 結果)で行い、同じ AS 内でもエリア間ポリシーは BGP の経路選択とは別レイヤで決まる点を意識すると、設計の責務が切り分けられます。
ネットワーク Article
OSPF の SPF 計算とリンクステート同期を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
OSPF
比較で見る軸
難易度: advanced / カテゴリ: ネットワーク / タグ数: 5
導入後に効く点
SPF はリンク変化のたびに走るため計算負荷が課題で、エリア分割により LSA の氾濫範囲と SPF 再計算範囲を局所化し、規模に対してスケールさせる。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- ネットワーク
- タグ数
- 5
判断チェックリスト
- 自社の用途が「OSPF / ルーティング」に近いか確認する。
- 強みである「OSPF は LSA をエリア内に氾濫させて全ルータの LSDB(トポロジDB)を一致させ、各ルータが自分を根にダイクストラ法で SPF ツリーを独立計算する。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。