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

PAK85_kaiphonedetorihikisaki20140727-thumb-1000xauto-17397

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

OSPFのネイバーを張る為にはHello/Deadタイマーは一致する必要がある?その1(問題編)
以下の記事で軽くネタバレしていますが、一般的にOSPFのHello/Deadタイマーは一致する必要があると学びます。 これは、...

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

スポンサーリンク
レクタングル大

問題のおさらい

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

回答

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

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

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

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

R8:

R10:

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

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

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

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

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

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

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 より:

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

コメントをどうぞ

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">