🎓 レベル:発展 | 重要度:A(必須) 📎 前提:距離ベクトル型(RIP/EIGRP)
要点(BLUF)
- リンクステート型は、各ルータがネットワーク全体の地図(LSDB)を共有し、自分でダイクストラ法を解いて最短経路を計算します。
- 代表がOSPF。メトリックは帯域ベースのコストで、速い回線を正しく優先します。AD=110。
- 隣接(neighbor)を確立してリンク状態を交換し、大規模ではエリアに分けて負荷を抑えます。
リンクステートの考え方
距離ベクトルが「隣の噂を信じる」のに対し、リンクステートは「全員が同じ地図を持ち、各自で最短を計算」します。
- 各ルータが自分のリンク状態(LSA:どの隣と、コストいくつで繋がるか)を全域にフラッディング。
- 全LSAを集めて**LSDB(リンクステートデータベース=地図)**を作る。全ルータで同一。
- 各ルータが自分を起点に**ダイクストラ(SPF)**で最短木を計算し、テーブルへ。
graph TD L["全ルータが同一のLSDB(地図)を保持"] S["各自がダイクストラで最短経路木を計算"] T["ルーティングテーブルへ反映"] L --> S --> T
コスト:帯域で決まる
OSPFのメトリックはコストで、既定では コスト = 参照帯域 / インターフェース帯域(参照帯域は既定100Mbps)。速いほど低コスト=優先されます。
# OSPF コスト = 参照帯域(bps) / インターフェース帯域(bps)(最低1, 切り捨て)
ref_bw = 100_000_000 # 既定の参照帯域 100Mbps
def ospf_cost(if_bw_bps, ref=ref_bw):
return max(1, ref // if_bw_bps)
for name, bw in [("FastEthernet 100M", 100_000_000),
("Ethernet 10M", 10_000_000),
("Gigabit 1G", 1_000_000_000)]:
print(f"{name:18} -> cost {ospf_cost(bw)}")
実行結果:
FastEthernet 100M -> cost 1
Ethernet 10M -> cost 10
Gigabit 1G -> cost 1
注目:既定の参照帯域100Mbpsだと、1Gと100Mが同じコスト1になってしまう(高速回線を区別できない)。そこで実務では auto-cost reference-bandwidth を上げて区別します。これはOSPF設計の定番の落とし穴です。
隣接確立とDR/BDR
OSPFはまずHelloパケットで隣接(neighbor)を見つけ、条件が合えばアジャセンシを確立してLSDBを同期します。
- イーサネットのようなマルチアクセス区間では、全員が全員とLSAを交換すると爆発的に増えます。そこで**DR(代表ルータ)とBDR(バックアップ)**を選び、他はDRとだけ交換して効率化します。
- DR選出はOSPFプライオリティ最大→ルータID最大。P2Pリンクでは不要。
Router(config)# router ospf 1
Router(config-router)# router-id 1.1.1.1
Router(config-router)# network 192.168.1.0 0.0.0.255 area 0
Router(config-router)# auto-cost reference-bandwidth 10000
network のワイルドカードマスク(0.0.0.255)は、サブネットマスクのビット反転である点に注意。
エリア:規模を分割する
全ルータが全LSAを持つと、大規模ではLSDBとSPF計算が重くなります。エリアに分割し、エリア内の詳細を境界(ABR)で集約して外に出すことで、計算範囲と更新の波及を局所化します。すべてのエリアはバックボーン area 0に接続する規約です。
なぜ全体地図を持つのか(設計の直観)
噂(距離ベクトル)は速く伝わらず、誤りも混じってループを生みます。全員が同じ正確な地図を持てば、各自の計算結果は整合し、ループが原理的に起きにくく、収束も速い。地図の共有コスト(メモリ・フラッディング)を払う代わりに、正しさと速さを買う——これがリンクステートの取引です。大規模ネットの主役がOSPF/IS-ISである理由です。
⚠️ よくある誤解
- 「OSPFのメトリックはホップ数」ではない。帯域ベースのコスト。速い経路を選びます(RIPとの最大の違い)。
- 「DRはルーティングの親玉」ではない。DRはLSA交換を効率化する代表にすぎず、転送経路を独占しません。
- 「参照帯域は気にしなくてよい」ではない。既定100Mbpsだとギガ以上が区別できません。広帯域環境では引き上げが必須です。
対応 lab
[[networking-study/labs/06-03_ospf_cost.py]]— コスト計算と参照帯域の落とし穴
関連
- 前:
[[06-02_距離ベクトル型]]/次:[[06-04_ルーティングの比較と再配布]] - 設計演習:
[[08-04_総合演習]]