OSPFのネイバーを張る為にはHello/Deadタイマーは一致する必要がある?その2(回答編)

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

この記事は、以下の記事の回答編です

OSPFのネイバーを張る為にはHello/Deadタイマーは一致する必要がある?その1(問題編)
以下の記事で軽くネタバレしていますが、一般的にOSPFのHello/Deadタイマーは一致する必要があると学びます。 これは、本当に「絶対」でしょうか? そもそも、何故一致する必要があるのか? 答えは簡単ですね。一致させな...

この記事を読む方は必ず上の記事を読んだ後に見に来てください。学習効率が著しく下がります。

問題のおさらい

  • RouterAとRouterBでネイバーを張る事。ただし、HelloインターバルはRouterAとRouterBで違う必要がある。

回答

  • hello intervalを1秒以下に設定する

予想通りでしたか?これだけだと分かりづらいかもしれないので、具体例を出します。

いつも通り、INEのWorkbookです。R8とR10がPoint to Pointで繋がっています。

この2台でネイバーを張りたいと思います。

R8:

R8(config-subif)#do sh run | s ospf
router ospf 1
 network 155.1.108.0 0.0.0.255 area 0

R10:

R10(config-subif)#do sh run | s ospf
router ospf 1
 network 155.1.108.0 0.0.0.255 area 0
%OSPF-5-ADJCHG: Process 1, Nbr 150.1.8.8 on GigabitEthernet1/0.108 from LOADING to FULL, Loading Done

特にhello/deadを設定していないので、想定通りネイバーが成立しました。

ここで、R8のHelloを変えてみます。

R8(config-subif)#ip ospf hello-interval 200
R8(config-subif)#do sh ip ospf int g1/0.108
GigabitEthernet1/0.108 is up, line protocol is up
  Internet Address 155.1.108.8/24, Area 0, Attached via Network Statement
  Process ID 1, Router ID 150.1.8.8, Network Type BROADCAST, Cost: 1
  Topology-MTID    Cost    Disabled    Shutdown      Topology Name
        0           1         no          no            Base
  Transmit Delay is 1 sec, State BDR, Priority 1
  Designated Router (ID) 150.1.10.10, Interface address 155.1.108.10
  Backup Designated router (ID) 150.1.8.8, Interface address 155.1.108.8
  Timer intervals configured, Hello 200, Dead 800, Wait 800, Retransmit 5
    oob-resync timeout 800
    Hello due in 00:02:58
  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 1, maximum is 1
  Last flood scan time is 0 msec, maximum is 0 msec
  Neighbor Count is 1, Adjacent neighbor count is 1
    Adjacent with neighbor 150.1.10.10  (Designated Router)
  Suppress hello for 0 neighbor(s)
R8(config-subif)#
%OSPF-5-ADJCHG: Process 1, Nbr 150.1.10.10 on GigabitEthernet1/0.108 from FULL to DOWN, Neighbor Down: Dead timer expired

想定通り、インターバルに差異があるからネイバーがダウンしました。

では、次にR8のhelloインターバルを1秒以下に変更してみます。これは、deadインターバルを変更する事で実現可能です。

R8(config-subif)#no  ip ospf hello-interval 200
R8(config-subif)#ip ospf dead-interval minimal hello-multiplier 3
R8(config-subif)#do sh ip ospf int g1/0.108
GigabitEthernet1/0.108 is up, line protocol is up
  Internet Address 155.1.108.8/24, Area 0, Attached via Network Statement
  Process ID 1, Router ID 150.1.8.8, Network Type BROADCAST, Cost: 1
  Topology-MTID    Cost    Disabled    Shutdown      Topology Name
        0           1         no          no            Base
  Transmit Delay is 1 sec, State BDR, Priority 1
  Designated Router (ID) 150.1.10.10, Interface address 155.1.108.10
  Backup Designated router (ID) 150.1.8.8, Interface address 155.1.108.8
  Flush timer for old DR LSA due in 00:02:44
  Timer intervals configured, Hello 333 msec, Dead 1, Wait 1, Retransmit 5
    oob-resync timeout 40
    Hello due in 0 msec
  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 1, maximum is 1
  Last flood scan time is 0 msec, maximum is 0 msec
  Neighbor Count is 1, Adjacent neighbor count is 1
    Adjacent with neighbor 150.1.10.10  (Designated Router)
  Suppress hello for 0 neighbor(s)

これで、helloが333 msecになりましたね(deadの1/3)。

次に、R10のhelloを250msecにしてみましょう。

R10(config-subif)#ip ospf dead-interval minimal hello-multiplier 4
%OSPF-5-ADJCHG: Process 1, Nbr 150.1.8.8 on GigabitEthernet1/0.108 from LOADING to FULL, Loading Done
R10(config-subif)#do sh ip ospf int g1/0.108
GigabitEthernet1/0.108 is up, line protocol is up
  Internet Address 155.1.108.10/24, Area 0, Attached via Network Statement
  Process ID 1, Router ID 150.1.10.10, Network Type BROADCAST, Cost: 1
  Topology-MTID    Cost    Disabled    Shutdown      Topology Name
        0           1         no          no            Base
  Transmit Delay is 1 sec, State DR, Priority 1
  Designated Router (ID) 150.1.10.10, Interface address 155.1.108.10
  Backup Designated router (ID) 150.1.8.8, Interface address 155.1.108.8
  Timer intervals configured, Hello 250 msec, Dead 1, Wait 1, Retransmit 5
    oob-resync timeout 40
    Hello due in 0 msec
  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 1, maximum is 1
  Last flood scan time is 4 msec, maximum is 4 msec
  Neighbor Count is 1, Adjacent neighbor count is 1
    Adjacent with neighbor 150.1.8.8  (Backup Designated Router)
  Suppress hello for 0 neighbor(s)

deadを変更した瞬間にネイバーが成立します。インターフェースの設定を確認すると、確かにhelloは250msに変わってますね。

つまり、R8(333msec)とR10(250msec)の設定にも関わらず、ネイバーが張られています。

何故、ネイバーが張れるのか?

実は、私がRFCを確認した限り「Dead Intervalがノード間でマッチする必要がある」という記載はありますが、「Hello Intervalがノード間でマッチする必要がある」という記載は見当たりませんでした。

通常はHelloはDeadの3倍なので、結果的にHello/Deadの両方がマッチするかマッチしないかになる為、Hello/Dead両方がマッチしないとネイバーが張られないと思ってしまいます。

然しながら、上記の設定で例外的に「Deadはマッチするが、Helloはマッチしない」状況を作り出せてしまいます。

その結果、RFC的にも成立し、ネイバーが張られているのでは?と考えられます。

(2015/9/12追記)以下のコメントを頂きました。ゆうさん、ありがとうございます!

横槍失礼します。
OSPFのネイバーの確立にはHelloインターバルの一致は必須です。

“ip ospf dead-interval minimal hello-multiplier”コマンドを使用すると、Helloインターバルの値に関係無く、OSPFのHello PacketのHelloIntervalフィールドには0が格納されます。

なので、実際のHelloインターバルの値に関わらず、自身がHello PacketのHelloIntervalフィールドに格納した値と、対向から受信したHello PacketのHello Intervalフィールドに格納されている値が一致するので、ネイバーが確立できるのでは。

実際にINEのWorkbookでのR10で検証してみました。

以下が、hello-multiplier設定前です。R10とR8間のインターフェースです。

*Standard input   [Wireshark 1.10.6  (v1.10.6 from master-1.10)] 2015-09-12 20-23-26

 

次に、R10のR8向けのインターフェースのdeadをminimalに、hello-multiplierを3にしてみたパケットキャプチャです。

*Standard input   [Wireshark 1.10.6  (v1.10.6 from master-1.10)] 2015-09-12 20-25-14

確かに、msecではなく0secでやり取りをしています。なので、双方のmsecが違っていても0secで一致するのでネイバーが成立するのですね。失礼しました。

 

この話題は以上で終了です

いかがでしたか?殆どのドキュメント、サイトでは以下がネイバーを張る為の必須条件だと記載されているはずです。

  • ネットワークマスク
  • 認証
  • エリアID
  • スタブフラグ
  • Hello インターバル
  • Dead インターバル

でも、実際には例外的にHelloインターバルが違っていてもネイバーを張れる訳です。

このトピックで伝えたかったメッセージは、「OSPFのDR/BDRはPreemptしない?」と同様です。

CCNPまでで学んだ内容が必ずしも正しい訳ではない。関連するRFCは要点を絞って目を通すこと。(RFCは全部熟読すると時間がいくらあっても足りません)

仮に「いやいやRFCでもHello Intervalが一致しなければいけないと明記されているよ」とか「Hello Intervalが一致しなくてもいいのはCisco Proprietaryだと正式な回答が出てるよ」とかご存知の方がいましたら、是非一報ください。

コメント

  1. ゆう より:

    横槍失礼します。
    OSPFのネイバーの確立にはHelloインターバルの一致は必須です。

    “ip ospf dead-interval minimal hello-multiplier”コマンドを使用すると、Helloインターバルの値に関係無く、OSPFのHello PacketのHelloIntervalフィールドには0が格納されます。

    なので、実際のHelloインターバルの値に関わらず、自身がHello PacketのHelloIntervalフィールドに格納した値と、対向から受信したHello PacketのHello Intervalフィールドに格納されている値が一致するので、ネイバーが確立できるのでは。

    • CCIE_TOZAI より:

      コメント・ご指摘ありがとうございます。
      パケットキャプチャで確認した結果、その通りでした。
      記事内容を修正しました。

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