コンテンツにスキップ

OSPFのネイバー形成と経路計算

OSPF は Hello で相手を見つけ、LSA を交換して LSDB を同期し、SPF 計算の結果をルーティングテーブルへ入れる。

OSPF は「経路表を隣からもらってそのまま使う」プロトコルではない。各ルータがリンク状態の情報を集め、同じエリア内で LSDB を揃え、その LSDB から自分を起点に最短経路を計算する。


インターフェースでOSPFを有効化
↓
Helloを送受信
↓
Neighbor条件を確認
↓
Neighbor状態が進む
↓
必要ならAdjacencyを形成
↓
DBD / LSR / LSU / LSAckでLSDBを同期
↓
SPF計算
↓
最適経路をRIBへ投入

RIB は Routing Information Base、つまりルーティングテーブルへ入る候補となる経路情報である。最終的に転送に使われる情報は、RIB から FIB へ反映される。


OSPF ルータは Hello パケットを使って、同じリンク上の OSPF ルータを発見する。

Neighbor になるには、主に次の条件が一致している必要がある。

項目 意味
Area ID 同じエリアに属しているか
Hello / Dead interval Hello と Dead timer が一致しているか
Authentication 認証方式と鍵が一致しているか
Stub flag Stub / NSSA などのエリア種別が一致しているか
Subnet 同一セグメントとして通信できるか

Router ID は一致してはいけない。Router ID が重複していると、別ルータとして正しく扱えない。


OSPF network type は、そのインターフェース上のルータ間接続を OSPF がどのような形として扱うかを決める。物理インターフェースや Tunnel の種類そのものを変更する設定ではない。

network type により、Hello で相手を動的に発見するか、DR / BDR を選出するか、どの相手と Adjacency を形成するか、隣接ルータへの /32 host route を作るかが変わる。OSPF を有効化する process や area は別に指定する。

同じセグメント上のルータでは、互換性のある network type と timer にそろえる。設定が食い違うと、Neighbor を形成できない場合だけでなく、Neighbor は形成できても想定した Adjacency や経路にならない場合がある。

Ethernet のように、1 つのセグメントへ複数のルータが接続し、multicast で Hello を届けられる形として扱う。Neighbor は動的に発見される。すべてのルータ同士で LSDB 同期用の Adjacency を作る代わりに DR / BDR を選出し、DROTHER は主に DR / BDR と Adjacency を形成する。

1 本のリンクの両端に 1 台ずつルータが存在する形として扱う。DR / BDR は選出せず、両端のルータが直接 Adjacency を形成する。

1 つのネットワークへ複数のルータが接続するが、broadcast や multicast だけでは相手を発見できない形として扱う。DR / BDR を選出し、通常は neighbor コマンドで相手を指定する。全ルータ間に直接通信できる経路がない部分メッシュへそのまま適用すると、DR / BDR を中心とする通信が成立しないことがある。

1 つのインターフェースと 1 つの IP subnet を、複数の point-to-point link の集合として扱う。各 Neighbor と直接 Adjacency を形成し、DR / BDR は選出しない。multicast を届けられる構成では Neighbor を動的に発見できる。point-to-multipoint non-broadcast を指定した場合は、neighbor コマンドによる指定が必要になる。

point-to-multipoint は Neighbor ごとに /32 host route を作る。これは remote router のインターフェースアドレスへ到達するための経路であり、通常の subnet route とは別にルーティングテーブルへ現れる。

DMVPN の mGRE は、Hub と複数の Spoke が同じ Tunnel subnet を共有する一方、最初から全 peer 間に直接経路があるとは限らない。この形を複数の point-to-point link として扱い、DR / BDR に依存しないようにするため、DMVPN Phase 3のOSPF構成では point-to-multipoint を使用する。


OSPF では、Neighbor と Adjacency を分けて考える。

用語 意味
Neighbor Hello により存在を認識した相手
Adjacency LSDB を同期するために形成した関係

すべての Neighbor と完全な Adjacency を作るとは限らない。Broadcast ネットワークでは DR / BDR が選出され、DROTHER 同士は完全な Adjacency を作らない。


代表的な状態遷移は次のとおり。

状態 意味
Down 相手から Hello を受け取っていない
Init 相手から Hello を受け取ったが、自分の Router ID が相手の Hello に含まれていない
2-Way 双方向通信を確認した
ExStart DB同期の主従関係を決める
Exchange DBD で LSDB の概要を交換する
Loading 不足している LSA を要求・取得する
Full LSDB が同期した

設定確認では、まず Neighbor が 2-Way 以上へ進むかを見る。Point-to-point では通常 Full まで進む。Broadcast では DR / BDR との関係は Full、DROTHER 同士は 2-Way で止まることがある。


OSPF は LSA を使ってリンク状態を表す。

DBD: LSDBの概要を交換する
LSR: 足りないLSAを要求する
LSU: 要求されたLSAを送る
LSAck: LSAの受信を確認する

このやり取りにより、同じエリア内のルータは同じ LSDB を持つ。LSDB が揃うと、各ルータは自分を起点として SPF 計算を行う。


SPF計算からルーティングテーブルまで

Section titled “SPF計算からルーティングテーブルまで”

SPF 計算では、LSDB をもとに宛先ネットワークまでの最短経路を求める。

LSDB
↓ SPF
最短経路ツリー
↓
OSPFの候補経路
↓ Administrative Distance と metric を比較
RIBへ投入

OSPF が計算した経路が必ずルーティングテーブルへ入るとは限らない。同じ宛先に静的ルートや BGP など別プロトコルの経路がある場合、Administrative Distance により別の経路が優先されることがある。


OSPF は、同じ宛先への候補を単純に metric の数値だけで比較しない。通常エリアでは、次の順に経路種別を優先する。

  1. Intra-area:同じエリア内の経路
  2. Inter-area:他エリアから受け取った経路
  3. External Type 1(E1):OSPF 外から再配送された Type 1 外部経路
  4. External Type 2(E2):OSPF 外から再配送された Type 2 外部経路

同じ経路種別の候補では cost が小さい経路が優先される。複数経路の cost も等しい場合は、等コストロードバランスの対象になる。

E1 と E2 は、OSPF 外から再配送した経路の cost をどのように比較するかを表す。外部経路を OSPF へ再配送するルータを ASBR(Autonomous System Boundary Router)という。通常エリアでは、ASBR が外部経路を Type 5 AS-external LSA として広告し、ルーティングテーブルには E1 が O E1、E2 が O E2 と表示される。

E1 の cost は、再配送時に設定した external metric と、その外部経路を広告した ASBR までの OSPF 内部 cost の合計になる。LSA に 0 以外の Forwarding Address が設定されている場合は、ASBR ではなくそのアドレスまでの内部 cost を加える。したがって、OSPF 内部の経路が長くなると E1 の合計 cost も増える。

E1のcost = external metric + ASBRまたはForwarding AddressまでのOSPF内部cost

E2 では、最初に external metric を比較する。ASBR までの OSPF 内部 cost は external metric に加算されない。複数の E2 経路で external metric が同じ場合に、ASBR または Forwarding Address までの内部 cost が比較に使われる。

例えば、ASBR-A までの内部 cost が 10、ASBR-B までが 100 であり、A が external metric 50、B が external metric 20 で同じ prefix を広告しているとする。E1 なら A は 50 + 10 = 60、B は 20 + 100 = 120 となり、A が選ばれる。E2 なら external metric の 50 と 20 を先に比較するため、B が選ばれる。

同じ宛先に E1 と E2 の両方がある場合は、metric の数値にかかわらず E1 が優先される。例えば E1 の metric が 100、E2 が 10 でも E1 が選ばれる。metric の大小だけで主経路と予備経路を作る場合は、両方を E1 または両方を E2 にそろえる。

Cisco IOS / IOS XE で再配送時に E1 または E2 を指定する方法と、省略した場合のデフォルトは 再配送の手順を参照する。


show ip ospf neighbor
show ip ospf interface
show ip ospf database
show ip route ospf
show ip protocols

show ip ospf interface では、インターフェースごとの process、area、network type、cost、timer、DR / BDR の状態を確認できる。問題を切り分ける順番は、インターフェース、Neighbor、LSDB、RIB の順がよい。Neighbor ができていない状態でルーティングテーブルだけ見ても原因は分かりにくい。