はじめに
ネットワークスペシャリスト試験の勉強の中でOSPF、LSAについて調べたので備忘録。
OSPFとは
OSPF(Open Shortest Path First)は、ルーティングプロトコルの一種です。
※ルーティングプロトコルとは、ネットワーク内で「どの経路を通れば目的地に最適にたどり着けるか」を決めるルールのこと。
OSPFは、企業ネットワークやデータセンターなどの一つの組織内のネットワークで使用されることが多いです。
※IGP(Interior Gateway Protocol) と呼ばれるカテゴリに属します。
OSPFの特徴は以下の通りです。
- リンクステート型のルーティングプロトコル
ネットワーク全体の地図を作り、最適な経路を計算する。 - 最短経路を計算する
「一番早く届くルート」を自動で選んでくれる。 - ネットワークの変化に素早く対応
どこかのルートが故障した場合、自動的に別のルートを探す。 - エリア分割による負荷分散が可能
大規模ネットワークでも効率的に動作する。
OSPFの動作イメージ
なかなかイメージが難しいかもしれないので、以下のシナリオで説明してみたいと思います。
あなたの会社には、3つの拠点(A支社・B支社・本社)があります。
各拠点にはルータがあり、最適なルートを見つけるためにOSPFを使っています。
ネットワーク構成は以下の通りです。
-
本社ルータ(ルータH)
A支社とB支社の両方とつながっている -
A支社ルータ(ルータA)
本社ルータHとつながっている -
B支社ルータ(ルータB)
本社ルータHとつながっている
この構成で、A支社のPCからB支社のPCへ通信する最適なルートをOSPFで決めることを目標とします。
①OSPFネットワークへの参加(Helloパケット)
まず、ルータ同士が隣接関係を確立するためにHelloパケットを送ります。
ルータA「やぁ、ここはOSPFネットワークかい?誰かいる?」(Helloパケット送信)
ルータH「おっ、新しいルータ発見!俺はルータH、本社を担当している。君は?」(Helloパケット送信)
ルータA「俺はA支社のルータA、よろしく!」
ルータB「俺はB支社のルータB!誰かいる?」(Helloパケット送信)
ルータH「よおB!俺はルータHだ、A支社のルータAもいるぞ!」(Helloパケット送信)
Helloパケットのやり取りにより、ルータA、ルータB、ルータHはお互いの存在を認識しました。
Helloパケットとは?
ルータがOSPFネットワークに参加する際に送信するパケット。
これにより、お互いの存在を確認し、隣接関係を確立する。
Helloパケットを受け取ったことを示す応答はありません。
お互いにHelloパケットを送信することで隣接関係が確立されます。
②ルータ間のネットワーク情報の交換(LSA Type 1)
ルータは自分が知っているネットワーク情報を広報します。(LSA Type 1送信)
ルータA「俺はA支社のネットワーク、192.168.1.0/24に接続してるぜ!」(LSA Type 1送信)
ルータB「俺はB支社のネットワーク、192.168.2.0/24に接続してるぞ!」(LSA Type 1送信)
ルータH「了解!A支社は192.168.1.0/24、B支社は192.168.2.0/24だな!」(LSDBを更新)
ルータH「ルータA、B支社の192.168.2.0/24はルータBが担当しているぞ!」(LSAのフラッディング)
ルータH「ルータB、A支社の192.168.1.0/24はルータAが担当だ!」(LSAのフラッディング)
LSA Type 1の共有により、A支社・B支社がそれぞれ相手のネットワーク範囲がどこにあるかを理解しました。
LSA Type 1(ルータLSA)とは?
ルータが「自分がどのネットワークに接続しているか」を広報するもの。
他のルータは、その情報を元にルーティングを構築する。
LSDB(Link-State Database)とは?
OSPFルータが持つ「ネットワーク全体の地図」のようなもの。
LSAのフラッディング(拡散)とは?
OSPFでは、すべてのルータが同じネットワークの地図(LSDB) を持つ。
各ルータに対してLSDBを拡散することで、すべてのルータで同じLSDBを保持できるようになる。
(イメージ的には同期が近い)
③ルータAとルータBが最適なルートを計算(SPFアルゴリズム)
ルータは認識したネットワーク情報を元に、最適なルートを計算します。
ルータA「ふむ...192.168.2.0/24に行くにはルータH経由が一番いいな!」
ルータB「192.168.1.0/24へはルータH経由が最適だな!」
ルータA「OK、B支社の192.168.2.0/24はルータH経由で行くように設定完了!」(ルーティングテーブルの更新)
ルータB「A支社の192.168.1.0/24へルータH経由で行くように設定した!」(ルーティングテーブルの更新)
これで、A支社とB支社間のルートが確立しました。
PC同士の通信が可能になったのです。
SPF(Shortest Path First)アルゴリズムとは?
OSPFではDijkstra(ダイクストラ)のアルゴリズムを使って、最短経路を計算する。
このアルゴリズムで、どの経路が一番短いか(コストが低いか) を導き、最適なルートを選択する。
ルートの再計算方法について
ルータHとルータBのリンクがダウンした場合を考えてみましょう。
OSPFではHelloパケットを一定間隔で送ることで、隣接ルータの生存確認をしています。
ルータH「ルータBからHelloパケットが来なくなった...ダウンしたか!?」
ルータH「とりあえず、ルータBの情報を削除したLSAを送るぞ!」(LSAのフラッディング)
ルータA「えっB支社のルートが削除されてる!」(LSDBの更新)
ルータA「別のルートでB支社に行けないかSPFを再計算しよう!」
ここで、ルータAと接続されている機器、ルータC(別拠点)とルータBが接続されているものとします。
ルータC「俺はルータBに接続してるぞ!」(LSA Type 1送信)
ルータA「なるほど!ルータC経由ならルータBに行けるのか!」(LSDBの更新)
このように、OSPFの強みは、ネットワークの変化にすぐ対応できることです。
どこかのリンクがダウンしても、新しいルートを自動計算します。
隣接ルータの生存確認
OSPFでは、一定間隔(デフォルト:10秒)でHelloパケットを送信する。
デッドタイマー(デフォルト:40秒)経っても応答がなければ、そのルータはダウンとみなされる。
ルータがダウンしたことを検知した場合、新しいLSAを送信する。
LSAのTypeについて
上の例を見てもらえばわかるように、OSPFではLSA(リンクステートアドバタイズメント) を用いてネットワークの情報を交換し、すべてのルータが同じLSDB(リンクステートデータベース) を持つように同期します。
LSAには複数の種類があり、それぞれが異なる役割を持っています。
ここでは基本的な、Type1~5までを紹介します。
LSA Type 1(ルータLSA)
自分がどのネットワークに接続しているルータかを通知します。
- 送信者:すべてのOSPFルータ
- 範囲:OSPFの同じエリア内(エリアを越えない)
- 役割:
- ルータが自分の接続しているネットワークを広告
- 隣接ルータとの接続情報を共有
- OSPFの最も基本的なLSA
ルータA:「俺は192.168.1.0/24につながってる!」
LSA Type 2(ネットワークLSA)
LAN上にどのルータが存在しているかを通知します。
- 送信者:DR(デザインルータ)のみ
- 範囲:OSPFの同じエリア内(エリアを越えない)
- 役割:
- ブロードキャストネットワーク(LAN)上に接続されているすべてのルータ情報を共有
- すべてのルータが全員とHelloパケットを交換しないように、DR(デザインルータ) が代表して情報を送る
ルータH(DR):「このLANにはルータAとルータBがいるぞ!」
DR(デザインルータ)とは?
LANなどでOSPFの情報を効率的に管理する代表ルータ。
OSPFでは、LANなどのブロードキャスト可能なネットワークにおいて、ルータ同士が全員とHelloパケットをやり取りすることでパケットの逼迫につながる。
その解決策として、1台のルータを代表にしてネットワーク全体の情報をまとめる。
ちなみに、DRはネットワーク内のルータで最もプライオリティ値(OSPF Priority)が高いものが選出される。
LSA Type 3(サマリLSA)
他のエリアのネットワーク情報を通知します。
- 送信者:ABR(エリアボーダールータ)
- 範囲:OSPFの異なるエリア間
- 役割:
- OSPFのエリアをまたぐネットワーク情報を広報する
- 例えば、エリア0(バックボーン)にあるネットワークをエリア1に伝える
ルータH(ABR):「エリア0には192.168.1.0/24もあるぞ!」
ABRとは?
OSPFの異なるエリアを接続するルータ。
OSPFではネットワークを複数のエリアに分割することで、ルータが処理するルート情報を減らしてネットワークのスケーラビリティを向上させる仕組みがある。
その異なるエリアを接続するルータがABRとなる。
LSA Type 4(ASBRサマリLSA)
ASBRの情報を通知します。
- 送信者:ABR
- 範囲:OSPFの異なるエリア間
- 役割:
- ASBRの情報を広報
- LSA Type 5(外部LSA)を送るASBRをネットワーク全体に通知する
ルータH(ABR):「外部ネットワークに接続するときはASBRルータXに聞け!」
ASBR(Autonomous System Boundary Router)とは?
OSPFと外部ネットワーク(BGPやスタティックルートなど)をつなぐルータ。
OSPFは基本的にOSPF内部のルータ同士でネットワーク情報をやり取りするプロトコルだが、
現実のネットワークではOSPFの外(別のASやBGP、スタティックルート)と通信する必要がある。
そのとき、外部ネットワークの情報をOSPF内に広報する役割を持つルータがASBR。
簡単に言うと、OSPFと外部ネットワークの窓口。
LSA Type 5(外部LSA)
BGPなどの外部ルート情報をOSPFに広報します。
- 送信者:ASBR
- 範囲:OSPFの全エリア(スタブエリアを除く)
- 役割:
- OSPFの外(例えばBGP経由のインターネット等)のルートをOSPFネットワークに広報する
ASBR:「インターネットの8.8.8.8/32は俺のところ経由だ!」
スタブエリアとは?
OSPFのトラフィックを減らして、ルーティングをシンプルにするためのエリア。
OSPFは大規模なネットワークでも使えるように設計されているため、エリアを分割して管理する仕組みがある。
しかしエリアが増えると、それぞれのルータが管理する経路情報(LSA)が増えてしまい、処理負荷が高くなる。
解決策として、OSPFのルート情報を制限し、不要なLSAを抑えて処理負荷を減らすのがスタブエリア。
簡単に言うと、スタブエリアのルータは外部ネットワークの情報は受け取らず、とりあえずデフォルトゲートウェイに通信を送る、みたいなイメージ。
BGPとOSPFについて
OSPFとBGPは担う役割が異なるルーティングプロトコルです。
OSPFは内部のルート情報を管理するプロトコルであるのに対し、
BGPはインターネット状の異なるAS(Autonomous System)をつなぐルーティングプロトコルです。
簡単に言うと、BGPは異なるISP同士のルーティング情報をやり取りするプロトコルです。
また、属するカテゴリも
OSPFがIGP(Interior Gateway Protocol) であるのに対し、
BGPはEGP(Exterior Gateway Protocol) です。
BGPについては別記事で詳しく解説したいと思います。
まとめ
普段の業務で意識するのはLAN内のネットワークが主だったので、デフォルトゲートウェイを抜けた後の通信について知る良い機会でした。
インターネットって複雑な仕組みで出来てるんですね...