OSPFのDR/BDRはPreemptしない?その2

この記事は約10分で読めます。
スポンサーリンク

この記事は、以下の記事の続きです。

OSPFのDR/BDRはPreemptしない?その1
CCIEではOSPFについてかなり細かい所まで求められます。 時にはCCNPで勉強した常識が覆される事も多々あります。 例えばNetwork Typeが違うルータ同士でもネイバー張れるとかですね。 今日の記事はそんなCCN...

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の情報を受け取る事が前提なのです。

今回のイレギュラーケースは?

TSJ93_hizamakuran20150208150259-thumb-1000xauto-12448

今回は本当に特殊なケースです。

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したら結局時間と費用を無駄にします。

必要な書籍は、買いましょう。

コメント

タイトルとURLをコピーしました