この記事は、以下の記事の続きです。
R4のACLを解除すると各ルーターのDR/BDRはどうなるのか!?
このセグメントのDR/BDRはこうなりました
では、いよいよACLを解いてみます!
R4(config-if)#no ip access-group NO_OSPF in R4(config-if)# *Jul 26 21:15:49.827: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.1.2 on FastEthernet0/0 from LOADING to FULL, Loading Done R4(config-if)# *Jul 26 21:15:52.699: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.1.3 on FastEthernet0/0 from LOADING to FULL, Loading Done R4(config-if)# *Jul 26 21:15:54.207: %OSPF-5-ADJCHG: Process 1, Nbr 192.168.1.1 on FastEthernet0/0 from LOADING to FULL, Loading Done
この時点で、誰がDRになったかは察しがつきますよね?(理由は後述)
各ルーターのインターフェースの状態を確認してみます。(例によってR1は割愛)
R2:
R2(config-if)#do sh ip o int bri Interface PID Area IP Address/Mask Cost State Nbrs F/C Fa0/0 1 0 192.168.1.2/24 1 BDR 3/3
R3:
R3(config-if)#do sh ip o int bri Interface PID Area IP Address/Mask Cost State Nbrs F/C Fa0/0 1 0 192.168.1.3/24 1 DROTH 2/3
R4:
R4(config-if)#do sh ip o int bri Interface PID Area IP Address/Mask Cost State Nbrs F/C Fa0/0 1 0 192.168.1.4/24 1 DR 3/3
おおお!R3がDROTHER(ドラザー!)になっている!R4がDRのままになっている!
これはPreemptしたと言ってもいいのではないでしょうか。
結論、非常にレアケースだが、OSPFのDR/BDRもPreemptする
ちなみに、何故私が上記で「この時点で、誰がDRになったかは察しがつきますよね?」と言ったかわかりますか?
R4のACLを解いた後に、R4のコンソール上でR1-R3とのOSPF StateがFullになったと表示されたからです。
OSPFはBroadcast/Non BroadcastのNetwork Typeの時はDRかBDRとしかFullになりません。
仮に、R4がDROTHERになったとしたら、3つのルータとFULLになんてならないんです。
どうでした?予想通りでしたか?
何故、こんな事が起きたか?振り返ってみましょう
そもそも、何故こんな事が起きるのでしょう?
そのカギはBR/BDRを選出するタイミングにあります。
BR/BDRはいつ選出されるか?理解していますか?
それは、WAITタイマーが終了した後になります。
インターフェースのOSPFを有効にしたら、WAITタイマーがカウントダウンされます。
例えば、R1だけOSPFを有効にしたとします。OSPFを有効にしたインターフェースはF0/0です。
R1(config-if)#do sh ip o int f0/0 FastEthernet0/0 is up, line protocol is up Internet Address 192.168.1.1/24, Area 0, Attached via Interface Enable Process ID 1, Router ID 192.168.1.1, Network Type BROADCAST, Cost: 1 Topology-MTID Cost Disabled Shutdown Topology Name 0 1 no no Base Enabled by interface config, including secondary ip addresses Transmit Delay is 1 sec, State DR, Priority 1 Designated Router (ID) 192.168.1.1, Interface address 192.168.1.1 No backup designated router on this network Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5 oob-resync timeout 40 Hello due in 00:00:06 Supports Link-local Signaling (LLS) Cisco NSF helper support enabled IETF NSF helper support enabled Index 1/1, flood queue length 0 Next 0x0(0)/0x0(0) Last flood scan length is 0, maximum is 0 Last flood scan time is 0 msec, maximum is 0 msec Neighbor Count is 0, Adjacent neighbor count is 0 Suppress hello for 0 neighbor(s)
WAITタイマーはDead intervalと同じで40秒です。各種デバッグをONにしてOSPFを有効にしてみますね。
R1#sh debug OSPF: OSPF packet debugging is on OSPF adjacency debugging is on OSPF hello debugging is on OSPF events debugging is on R1#conf t Enter configuration commands, one per line. End with CNTL/Z. R1(config)#int f0/0 R1(config-if)#ip ospf 1 area 0 R1(config-if)# *Jul 26 21:27:32.807: OSPF-1 ADJ Fa0/0: Interface going Up *Jul 26 21:27:32.811: OSPF-1 HELLO Fa0/0: Send hello to 224.0.0.5 area 0 from 192.168.1.1 *Jul 26 21:27:32.815: OSPF EVENT Fa0/0: set connected ndb pdbmask on interface R1(config-if)# *Jul 26 21:27:42.611: OSPF-1 HELLO Fa0/0: Send hello to 224.0.0.5 area 0 from 192.168.1.1 R1(config-if)# *Jul 26 21:27:52.227: OSPF-1 HELLO Fa0/0: Send hello to 224.0.0.5 area 0 from 192.168.1.1 R1(config-if)# *Jul 26 21:28:01.287: OSPF-1 HELLO Fa0/0: Send hello to 224.0.0.5 area 0 from 192.168.1.1 R1(config-if)# *Jul 26 21:28:10.335: OSPF-1 HELLO Fa0/0: Send hello to 224.0.0.5 area 0 from 192.168.1.1 R1(config-if)# *Jul 26 21:28:12.811: OSPF-1 ADJ Fa0/0: end of Wait on interface *Jul 26 21:28:12.811: OSPF-1 ADJ Fa0/0: DR/BDR election *Jul 26 21:28:12.811: OSPF-1 ADJ Fa0/0: Elect BDR 192.168.1.1 *Jul 26 21:28:12.815: OSPF-1 ADJ Fa0/0: Elect DR 192.168.1.1 *Jul 26 21:28:12.815: OSPF-1 ADJ Fa0/0: Elect BDR 0.0.0.0 *Jul 26 21:28:12.819: OSPF-1 ADJ Fa0/0: Elect DR 192.168.1.1 *Jul 26 21:28:12.819: OSPF-1 ADJ Fa0/0: DR: 192.168.1.1 (Id) BDR: none
12行目を見てください。ここで、インターフェース上でOSPFを有効にしています。
24行目を見てください。ここで、WAITタイマーが終わっています。そして、DR/BDRを決定しています。
つまり、WAITタイマーの中で自分よりも優先度が高いルータが現れていたら、WAITタイマーの後にそのルーターをDRにするんです。(ここでの優先度が高いとは、例のPriority/Loopback Address….ってやつです)
仮に、WAITタイマーの後に別のルーターが参加してきたら?
その場合は、通常は、新たに参加してきたルータはWAITタイマー40秒の期間があるはずで、その間に他の既にDR/BDRを選出したグループからOSPFパケットを受信するはずです。
そのパケットに現在のDR/BDRの情報が入っていたら(そして、入っているはず)WAITタイマーの中であろうが、現行のDR/BDRを尊重します。新しく入ってきたルータがPriority250であってもです。
つまり、OSPFのDR/BDRはPreemptしないと言われている理由は、新しく入ってきたルータがWAITタイマーの間に既存のルーターから現在のDR/BDRの情報を受け取る事が前提なのです。
今回のイレギュラーケースは?
今回は本当に特殊なケースです。
R4は既にWAITタイマーが終わって、自分自身をDRと認識しています。
R3も既にWAITタイマーが終わって、自分自身をDRと認識しています。
なので、WAITタイマーの守りは効かなくて、R4のACLを解除したらR1-R3のOSPFの世界と、R4の世界がくっついて、不思議な事が起った訳です。
今回はWAITタイマーの勉強になりましたか
WAITタイマーとは、何か?ってのはCCNPで深くは学ばなかったはずです。
WAITタイマーとは、DR/BDRがFlapするのを防ぐ為の猶予期間みたいなモノです。
なので、結果的にPoint-to-PointよりもAdjacencyの確立に時間がかかったりするんです。
今回の例のように、WAITタイマーは万能ではないのでPreemptされちゃう可能性もあります。
OSPFの書籍紹介の記事でも説明しましたが、Official Guide Vol1のOSPFセクションはOSPFの仕様を理解する上で非常に参考になります。まだ購入していない方、小手先の勉強でCCIE合格は無理です。必要な書籍は購入して、しっかり体系だった勉強をしましょう。勉強に重要な書籍をケチって回り道をしても、ラボ試験にFailしたら結局時間と費用を無駄にします。
必要な書籍は、買いましょう。
コメント