本記事ではOSPFの起動から〜LSDBの同期完了までのOSPFの状態遷移(Down,Init,2way,Exstart,Exchange,Loading,Full)について解説いたします。
>>参考記事: 「CCIEが語る!ネットワークエンジニアにオススメな本・参考書!」
>>参考記事: 「[まとめ] OSPF 基礎〜応用・検証結果の記事をまとめました!」
OSPFの状態遷移について
まず最初に「OSPFの状態遷移の流れ」について解説いたします。
OSPFは以下7つの状態(State)があり①〜⑦の順番で状態遷移します。
- Down State
- Init State
- 2way State
- Exstart State
- Exchange State
- Loading State
- Full State
詳しくは次章で1つずつ解説いたします。
【OSPFの状態遷移 ①】Down State
Helloパケットを受信していない状態を「Down State」と呼びます。
※全てのOSPFルータはDown Stateからスタートします。
【上記の図①: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」へ遷移いたします。
【上記の図①:Helloパケット受信】
上記の図の通り、R2ではR1からのHelloパケットを受信する事によりDown StateからInit Stateへ状態遷移いたします。
【上記の図②:ネイバーテーブルに追加】
また、R2にてR1から受領したHelloパケットのパラメーター値を確認し、以下のネイバー確立条件を満たしていればR1の情報を「ネイバーテーブル」へ反映いたします。
- エリア番号
- サブネットマスク
- Helloインターバル・Deadインターバル
- スタブエリアフラグ
- 認証情報
※上記5つの設定値(全て)がOSPFルータ同士で一致している必要がございます
【上記の図③:Helloパケット送信】
その後、R2はR1に対してHelloパケットを送信します。
※上記、ネイバー確立条件を満たしていた場合、R2からR1へ送信するHelloパケットの「OSPFネイバーのルータIDリスト」フィールドにはR1のルータIDを含めて、R1へHelloパケットを送信します。
【OSPFの状態遷移 ③】2way State
双方向のルータでHelloパケットの送受信が完了し、ネイバー確立した状態を「2way State」と呼びます。
【上記の図①: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の情報を送信する事になります。
【上記の図①:Helloパケット送受信】
上記の図の通り、R1・R2にてHelloパケットに含まれるルータIDを基に、マスタールータとスレーブルータの選定を実施いたします。(ここではR1がマスタールータ、R2がスレーブルータとしております。)
【OSPFの状態遷移 ⑤】Exchange State
次はDBDパケット(LSAの一覧)を交換し合う「Exchange State」へ遷移いたします。
※補足:「DBD(DataBase Description)パケット」とは自身のリンクステートデータベースに含まれているLSAの一覧が含まれているOSPFパケットの事です。
【上記の図①:DBDパケット送信】
上記の図の通り、マスタールータであるR1がR2へDBDパケットを送信します。
【上記の図②:DBDパケット送信】
その後、スレーブルータであるR2がR1へDBDパケットを送信します。
【OSPFの状態遷移 ⑥】Loading State
次は各OSPFルータにて「Exchange State」で受信したDBDパケット(LSA一覧)を確認し、自身のリンクステートデータベースに不足しているLSA情報を収集する「Loading State」へ遷移いたします。
※上記の図では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情報のやりとり含めて問題なく完了している事を意味します。
【補足】2way State・Full State以外の状態で止まっている場合
「2way State」・「Full State」以外の状態で止まっている場合は、何かしらの理由によりOSPFが正常に動作していない事になります。
トラブルシューティングに関する記事は以下に纏めておりますので、ご興味のある方はご覧下さい。
まとめ
最後までお読み頂きありがとうございました。
OSPFの状態遷移は複雑な部分もありますが、理解しておくとトラブルシューティング時に役立ちます。ぜひ覚えておきましょう!
網羅的にOSPFの知識を身につけたい方は、以下のまとめ記事をご確認ください!!
>>参考記事: 「[まとめ] OSPF 基礎〜応用・検証結果の記事をまとめました!」