はじめに
前回はSTPについて解説を行い、ちょっとしたLANのアーキテクチャを考えてみることで理解を深めていきました。今回のパートではLAN内部から飛び出して、LANの外側との通信をするためのルーティングについて解説したいと思います。今回はOSPFについて扱います!
ルーティング概説!
OSPFへ入る前に、ルーティングの全体像について解説しようと思います。まず、ルーティングは大きく分けてStatic RoutingとDynamic Routingの2つに大別できます。
Static Routing
Static Routingでは、NW管理者が自分でルーティング設定を行います。そのため、パケットが通る通信経路は固定となります。
Dynamic Routing
Dynamic Routingでは、ルーティングアルゴリズムが自動的にルーティング設定を行います。そのため、パケットが通る通信経路は変化することがあります。
Dynamic Routingは、さらにアルゴリズムの性質によってDistance VectorとLink Stateに分けることができます。
Distance Vector
Distance Vector型は、隣接するルータ間でルーティングテーブルを交換し合い、宛先NWまでの距離と方向を用いることによって経路を決定するアルゴリズムです。代表的なアルゴリズムにRIPが存在します。
Link State
Link State型は、各ルータがネットワークトポロジーの情報を共有し合い、その情報に基づいて経路を決定するアルゴリズムです。この代表的なアルゴリズムがOSPFです。OSPFはNWトポロジーの変化がすぐに各ルータに伝達されやすく、大規模NWでのルーティングプロトコルに向いているという特徴があります。
では、以降からOSPFについて詳しく見ていきましょう!
OSPFの動作について
OSPFの動作は概ね以下のようなステップとなります。
- 各ルータ間でNWトポロジーの共有
- ルーティングテーブルの作成
- (NW構成が変わったときのみ)トポロジー変化の伝搬
以下から、各ステップについて詳しく見ていきます。
1. 各ルータ間でNWトポロジーの共有
OSTPでは、NW内部の各ルータが同じトポロジー情報を持っていることが必要です。そのため、周囲のルータ間での情報交換が重要となります。ここではまず、2つのルータ間でどのような情報交換が行われるか見ていきましょう!
State:ルータの関係性について
ルータの情報交換を行う際、それぞれのルータの関係性(親密度)によって渡す情報が変わってきます。ここでは、ルータの関係性として3つのStateを紹介します。
- init State:初めて相手のことを知った時の関係性
- 2-way State:相手に名前を覚えてもらった時の関係性(友達)
- full State:お互いについて完全に知った時の関係性(親友)
この3つの状態遷移について、以下から解説します
init State
初めて相手のことを知った時の関係性をinit状態と言います。ここでは例として、ルータ1とルータ2が初めて会った時のことを考えてみましょう。まずルータ1は、LAN内のルータ2に対してフッ軽に声をかけます。
このようにルータ1がルータ2にあいさつをするわけですが(このあいさつのことをHelloパケットと言います)、ルータ2は相手のことを知りませんし、相手も自分の名前を知らなかったので、「初めて会うルータだ」と判断してルータ1との関係性をinit Stateに変更します。このような他のルータとの関係性はネイバーテーブルに記憶されます。
2-way State
次に、ルータ2はルータ1を覚えたので、名前を呼びながらあいさつすることができます(このあいさつもHelloパケットです)。
すると、ルータ1は名前を呼んでもらった嬉しさから、ルータ2との関係性を2-way状態にします。もちろんルータ1もルータ2の名前を覚えたので、名前を呼びながら挨拶できますね!
このようにして、ルータ1とルータ2が双方とも2-way Stateの状態になります。友達みたいな関係性になったということです!
Full State
ルータ1とルータ2が2-way関係になると、どちらか片方のルータがもう片方のルータに友達の紹介を始めます(このことをDBDパケットと言います)。
そうすると、友達を紹介されたルータ2にとっては、当然知らないルータの情報が出てくるわけです。これに対してルータ2は、ルータ1にそのルータの情報を聞き出します(そのようなルータの情報のことをLSAと言います)。
もちろんルータ1は、友達であるルータ3やルータ4の情報(LSA)を送信します。このようにして交友関係を広げ、トポロジーを共有していくわけです。そして、互いに知り合いの情報を交換し尽くすと、ルータ1と2は最も関係性の深いFull Stateになります。ここまでで互いの持つ情報が一致することによってOSPFを行うことができるようになります。
ここまでの状態遷移をまとめると以下のようになります。
LAN内のルータが2つだけでない場合
ここまではLAN内にルータが2つしかない状況を見てきました。しかし実際にはLAN内にルータが3つ以上存在し得ます。そのような場合、各ルータが工夫なしに挨拶や情報交換を送り合っていては非効率です。そのため、LAN内で代表者となる代表ルータ(DR)とバックアップ代表ルータ(BDR)を選出し、それらのルータが他のルータと情報交換を行います。そのため、DRやBDRは各ルータとFull状態まで交友を深め、それ以外のルータ同士は2Way状態まで交友を深めることとなります。このように、ルータ間のStateをあえて2wayまでに抑える関係を作ることで、効率的な情報交換を行えるようにします。
DRやBDRの選出方法は以下のようになります。
- ルータプライオリティが最も大きいルータをDR、2番目に大きいルータをBDRにする
- ルータプライオリティが一致する場合、ルータIDで選出する
ルータプライオリティのデフォルト値は1ですが、それ以外の値に変更可能です。また、ルータIDについては以下のような順番で決定されます。
- コマンドで明示的に設定された値を用いる
- loopback interfaceに設定したアドレスのうち、最大のものを用いる
- 物理interfaceやSVIに設定したアドレスのうち、最大のものを用いる
ここまでで、複数ルータ間のトポロジー共有ができました!
ルーティングテーブルの作成
さて、情報共有さえ完了してしまえば、あとは個々のルータがルーティングを設定していくだけです。このとき、各ルータではルーティングアルゴリズムとしてダイクストラ法を用います。このとき用いるコストの情報は帯域幅の逆数に比例したものとなります。このようなダイクストラ法を用いると、各ルータの持つトポロジー情報が同じであれば、それがどんなトポロジーであっても常に最短経路を導出することができます。これにより、効率的な通信経路を確立することができます。
ここまでで、初期のルーティングテーブルの設定は完了です!
(NW構成が変わったときのみ)トポロジー変化の伝搬
OSPFでは、通信障害等によりNWトポロジーの変更があった場合、即座にその情報を他のルータに伝達します。これによってダウンタイムを短縮し、可用性の高い通信サービスを可能にしています。
以上がOSPFの動作原理の概要となります!
マルチエリアOSPF
これまで解説してきたOSPFを実際に運用するとなった際、通信したいWANが大規模NWでルータが多数存在している場合、そのルーティングテーブルの大きさや経路計算の速度が問題になる場合があります。そのような場合に用いられるのがエリアの分割です。OSPFでは、ネットワークの一部にエリア番号をつけてグループ化することにより、OSPFでLSAを交換する範囲を制限することが可能となります。つまり、詳細なトポロジー情報はエリア内のみで共有し、ルート情報のみエリア外にも伝播させるといった効率的な情報伝達が可能となります。
マルチエリアOSPFを動作させるためには、以下の点を守る必要があります。
- バックボーンエリア(Area 0)を作成する
- 各エリアはバックボーンエリアに接するように作成する
- エリアの境界にはルータを配置する
特に、エリアの境界に配置されたルータのことをABRと言います。
まとめ
今回のまとめは以下のようになります。
- OSPFはLink State型のDynamic Routingである
- OSPFはまず、ルータ間でトポロジー情報の共有を行う
- OSPFでのルータ間の関係性は大まかにinit->2-way->fullである
- LAN内に複数のルータが存在する場合、代表となるDRとBDRを決め、それらが積極的に情報交換を行う
- OSPFの経路構築アルゴリズムは帯域幅情報をコストにしたダイクストラ法である
- 大規模NWにおいても、効率的な動作を可能にするためエリア番号によってNWを階層化してOSPFを設定することができる