OSPF では、ネイバーを見つけるために Hello パケットを送ります。ネイバーになったあとも Hello を送り続け、ネイバーが動いているかを確かめます。この記事では、Hello インターバルと Dead インターバルの既定値と変え方、短くしたときの検知の速さ、値が合わないときの動きを確かめます。
- Hello と Dead インターバルの既定値と、Dead タイマーが切れるまでの時間
- Hello を変えると Dead も4倍に変わること、Fast Hello(1秒未満の Hello)の設定
- Hello・Dead インターバルが合わないと、ネイバーがダウンすること
検証構成
R2 と R3 を 192.168.23.0/24 でつなぎ、エリア0で OSPF のネイバーにします。
既定値の確認
OSPF の基本設定
R2(config)#router ospf 1 R2(config-router)#network 192.168.23.0 0.0.0.255 area 0 R2(config-router)#network 2.2.2.2 0.0.0.0 area 0 R3(config)#router ospf 1 R3(config-router)#network 192.168.23.0 0.0.0.255 area 0 R3(config-router)#network 3.3.3.3 0.0.0.0 area 0
しばらくすると、ネイバーが FULL になります。
R2#
*Jun 16 09:55:15.227: %OSPF-5-ADJCHG: Process 1, Nbr 3.3.3.3 on FastEthernet0/0.23
from LOADING to FULL, Loading Done
Hello と Dead インターバルを確認する
show ip ospf interface は出力が多いので、Dead を含む行だけを表示します。
R2#sh ip ospf interface | include Dead Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5 R3#sh ip ospf interface | include Dead Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
Hello インターバルが10秒、Dead インターバルが40秒です。これは、ブロードキャストやポイントツーポイントのネットワークでの Cisco の既定値です。
| 表示 | 意味 |
|---|---|
| Hello 10 | Hello を送る間隔(秒) |
| Dead 40 | この時間 Hello が届かなければ、ネイバーをダウンにする(秒) |
| Wait 40 | DR/BDR の選出を始めるまで待つ時間。Dead と同じ値になる |
| Retransmit 5 | 確認応答のない LSA などを再送する間隔(秒) |
Dead タイマーで検知する時間を確かめる
R3 のインターフェースを shutdown し、R2 が Dead インターバルどおりに R3 のダウンを検知するかを見ます。
R3
R3(config)#int fa0/0.23
R3(config-subif)#shutdown
*Jun 16 10:01:02.767: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on FastEthernet0/0.23
from FULL to DOWN, Neighbor Down: Interface down or detached
R2 では、約37秒後に Dead timer expired でネイバーがダウンしました。
R2
R2#
*Jun 16 10:01:39.327: %OSPF-5-ADJCHG: Process 1, Nbr 3.3.3.3 on FastEthernet0/0.23
from FULL to DOWN, Neighbor Down: Dead timer expired
Dead タイマーは、Hello を受け取るたびに Dead インターバルの値に戻ります。そのため、ダウンを検知するまでの時間は、障害が起きた時点からではなく、最後に Hello を受け取った時点から数えて40秒です。障害が起きてから検知するまでは、30〜40秒ほどになります。
値の変更
Hello インターバルだけを変える
R2 の Hello インターバルを1秒にします。
R2
R2(config)#int fa0/0.23
R2(config-subif)#ip ospf hello-interval ?
<1-65535> Seconds
R2(config-subif)#ip ospf hello-interval 1
R2#show ip ospf interface | include Dead
Timer intervals configured, Hello 1, Dead 4, Wait 4, Retransmit 5
Hello インターバルを変えると、Dead インターバルが自動で Hello の4倍に変わります。Dead インターバルを明示して設定していないときの動きです。
Dead インターバルだけを変える
Hello インターバルを既定の10秒に戻した状態で、R2 の Dead インターバルを20秒にします。
R2
R2(config)#int fa0/0.23
R2(config-subif)#ip ospf dead-interval 20
R2#show ip ospf interface | include Dead
Timer intervals configured, Hello 10, Dead 20, Wait 20, Retransmit 5
Dead インターバルを変えても、Hello インターバルは変わりません。
検知を速くする
Dead インターバルの既定値の40秒は、障害を検知するまでの時間としては長めです。Dead インターバルを短くすると、ネイバーのダウンを早く検知でき、経路の切り替え(収束)も早くなります。
Hello インターバルを1秒にする
Hello インターバルを短くすると、Dead インターバルも短くなります。R2 と R3 の両方で Hello インターバルを1秒にします。
R2(config)#int fa0/0.23 R2(config-subif)#ip ospf hello-interval 1 R3(config)#int fa0/0.23 R3(config-subif)#ip ospf hello-interval 1
R2
R2#show ip ospf interface | include Dead
Timer intervals configured, Hello 1, Dead 4, Wait 4, Retransmit 5
R3
R3#sh ip ospf interface | include Dead
Timer intervals configured, Hello 1, Dead 4, Wait 4, Retransmit 5
R3 のインターフェースを shutdown します。
R3
R3(config)#int fa0/0.23
R3(config-subif)#shutdown
*Jun 16 12:16:51.091: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on FastEthernet0/0.23
from FULL to DOWN, Neighbor Down: Interface down or detached
約4秒後に、R2 がネイバーのダウンを検知しました。
R2
R2#
*Jun 16 12:16:55.347: %OSPF-5-ADJCHG: Process 1, Nbr 3.3.3.3 on FastEthernet0/0.23
from FULL to DOWN, Neighbor Down: Dead timer expired
Fast Hello を設定する
ip ospf dead-interval minimal hello-multiplier を使うと、Dead インターバルを1秒にし、Hello を1秒間に複数回送れます。minimal が Dead インターバルを1秒にする指定で、hello-multiplier の値が、その1秒間に送る Hello の数です。
R2
R2(config)#int fa0/0.23
R2(config-subif)#ip ospf dead-interval minimal hello-multiplier 3
R3
R3(config)#int fa0/0.23
R3(config-subif)#ip ospf dead-interval minimal hello-multiplier 3
R2
R2#show ip os interface | include Dead
Timer intervals configured, Hello 333 msec, Dead 1, Wait 1, Retransmit 5
R3
R3#show ip ospf interface | include Dead
Timer intervals configured, Hello 333 msec, Dead 1, Wait 1, Retransmit 5
Dead インターバルが1秒で、Hello を1秒間に3回送るので、Hello の間隔は 333 ミリ秒になります。
R3 のインターフェースを shutdown します。
R3
R3(config)#int fa0/0.23
R3(config-subif)#shutdown
*Jun 16 12:22:03.075: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on FastEthernet0/0.23
from FULL to DOWN, Neighbor Down: Interface down or detached
約1.6秒後に、R2 がネイバーのダウンを検知しました。
R2
R2#
*Jun 16 12:22:04.651: %OSPF-5-ADJCHG: Process 1, Nbr 3.3.3.3 on FastEthernet0/0.23
from FULL to DOWN, Neighbor Down: Dead timer expired
パケットキャプチャを見ると、R2 と R3 がそれぞれ1秒間に3回ほど Hello を送っています。
この記事の画面は、実際の画面ではなく、検証時の画面から見るポイントを抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。
Time Source Destination Protocol Info17.909721 192.168.23.3 224.0.0.5 OSPF Hello Packet118.226041 192.168.23.2 224.0.0.5 OSPF Hello Packet18.230908 192.168.23.3 224.0.0.5 OSPF Hello Packet18.516177 192.168.23.2 224.0.0.5 OSPF Hello Packet18.551997 192.168.23.3 224.0.0.5 OSPF Hello Packet18.846779 192.168.23.2 224.0.0.5 OSPF Hello Packet18.886078 192.168.23.3 224.0.0.5 OSPF Hello Packet19.176636 192.168.23.2 224.0.0.5 OSPF Hello Packet19.186952 192.168.23.3 224.0.0.5 OSPF Hello Packet19.475490 192.168.23.2 224.0.0.5 OSPF Hello Packet19.515657 192.168.23.3 224.0.0.5 OSPF Hello Packet19.786153 192.168.23.2 224.0.0.5 OSPF Hello Packet19.857249 192.168.23.3 224.0.0.5 OSPF Hello Packet20.085648 192.168.23.2 224.0.0.5 OSPF Hello Packet20.157582 192.168.23.3 224.0.0.5 OSPF Hello Packet20.410883 192.168.23.2 224.0.0.5 OSPF Hello Packet20.510265 192.168.23.3 224.0.0.5 OSPF Hello Packet20.709075 192.168.23.2 224.0.0.5 OSPF Hello Packet20.842626 192.168.23.3 224.0.0.5 OSPF Hello Packet
| No. | 表示 | 意味 |
|---|---|---|
| 1 | 192.168.23.2 の Hello の時刻(18.226、18.516、18.846…) | R2 の Hello が約0.3秒ごとに送られている。R3(192.168.23.3)も同じ間隔で送っている |
Fast Hello では、Hello パケットに入れる Hello インターバルの値は 0 になり、受け取った Hello の Hello インターバルは照合しません。そのため、hello-multiplier の値はネイバー同士で違っていてもかまいません。Dead インターバル(1秒)は、ネイバー同士でそろえます。
Hello を短くするほど、ルータの負荷は増えます。障害を早く検知したいときは、OSPF の Hello を短くする代わりに、BFD(Bidirectional Forwarding Detection)と連携させる方法もあります。使えるかどうかは、機種と OS のバージョンで確認してください。
Hello のパラメータが合わない場合
ネイバーになるには、ルータ同士で Hello インターバルと Dead インターバルが同じである必要があります。既定値(Hello 10、Dead 40)でネイバーになっている状態から、R3 の Hello インターバルだけを変えてみます。
R2
R2#show ip ospf interface | include Dead
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
R3
R3#show ip ospf interface | include Dead
Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
R3 の Hello インターバルを15秒にする
R2 で debug ip ospf hello を有効にします。
R2
R2#debug ip ospf hello OSPF hello debugging is on
R3
R3(config)#int fa0/0.23
R3(config-subif)#ip ospf hello-interval 15
R2 の debug に、Hello のパラメータが合わない(Mismatched hello parameters)と出ます。R が受け取った値、C が自分に設定されている値です。R3 は Hello を15秒にしたので、Dead も自動で4倍の60秒になっています。
OSPF-1 HELLO Fa0/0.23: Rcv hello from 3.3.3.3 area 0 192.168.23.3 OSPF-1 HELLO Fa0/0.23: Mismatched hello parameters from 192.168.23.3 OSPF-1 HELLO Fa0/0.23: Dead R 60 C 40, Hello R 15 C 10 Mask R 255.255.255.0 C 255.255.255.0 R2# OSPF-1 HELLO Fa0/0.23: Send hello to 224.0.0.5 area 0 from 192.168.23.2 R2# %OSPF-5-ADJCHG: Process 1, Nbr 3.3.3.3 on FastEthernet0/0.23 from FULL to DOWN, Neighbor Down: Dead timer expired R2#
| 表示 | 意味 |
|---|---|
| Dead R 60 C 40 | 受け取った Dead は60秒、自分は40秒 |
| Hello R 15 C 10 | 受け取った Hello は15秒、自分は10秒 |
| Mask R 255.255.255.0 C 255.255.255.0 | サブネットマスクは一致している |
パラメータが合わない Hello は捨てられるので、R2 は R3 の Hello を受け取れていない扱いになり、Dead タイマーが切れてネイバーがダウンします。
まとめ
| 設定 | Hello | Dead | コマンド |
|---|---|---|---|
| 既定値 | 10秒 | 40秒 | なし |
| Hello だけ変更 | 指定した値 | Hello の4倍 | ip ospf hello-interval |
| Dead だけ変更 | 変わらない | 指定した値 | ip ospf dead-interval |
| Fast Hello | 1秒÷hello-multiplier | 1秒 | ip ospf dead-interval minimal hello-multiplier |
Hello と Dead インターバルは、ネイバー同士でそろえます。合わないときは、debug ip ospf hello の Mismatched hello parameters で確かめられます。
コメント