当記事は、OSPFの概要とルーティングテーブル作成までの流れについてご紹介します。
OSPFの概要
OSPFは、RIPの後継として開発された小規模から大規模のネットワーク向けのリンクステート型ルーティングプロトコルです。リンクステートの名前の通り、インタフェース(リンク)の状態(ステート)を経路情報として考慮します。
RIPにおける制約を解消するためにIETFにおいて提唱され、マルチベンダープロトコルとして最も多く使用されているプロトコルです。
OSPFでは、宛先までのコスト値(主にインタフェースの帯域幅により決定)が最小の経路を最適経路と見なします。また、同一のコスト値を持つ複数のパスが存在する場合、これらのパスを使用して負荷分散(ロードバランシング)を行うことができます。
ディスタンスベクタ型が経路情報そのものを交換するのに対し、OSPFではLSA(Link-State Advertisement)と呼ばれるリンクステート情報を交換します。
LSAには、そのルータに接続されたネットワークの情報や、インタフェースのコストなどの情報が含まれており、各ルータはこのLSAを通知/収集し、そこから各自がリンクステートデータベース(LSDB)を作成します。
さらに、各ルータはこのLSDBに基づいて最短パスツリーを作成し、各自でルーティングテーブルを作成します。また、このLSAは定期的に通知するのではなく、更新があった場合のみ、その差分情報を通知します。
そしてOSPFでは、エリアの概念を導入することで、ネットワークを論理的に分割することができ、最大ホップ数の制限もないため、より大規模ネットワークに適したルーティングプロトコルであるといえます。
OSPFルーティングテーブル作成までの流れ
RIPのようなディスタンスベクタ型のルーティングプロトコルは、ルーティングテーブルの経路情報を交換し、ルーティングテーブルを作成しますが、OSPFでは、各インタフェース上のリンクステート情報を交換し、LSDBと呼ばれるデータベースを作成します。その後、LSDBより目的のネットワークへの最適経路を計算し、ルーティングテーブルを作成するという手順を踏みます。
次からその流れを確認していきます。
ネイバーの確立
OSPFでは、Helloパケットをマルチキャスト(224.0.0.5)で送信し、他のOSPFルータを自動検出します。このパケットにより、隣接ルータが動作しているかどうかを確認するためのキープアライブの役割も果たします。デフォルトでは、10秒間隔でHelloパケットが送信され(Hello Interval)、40秒間受信ができないと、隣接ルータはダウンしたと判断(Dead Interval)します。
自動検出され、上記の条件を満たす間、隣接ルータの情報はネイバーテーブルに保存されます。また、各ルータがお互いを認識した状態を、ネイバー関係といいます。
DR、BDRの決定
ネイバー確立後、ルータは各ネットワーク単位でDR(指定ルータ)、BDR(バックアップ指定ルータ)を1台ずつ選出します。DRおよびBDRの選出方法は、以下の通りです。
- OSPFプライオリティ値が最大のルータがDR、次がBDR
- OSPFプライオリティ値が同じ場合、ルータIDが最大のルータがDR、次がBDR
※OSPFプライオリティ値とは、0~255の値で設定できる値で、デフォルトでは1に設定されています。
※ルータIDとは、IPアドレスと同じ32ビットの構成で、OSPFルータを一意に識別するための値です。
router-idコマンドによって設定した値→設定したloopbackアドレスの最大のもの→物理インタフェースに設定したアドレスの最大のものの順に優先してルータIDとして使用されます。
DR、BDRはネットワーク内でLSDBの同期に重要な役割を果たし、また負荷も大きい為信頼性が高く、障害を起こしにくいルータを選出するように設定します。
また、DRとBDRは、Ethernetなどのブロードキャストマルチアクセストポロジー、フレームリレーなどのノンブロードキャストマルチアクセストポロジーでは選出されますが、専用線などのポイントツーポイントトポロジーでは選出されません。
隣接関係とLSAアドバタイズ
DR、BDRが決定すると、他のルータはDRおよびBDRとの間で、隣接関係と呼ばれる関係を作ります。OSPFでは、全ルータがお互いにリンクステート情報を交換し合うのではなく、DR、BDRに情報を集め、DR、BDRが他のルータへ配信するというアップデート方式をとります。これにより、ネットワーク内に流れるアップデートパケットの削減が行えます。
LSDBの作成
OSPFでは、LSAを一度LSDB (リンクステートデータベース)に保存します。各ルータは、DR、BDRにより配布されたLSAをもとにLSDBを作成します。全ルータが全てのLSAを受信すると、全ルータが同じLSDBを持つことになります。
作成後は、データベース保持の為、10秒間隔でHelloパケットを送信しあい、隣接ルータの状態を確認します。また、ネットワークに変更があった際には、LSU(リンクステートアップデート)という変更の差分の情報を通知し、ネットワーク情報の更新を行います。
ルーティングテーブルの作成
全ルータが同じLSDBを保持すると、各ルータはSPFアルゴリズムと呼ばれるコストの概念をもとに、自身のルーティングテーブルを作成します。
いかがでしたでしょうか。
ぜひお勉強の際にお役立て下さい。