OSPFの概要
OSPF(Open Shortest Path First)はリンクステート型のルーティングプロトコルです.リンクステート型プロトコルはリンクのホップ数ではなく,リンクの状態を加味して経路を制御できます.リンクステート型プロトコルはコンバージェンスが速く,ルーティング情報のアップデート時のパケットが小さいというメリットがあります.反面,エリア内のルーターが増えすぎるとルータへの負荷が大きくなるというデメリットがあります.また,設計と構築が難しくなるためアドレッシングやエリア構成をあらかじめ設計の検討を行うことが必要です.これを行わないと計算リソースを過剰に消費することになってしまいます.
OSPFでは経路制御のために単純なネットワークアドレスやサブネットだけでなく,LSA(Link State Advertisement:リンクステート情報)を交換します.これにはOSPFが有効になっているインターフェースやリンクの情報が含まれており,これにより詳細なネットワーク情報を把握できます.交換した情報は,LSDB(Link State Database:リンクステートデータベース)として各ルーター内に格納されます.ネットワークが大規模化するとLSDBのサイズも大きくなり,各ルーターのリソース負荷が増加してしまいます.そこで,OSPFではエリアという概念を用いてLSDBのサイズを抑えることができます.
OSPFルーターは同一エリア内で共通のLSDBを持ち,ネットワーク内で変更があった場合はLSAを送信して情報をトリガーアップデートによって速やかに変更を反映することができます.ネットワーク内の構成を迅速にルーティングテーブルに反映できるので,誤った経路情報によってループが発生することはほとんどありません.
OSPFの基本動作
OSPFの基本的な動作は次の通りです.
- OSPFネイバーの発見
- LSDBの同期
- SPFアルゴリズムによる最適経路の選択
- OSPFネイバーの維持
OSPFではまず,同じくOSPFプロトコルを動作させる近接ルーターであるネイバー(Neighbor)を見つけます.ネイバー関係を確立すると,互いにLSAを交換してLSDBの同期をとります.LSDBの交換が終わると各ルーターでSPFアルゴリズムを用いて最適経路を選択します.その後,定期的にHelloパケットを交換することでネイバーが正常に稼働していることを確認します.もしも障害や設定更新によってネットワークに変更があった場合は,トリガーアップデートで変更を通知します.
OSPFネイバーの発見
まず,OSPFによって情報を交換する相手となるOSPFネイバーの発見を行います.
ルーター ID
ルーターを一意に識別するための32ビットの識別子です.IPアドレスと同じ記法で示されます.ルーターIDは明示的な値を設定できます.設定しない場合はloopbackアドレス,もしくは他のインタフェースアドレスのうちで最も大きいIPアドレスの順で利用されます.次のような優先順位になります.
- 手動設定したルーターID
- loopbackインタフェースの中で最も大きいIPアドレス
- loopbackインタフェース以外のインタフェースで最も大きいIPアドレス
JUNOSの場合,他のインタフェースではなく管理インタフェース(fxp0, me0)のIPアドレスも利用されます.
ネイバーとアジャセンシー
ネイバー(Neighbor)
ネイバーとは,同じOSPFネットワークに接続されているOSPFルーター同士の関係のことです.近接とも言います.ネイバー関係を確立するとHelloパケットを交換するようになります.
アジャセンシー(Adjacency)
アジャセンシーとは,LSAを交換するルーターの関係です.近隣関係とも言います.
イーサネットなどのマルチアクセス環境では全てのネイバー間でアジャセンシーを確立するわけではありません.DR/BDR以外のルーターはアジャセンシーをDR/BDRとのみ確立します.

DR/BDRの選定
マルチアクセス環境の場合,ネイバーの確立が完了するとDRとBDRの選定を始めます.DR/BDRはインタフェース単位で選定されます.よって,エリアにまたがって複数のDR/BDRを担うルーターもあり得ます.
DR(Designated Router)の選定
DRは次の順番で選定されます.
- DR宣言している中で最もプライオリティが最も大きいものが優先されます.
- プライオリティが同じルーターがいる場合,その中にBDR宣言しているルーターがいればDRに昇格します.
- いない場合は,ルーターIDが最も大きいものを優先します.
BDR(Backup Designated Router)の選定
BDRは次の順番で選定されます.
- DR宣言しているルーターを除外し,BDR宣言をしているルーターの中で最もプライオリティが大きいものが優先されます.
- BDR宣言しているルーターがいないときは,残りのルーターの中でプライオリティが最も大きいものが優先されます.
- プライオリティが同じときはルーターIDが最も大きいルーターが選ばれます.
- 残りのルーターが存在しないときはBDR無しとなります.
選定プロセスの実行注意点
以下の場合は1台のルーターが1つのエリアにおいてDRとBDRの両方に選定されることを防ぐためにもう一度だけ選定プロセスを実行します.
- 自身が新規にDR/BDRに選定された場合
- 自身がDR/BDRに選定されていた状態で役割が変化した場合
選定タイミング
DR/BDRが選定されているセグメントでは,新たにルーターを追加してもDR/BDRは変更されません.DRがダウンした場合はBDRがDRに昇格します.
初期状態ではインタフェースがアップするとWait Timerが起動し,Helloパケットを送信し始めます.Wait Timerが切れるまで,ネイバーの学習を続けます.その後,DR/BDRの選定プロセスを開始します.初期状態ではDR/BDRのルーターIDは0.0.0.0として送信します.2way状態のネイバーから以下のHelloパケットを受信した場合はすぐに選定プロセスを実行します.
- BDRアドレスに0.0.0.0が格納されたDRからのHelloパケット
- BDRからのHelloパケット
すでにDRが選定されている状態では,以下のようなネイバー除隊の変更があった場合に実行します.
- 新たなネイバーと2wayが確立した場合
- ネイバーダウンを検知した場合
- ネイバーが新たにネイバー自身をDR/BDRと宣言した場合
- BDRが異なるルーターをBDRと宣言した場合
- ネイバーがプライオリティを変更した場合
ネットワークタイプ
OSPFでは物理ネットワークの構成によっていくつかのネットワークタイプを利用できます.構成によってはDR/BDRの剪定を行いません.
物理ネットワーク構成 | OSPFネットワークタイプ | 代表的ネットワーク例 |
P2P | P2P | シリアル専用線,POS |
ブロードキャスト | Broadcast | Ethernet,トークンリング |
NBMA | NBMA,P2MP | フレームリレー,ATM,x25 |
P2P
対向のネイバーとアジャセンシーを確立します.DR/BDRの選出は行いません.P2PではIPアドレスを設定しなくても構いません.
ブロードキャスト
DR/BDRの選出が行われます.ネイバーは全てのルーター間で確立しますが,アジャセンシーはDB/BDRとだけ確立します.このタイプのネットワークでは,次のマルチキャストアドレスが利用されます.
- 224.0.0.5:DR/BDRから他の全てのOSPFルーター宛て
- 224.0.0.6:DR/BDR以外のルーターからDR/BDR宛て
NBMA(Non-Broadcast Multiple Access)
全ての通信はユニキャストで行われます.全てのルーター間で持続性を確保するために,スタティックルートなどで経路を設定します.DR/BDRは全てのルーターと物理的に接続されているルーターに限られます.自動でネイバーを発見できないので,事前に設定しておく必要があります.Hello IntervalやRouter Dead Intervalを30秒や120秒などの大きい値に設定します.
ネイバー確立のプロセス
Down状態
Helloパケットを受信していない状態です.他のOSPFルーターの存在を認識していません.この状態からネイバーを見つけるためにHelloパケットを送信します.
Init状態
他ルーターからHelloパケットを受信した状態です.Helloパケットに含まれる情報から,ネイバー確立の条件を満たしていれば,ネイバーテーブルの中に対向ルーター情報を格納したのちHelloパケットを送信します.
2way状態
ネイバーテーブルにお互いの情報が追加された状態です.最初にHelloパケットを送信したルーターは,対向ルーターから受信したパケットを見て自身が対向ルーターに認識されたことを把握します.この時点で最初にHelloパケットを送信したルーターは2way状態となります.さらに,対向ルーターへ同様にHelloパケットを返すことによってお互いが2way状態となると,ネイバーが確立した状態となります.
アジャセンシー確立のプロセス
アジャセンシーは,ネイバー間で経路情報のアップデートなどをやり取りする関係のことです.P2Pネットワークの場合,ネイバー間でアジャセンシーが確立されます.
EXSTART状態
R1 ——[Hello:DD sequence]——> R2
DR/BDRの選定が完了した状態です.DD(Database Description)パケットのシーケンス番号の決定とLSDB交換時のネイバー間でのマスターとスレーヴの関係を決定します.ルータIDの大きい方がマスターとなります.
EXCHANGE状態
R1 ——[DD:LSDB]——> R2
R1 <——[LSAck]—— R2
LSDBの交換準備が整った状態です.DR/BDRとLSDBを交換します.LSDB全てを交換するのではなく,自身が保持しているLSAのヘッダ部分のみを双方向で交換します.
マスターはDDパケットのシーケンス番号を1つずつ増加させて自分のLSDBを送信します.DDパケットのLSAヘッダ情報を自身のLSDBと比較して,LSDBになかった場合や自身のLSA情報が古かった場合は,要求リストに追加します.
LOADING状態
R1 ——[LSR]——> R2
R1 <——[LSU]—— R2
R1 ——[LSAck]——> R2
DR/BDRと詳細なリンク情報の交換をします.自身が保持していない,または保持しているLSAよりも最新のLSAがある場合には要求リストをもとにその情報を要求します.これも双方向で行われ,DRは受け取ったLSAをフラッディングします.
要求リストに含まれるLSAを受け取るため,LSRパケットを送信します.LSRパケットを受信したルータは要求されたLSAをLSUパケットで送信します.LSUパケットを受信するとLSAckパケットで確認応答を行います.
FULL状態
LSDBの情報交換が完了し,アジャセンシーの確立が完了した状態です.この状態ではアジャセンシーが確立したルーター同士で同じLSDBを持つことになります.コンバージェンスが完了したともいいます.
N台のルータが存在するマルチアクセスネットワークではN(N-1)/2組のアジャセンシーが確立されます.
LSAのフラッディング
LSAを更新したルータはそのLSAをLSUパケットに収め,フラッディングします.LSUパケットを受信したルータは正当性を確かめます(LS Checksum).正当な情報であればLSDBを検索し,LSAを要求するかどうかを判定します.
LSAをフラッディングするとLSAckがあるまで再送を続けます.フラッディングループ防止のためにLS ageをTTLとして使います.最大3600秒で消失し,LSAは30分ごとに再生成されます.
OSPFのメトリック
OSPFではコストによってリンクの優先度を示します.コストはインタフェースごとに1〜65535で表されます.宛先ネットワークまでの通過経路の合計コストで経路を選択します.合計コストには出力インタフェースのコストのみを加算します.
多くのベンダーの実装ではインタフェースコストは以下の式に基づいて算出されます.
100 (Mbps) / [インタフェース速度(M bps)] = インタフェースコスト
主なインタフェース別では以下のようになります.OSPFの規格策定は古いため,Gigabit Ethernetなどの100 Mbps以上の回線は全てコストが1になります.現代のネットワークに則したコストを設定したい場合は,インタフェースに手動でコスト設定をするか,上記計算式を変更するなどのチューニングを行う必要があります.その場合,全てのルーターでコストを揃えておく必要があります.
インタフェース規格 | インタフェース速度 | コスト |
Giga-Ether | 1000 Mbps | 1 |
Fast-Ether | 100 Mbps | 1 |
Ether | 10 Mbps | 10 |
Serial | 1.544 Mbps | 64 |
コメント