OSPFの状態遷移(Down〜Full)とパケットの種類を解説

本記事ではOSPFの起動から〜LSDBの同期完了までのOSPFの状態遷移(Down,Init,2way,Exstart,Exchange,Loading,Full)について解説いたします。

OSPFの状態遷移について

まず最初に「OSPFの状態遷移の流れ」について解説いたします。

OSPFは以下7つの状態(State)があり①〜⑦の順番で状態遷移します。

▼OSPFの状態遷移▼

  1. Down State
  2. Init State
  3. 2way State
  4. Exstart State
  5. Exchange State
  6. Loading State
  7. Full State

詳しくは次章で1つずつ解説いたします。

【OSPFの状態遷移 ①】Down State

Helloパケットを受信していない状態を「Down State」と呼びます。
※全てのOSPFルータはDown Stateからスタートします。

OSPFの状態遷移(Down)

【上記の図①:Helloパケット送信】
上記図のR1のように、Down StateのOSPFルータ(R1)は隣接機器に対しHelloパケットをマルチキャスト(224.0.0.5)宛に送信する事により、OSPFルータの有無を確認いたします。

ポイント
Helloパケットでやりとりされる情報の1つに「OSPFネイバーのルータIDリスト」がございます。

「Down State」時点では対向機器にOSPFルータが接続されているか判断出来ていない(OSPFルータを探している状態である)為、「OSPFネイバーのルータIDリスト」にはR1やR2の情報は格納されません。

【OSPFの状態遷移 ②】Init State

Helloパケットを受信すると「Init State」へ遷移いたします。

OSPFの状態遷移(Init)

【上記の図①:Helloパケット受信】
上記の図の通り、R2ではR1からのHelloパケットを受信する事によりDown StateからInit Stateへ状態遷移いたします。

【上記の図②:ネイバーテーブルに追加】
また、R2にてR1から受領したHelloパケットのパラメーター値を確認し、以下のネイバー確立条件を満たしていればR1の情報を「ネイバーテーブル」へ反映いたします。


▼ネイバー確立条件▼

  1. エリア番号
  2. サブネットマスク
  3. Helloインターバル・Deadインターバル
  4. スタブエリアフラグ
  5. 認証情報

※上記5つの設定値(全て)がOSPFルータ同士で一致している必要がございます



【上記の図③:Helloパケット送信】
その後、R2はR1に対してHelloパケットを送信します。
※上記、ネイバー確立条件を満たしていた場合、R2からR1へ送信するHelloパケットの「OSPFネイバーのルータIDリスト」フィールドにはR1のルータIDを含めて、R1へHelloパケットを送信します。

【OSPFの状態遷移 ③】2way State

双方向のルータでHelloパケットの送受信が完了し、ネイバー確立した状態を「2way State」と呼びます。
OSPFの状態遷移(2way)

【上記の図①:Helloパケット受信】
上記の図の通り、R1ではR2からのHelloパケット(R1のルータIDが含まれているHelloパケット)を受信する事により、Down Stateから2way Stateへ状態遷移いたします。

【上記の図②:ネイバーテーブルに追加】
また、R1にてR2から受領したHelloパケットのパラメーター値を確認し、ネイバー確立条件を満たしていればR2の情報を「ネイバーテーブル」へ反映いたします。


【上記の図③:Helloパケット送信】
その後、R1はR2へHelloパケット(「OSPFネイバーのルータIDリスト」フィールドにはR2のルータIDを含めたHelloパケット)をR2へ送信します。

R2ではR1からのHelloパケット(R2のルータIDが含まれているHelloパケット)を受信する事により、Init Stateから2way Stateへ状態遷移いたします。

ここまで完了すれば、双方のルータが「2way State」となりネイバー確立が完了します。


※ネットワークタイプ(Broadcast[例:Ethernetインターフェース]やNBMA)の場合、このタイミングでDR・BDRが選出されます。

DR・BDRに関してご興味のある方は以下の記事をご覧下さい。

【OSPFの状態遷移 ④】Exstart State

次はLSAの交換順序を決める為にマスタールータとスレーブルータの選定を実施する「Exstart State」へ遷移いたします。

ルータIDの値が大きいルータが「マスタールータ」となり、次工程の「Exchange State」の際にマスタールータが先にLSAの情報を送信する事になります。

OSPFの状態遷移(Exstart)

【上記の図①:Helloパケット送受信】
上記の図の通り、R1・R2にてHelloパケットに含まれるルータIDを基に、マスタールータとスレーブルータの選定を実施いたします。(ここではR1がマスタールータ、R2がスレーブルータとしております。)

【OSPFの状態遷移 ⑤】Exchange State

次はDBDパケット(LSAの一覧)を交換し合う「Exchange State」へ遷移いたします。
※補足:「DBD(DataBase Description)パケット」とは自身のリンクステートデータベースに含まれているLSAの一覧が含まれているOSPFパケットの事です。

OSPFの状態遷移(Exchange)

【上記の図①:DBDパケット送信】
上記の図の通り、マスタールータであるR1がR2へDBDパケットを送信します。


【上記の図②:DBDパケット送信】
その後、スレーブルータであるR2がR1へDBDパケットを送信します。

【OSPFの状態遷移 ⑥】Loading State

次は各OSPFルータにて「Exchange State」で受信したDBDパケット(LSA一覧)を確認し、自身のリンクステートデータベースに不足しているLSA情報を収集する「Loading State」へ遷移いたします。

OSPFの状態遷移(Loading)

※上記の図ではR1のリンクステートデータベースに不足しているLSA情報があるパターンを図解しております。

【上記の図①:不足分のLSA情報を要求】
まず最初にR1は不足しているLSA情報をR2へ要求いたします。
※LSAを要求する際は「LSR(Link State Request)パケット」を利用します。


【上記の図②:要求されたLSA情報を送信】
R2は要求されたLSA情報をR1へ送信します。
※LSRパケットの返信時は「LSU(Link State Update)パケット」を利用します。


【上記の図③:確かに受領した事を対向ルータへ連絡】
不足分のLSAを受領したR1は「問題なく受信できた事」をR2に通知します。
※LSRパケットの確認応答は「LSAck(Link State Acknowledgement)」を利用します。

【OSPFの状態遷移 ⑦】Full State

リンクステートデータベースの同期が完了すると「Full State」へ遷移いたします。
Full Stateへ遷移すれば、LSA情報のやりとり含めて問題なく完了している事を意味します。

OSPFの状態遷移(Full)

【補足】2way State・Full State以外の状態で止まっている場合

「2way State」・「Full State」以外の状態で止まっている場合は、何かしらの理由によりOSPFが正常に動作していない事になります。

トラブルシューティングに関する記事は以下に纏めておりますので、ご興味のある方はご覧下さい。

まとめ

いかがでしたでしょうか?

OSPFの状態遷移は複雑な部分もありますが、理解しておくとトラブルシューティング時に役立ちます。ぜひ覚えておきましょう!


興味のある方は合わせて読んでみてください!