目次
エリア内のOSPFルータはLSDBの同期を確保する
同一エリア内のすべてのOSPFルータは、同一のLSDBを持っています。つまり、LSDBの同期を確保します。LSDBの同期処理は、アジャセンシーを形成している2台のOSPFルータ間で行うことが基本です。
イーサネット上で、アジャセンシーとなる2台のOSPFルータ間でのLSDB同期処理について解説します。
LSDBの同期処理
以下のネットワーク構成のR1とR2でLSDBの同期を確保する様子を見ていきましょう。
OSPFのLSDBの同期を確保する処理の流れは次の通りです。
- Helloパケットでネイバー/アジャセンシーの確立
- DDパケットの交換
- LSR/LSU/LSAckパケットでLSAのアドバタイズ
Helloパケットでネイバー/アジャセンシーの確立
Helloパケットによって、同じネットワーク上のOSPFルータであるネイバーを発見します。
R1から先にHelloパケットを送信したと仮定します。はじめは、R1のHelloパケットのネイバーリストには何も含まれていません。R2がHelloパケットを受信することで、同じネットワーク上のOSPFルータであるR1の存在を認識して、ネイバーテーブルにR1を登録します。このとき、R2のネイバーテーブル上でR1は「INIT」の状態となります。
R2からHelloパケットを送信するときに、ネイバーリストにはR1のルータID 1.1.1.1が含まれます。R1は、R2からのHelloパケットを受信することでR2の存在を認識して、ネイバーテーブルにR2を登録します。また、R1から送信するHelloパケットのネイバーリストにはR2のルータIDが記されます。こうしてR1とR2がお互いを認識した状態が「2WAY」です。
そして、イーサネットのようなマルチアクセスネットワークでは、DR/BDRを選出します。PriorityからR1がDRとなり、R2がBDRです。DR/BDRを選出すると、HelloパケットにそれぞれのIPアドレスが含まれます。
DDパケットの交換
R1とR2でLSDBの同期をとるためには、それぞれのLSDB内に含まれているLSAがわからなければいけません。DD(Database Description)パケットによって、R1とR2は自身のLSDBに含まれるLSAの要約情報を教え合います。LSAの要約情報とは、LSAのヘッダ部分のみの情報です。
DDパケットを交換する際に、どちらから開始するかを決定します。それがマスタ/スレーブです。ルータIDが大きいルータがマスタになり、先にDDパケットを送信します。この例では、R2がマスタで、R1がスレーブです。マスタ/スレーブを決定している状態が「ExStart」です。
マスタのR2がDDパケットを送信して、自身のLSDB内に含まれるLSAのヘッダを通知します。そして、スレーブのR1がDDパケットを送信して、自身のLSDB内に含まれるLSAヘッダを通知します。DDパケットを交換している状態が「ExChange」です。
関連記事
LSR/LSU/LSAckパケットでLSAのアドバタイズ
DDパケットを交換することで、自身のLSDBに足りないLSAがわかります。LSR(Link State Request)パケットによって足りないLSAをリクエストします。LSU(Link State Update)で、LSRによりリクエストされたLSAをアドバタイズします。そして、LSUを受信すると、LSAckで受信確認します。LSAckは受信したLSAのヘッダ部分のみを含んでいます。
R1はLSRで、足りないLSAを要求して、R2からLSUでLSAを送ります。R1はLSUを受信したらLSAckを返して、受信できたことを通知します。同様にR2はLSRで、R2に足りないLSAを要求します。そして、R1からLSUでLSAを送ります。R2はLSAckで受信確認します。そうすると、最終的にR1とR2のLSDBが同じ内容になり、LSDBの同期が完了します。
LSR/LSU/LSAckでLSDBの同期をとっている状態が「LOADING」です。そして、LSDBの同期が完了した状態が「FULL」です。
関連記事
OSPF LSR/LSU/LSAckパケットの詳細は、以下の記事をご覧ください。
LSDB同期のdebug出力とパケットキャプチャ
Ciscoルータでは、debug ip ospf adjコマンドでLSDB同期の様子をコンソール上で確認できます。ここまで解説したR1において、debug ip ospf adjコマンドでLSDB同期の様子を確認すると、以下のような出力です。
debug ip ospf adjの出力例
R1(config-if)#do debug ip ospf adj OSPF adjacency events debugging is on R1(config-if)#no shutdown R1(config-if)# *Mar 1 00:33:47.327: OSPF: Interface FastEthernet0/0 going Up *Mar 1 00:33:47.831: OSPF: Build router LSA for area 0, router ID 1.1.1.1, seq 0x80000002, process 1 R1(config-if)# *Mar 1 00:33:49.307: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up *Mar 1 00:33:50.307: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up R1(config-if)# *Mar 1 00:33:56.607: OSPF: 2 Way Communication to 2.2.2.2 on FastEthernet0/0, state 2WAY R1(config-if)# *Mar 1 00:33:58.147: OSPF: end of Wait on interface FastEthernet0/1 *Mar 1 00:33:58.147: OSPF: DR/BDR election on FastEthernet0/1 *Mar 1 00:33:58.147: OSPF: Elect BDR 1.1.1.1 *Mar 1 00:33:58.147: OSPF: Elect DR 1.1.1.1 *Mar 1 00:33:58.147: OSPF: Elect BDR 0.0.0.0 *Mar 1 00:33:58.151: OSPF: Elect DR 1.1.1.1 *Mar 1 00:33:58.151: DR: 1.1.1.1 (Id) BDR: none *Mar 1 00:33:58.651: OSPF: No full nbrs to build Net Lsa for interface FastEthernet0/1 R1(config-if)# *Mar 1 00:34:27.331: OSPF: end of Wait on interface FastEthernet0/0 *Mar 1 00:34:27.331: OSPF: DR/BDR election on FastEthernet0/0 *Mar 1 00:34:27.331: OSPF: Elect BDR 1.1.1.1 *Mar 1 00:34:27.331: OSPF: Elect DR 1.1.1.1 *Mar 1 00:34:27.331: OSPF: Elect BDR 2.2.2.2 *Mar 1 00:34:27.331: OSPF: Elect DR 1.1.1.1 *Mar 1 00:34:27.331: DR: 1.1.1.1 (Id) BDR: 2.2.2.2 (Id) *Mar 1 00:34:27.331: OSPF: Send DBD to 2.2.2.2 on FastEthernet0/0 seq 0x173A opt 0x52 flag 0x7 len 32 *Mar 1 00:34:27.831: OSPF: No full nbrs to build Net Lsa for interface FastEthernet0/0 R1(config-if)# *Mar 1 00:34:29.575: OSPF: Rcv DBD from 2.2.2.2 on FastEthernet0/0 seq 0xFB1 opt 0x52 flag 0x7 len 32 mtu 1500 state EXSTART *Mar 1 00:34:29.575: OSPF: NBR Negotiation Done. We are the SLAVE *Mar 1 00:34:29.579: OSPF: Send DBD to 2.2.2.2 on FastEthernet0/0 seq 0xFB1 opt 0x52 flag 0x2 len 52 *Mar 1 00:34:29.623: OSPF: Rcv DBD from 2.2.2.2 on FastEthernet0/0 seq 0xFB2 opt 0x52 flag 0x3 len 52 mtu 1500 state EXCHANGE *Mar 1 00:34:29.623: OSPF: Send DBD to 2.2.2.2 on FastEthernet0/0 seq 0xFB2 opt 0x52 flag 0x0 len 32 *Mar 1 00:34:29.651: OSPF: Rcv DBD from 2.2.2.2 on FastEthernet0/0 seq 0xFB3 opt 0x52 flag 0x1 len 32 mtu 1500 state EXCHANGE *Mar 1 00:34:29.655: OSPF: Exchange Done with 2.2.2.2 on FastEthernet0/0 *Mar 1 00:34:29.655: OSPF: Send LS REQ to 2.2.2.2 length 12 LSA count 1 *Mar 1 00:34:29.655: OSPF: Send DBD to 2.2.2.2 on FastEthernet0/0 seq 0xFB3 opt 0x52 flag 0x0 len 32 *Mar 1 00:34:29.675: OSPF: Rcv LS REQ from 2.2.2.2 on FastEthernet0/0 length 36 LSA count 1 *Mar 1 00:34:29.675: OSPF: Send UPD to 192.168.12.2 on FastEthernet0/0 length 52 LSA count 1 *Mar 1 00:34:29.687: OSPF: Rcv LS UPD from 2.2.2.2 on FastEthernet0/0 length 76 LSA count 1 *Mar 1 00:34:29.687: OSPF: Synchronized with 2.2.2.2 on FastEthernet0/0, state FULL *Mar 1 00:34:29.687: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on FastEthernet0/0 from LOADING to FULL, Loading Done *Mar 1 00:34:30.067: OSPF: Rcv LS UPD from 2.2.2.2 on FastEthernet0/0 length 76 LSA count 1 *Mar 1 00:34:30.191: OSPF: Build router LSA for area 0, router ID 1.1.1.1, seq 0x80000003, process 1 *Mar 1 00:34:30.191: OSPF: Build network LSA for FastEthernet0/0, router ID 1.1.1.1 *Mar 1 00:34:30.191: OSPF: Build network LSA for FastEthernet0/0, router ID 1.1.1.1 R1(config-if)# R1(config-if)# *Mar 1 00:34:36.263: OSPF: Neighbor change Event on interface FastEthernet0/0 *Mar 1 00:34:36.263: OSPF: DR/BDR election on FastEthernet0/0 *Mar 1 00:34:36.263: OSPF: Elect BDR 2.2.2.2 *Mar 1 00:34:36.267: OSPF: Elect DR 1.1.1.1 *Mar 1 00:34:36.267: DR: 1.1.1.1 (Id) BDR: 2.2.2.2 (Id) *Mar 1 00:34:36.267: OSPF: Neighbor change Event on interface FastEthernet0/0 *Mar 1 00:34:36.267: OSPF: DR/BDR election on FastEthernet0/0 *Mar 1 00:34:36.267: OSPF: Elect BDR 2.2.2.2 *Mar 1 00:34:36.271: OSPF: Elect DR 1.1.1.1 *Mar 1 00:34:36.271: DR: 1.1.1.1 (Id) BDR: 2.2.2.2 (Id) R1(config-if)#do u all All possible debugging has been turned off R1(config-if)#
また、R1-R2間のLSDB同期の様子をWiresharkでキャプチャしたファイルを以下よりダウンロードできるようにしています。
最終的にはエリア内のすべてのOSPFルータでLSDBの同期をとる
ここまで、アジャセンシーを形成している2台のOSPFルータ間でLSDBの同期を確保する様子を見ています。最終的には、エリア内のすべてのOSPFルータでLSDBの同期をとることをきちんと把握しておきましょう。次の図のR1~R5のすべてのOSPFルータは、同じLSDBを持つことになります。
OSPFの仕組み
- OSPFとは? 初心者にもわかりやすくOSPFの特徴を解説
- OSPFの処理の流れ
- OSPFルータID ~OSPFルータを識別~
- OSPFルータのルータIDが重複してしまったら?
- OSPF ネイバーとアジャセンシー
- OSPF DR/BDR
- イーサネット上のshow ip ospf neighborの見え方
- OSPFネットワークタイプ ~OSPFが有効なインタフェースの分類~
- OSPF LSDBの同期処理
- 大規模なOSPFネットワークの問題点
- OSPFエリア ~エリア内は詳しく、エリア外は概要だけ~
- OSPFルータの種類
- OSPF LSAの種類
- OSPF エリアの種類
- OSPFの基本的な設定と確認コマンド [Cisco]
- インタフェースでOSPFを有効化することの詳細
- OSPF ループバックインタフェースのアドバタイズ
- OSPF Hello/Deadインターバルの設定と確認コマンド
- OSPFコストの設定と確認
- OSPFルータプライオリティの設定と確認コマンド
- OSPFネイバー認証の設定 ~正規のルータとのみネイバーになる~
- バーチャルリンク上のネイバー認証
- OSPF スタブエリアの設定と確認[Cisco]
- OSPF スタブエリアの設定例 [Cisco]
- OSPFデフォルトルートの生成 ~default-information originateコマンド~
- OSPFデフォルトルートの生成 ~スタブエリア~
- OSPF バーチャルリンク ~仮想的なエリア0のポイントツーポイントリンク~
- OSPF バーチャルリンクの設定と確認 [Cisco]
- OSPF バーチャルリンクの設定例 [Cisco]
- OSPF 不連続バックボーンのVirtual-link設定例
- OSPFのルート集約と設定
- OSPFルート集約の設定例(Cisco)
- OSPF ルート種類による優先順位
- OSPFネイバーの状態がExstartでスタックする原因
- OSPFパケットの種類とOSPFヘッダフォーマット
- OSPF Helloパケット
- OSPF DD(Database Description)パケット
- OSPF LSR(Link State Request)パケット
- OSPF LSU(Link State Update)パケット
- OSPF LSAck(Link State Acknowledgement)パケット
- OSPF 再配送ルートの制限 ~redistribute maximum-prefixコマンド~
- OSPFでのディストリビュートリスト/プレフィクスリストの動作
- OSPFでのディストリビュートリストの設定例 Part1
- OSPFでのディストリビュートリストの設定例 Part2
- OSPFのLSAフィルタの概要 ~LSAタイプ3/タイプ5をフィルタ~
- LSAタイプ3のフィルタ設定例
- LSAタイプ5のフィルタ設定例
- 3階層モデルLANのOSPFルーティング
- 演習:実践的なOSPFルーティング Part1:OSPFの基本設定
- 演習:実践的なOSPFルーティング Part2:デフォルトルートの生成
- 演習:実践的なOSPFルーティング Part3:スタブエリア
- 演習:実践的なOSPFルーティング Part4:ルート集約
- 演習:実践的なOSPFルーティング Part5:トラブルシューティング
- OSPF 設定ミスの切り分けと修正 Part1
- OSPF 設定ミスの切り分けと修正 Part2
- OSPF 設定ミスの切り分けと修正 Part3
- OSPF 設定ミスの切り分けと修正 Part4
- OSPF 設定ミスの切り分けと修正 Part5
- OSPF 設定ミスの切り分けと修正 Part6
- Cisco OSPFv3 for IPv4の設定と確認コマンド
- Cisco OSPFv3 for IPv4の設定例
- OSPFv3の設定例 [Cisco]
- OSPFv3 ルート集約の設定例 [Cisco]