【OSPF】 Graceful Shutdown 動作確認 Cisco

OSPF のルータを止めるとき、OSPF のプロセスを shutdown コマンドで止めると、ネイバーに「これから止まる」ことを伝えられます。ネイバーは Dead タイマーが切れるのを待たずに止まったことを知り、すぐに経路を計算し直せるので、ネットワークの収束(コンバージェンス)が早くなります。この記事では、Cisco ルータで OSPF のグレースフルシャットダウンを実行し、そのときに送られるパケットを確かめます。

この記事でわかること
  1. router ospf の shutdown でネイバーの状態がどう変わるか
  2. シャットダウンのときに送られる2つのパケット(LS Update と Hello)
  3. no shutdown での復旧

検証構成

R1 と R2 を 192.168.12.0/24 でつなぎ、エリア0で OSPF のネイバーにしています。R1 の OSPF プロセスをシャットダウンします。

Area 0 R1R2 Lo0 1.1.1.1/32Lo0 2.2.2.2/32 .1.2 192.168.12.0/24
図1 検証構成

事前に隣接関係を確認する

R1 と R2 は FULL の隣接関係で、R2 が DR、R1 が BDR です。

R1# show ip ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
2.2.2.2           1   FULL/DR         00:00:38    192.168.12.2    FastEthernet0/0.12


R2# show ip ospf neighbor
Neighbor ID     Pri   State           Dead Time   Address         Interface
1.1.1.1           1   FULL/BDR        00:00:36    192.168.12.1    FastEthernet0/0.12

R1 の OSPF プロセスを shutdown する

R1 の router ospf で shutdown を実行すると、R1 ではすぐに R2 とのネイバーがダウンします。これ以降、R1 は Hello を送りません。

R1

R1(config)# router ospf 1 
R1(config-router)# shutdown 
R1(config-router)#
*Jul 19 03:05:58.827: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on FastEthernet0/0.12 
from FULL to DOWN, Neighbor Down: Interface down or detached

R2 の状態を確認する

R2 では、R1 の状態が FULL から INIT に変わっています。R1 からシャットダウンの知らせ(次の節の Hello)を受け取ったためです。

R2

R2# show ip ospf neighbor


Neighbor ID     Pri   State           Dead Time   Address         Interface
1.1.1.1           0   INIT/DROTHER    00:00:14    192.168.12.1    FastEthernet0/0.12

INIT になった時点で、R2 は R1 との隣接関係がなくなったものとして扱います。R1 はもう Hello を送らないので、Dead タイマー(既定 40 秒)が切れると、R1 は INIT から DOWN になります。ログの時刻を見ると、シャットダウン(03:05:58)からちょうど 40 秒後です。

R2#
*Jul 19 03:06:38.987: %OSPF-5-ADJCHG: Process 1, Nbr 1.1.1.1 on FastEthernet0/0.12 
from INIT to DOWN, Neighbor Down: Dead timer expired

シャットダウンのときに送られるパケット

shutdown を実行した直後、R1 から R2 へ2つの OSPF パケットが送られます。

R1 R2 shutdown LS Update(LS Age 3600)R2 は R1 の LSA を消す Hello(DR・BDR 0.0.0.0、Neighbor なし)R2 は FULL → INIT 以後、R1 は Hello を送らない Dead タイマー満了INIT → DOWN
図2 グレースフルシャットダウンの流れ

LS Update(LS Age 3600)

R1 は、自分が作ったルータ LSA の LS Age を最大値の 3600 秒(MaxAge)にして、LS Update で送ります。MaxAge の LSA を受け取った R2 は、その LSA を LSDB から消します。

画面イメージについて

この記事の画面は、実際の画面ではなく、検証時の画面から見るポイントを抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。

パケットキャプチャ(Wireshark):LS Update画面イメージ
▸ Internet Protocol Version 4, Src: 192.168.12.1, Dst: 224.0.0.5▾ Open Shortest Path First  ▾ OSPF Header      Version: 21      Message Type: LS Update (4)      Packet Length: 76      Source OSPF Router: 1.1.1.1      Area ID: 0.0.0.0 (Backbone)      Checksum: 0x5a30 [correct]      Auth Type: Null (0)      Auth Data (none): 0000000000000000  ▾ LS Update Packet      Number of LSAs: 1    ▾ LSA-type 1 (Router-LSA), len 482        .000 1110 0001 0000 = LS Age (seconds): 3600        0... .... .... .... = Do Not Age Flag: 0      ▸ Options: 0x22, (DC) Demand Circuits, (E) External Routing        LS Type: Router-LSA (1)        Link State ID: 1.1.1.1        Advertising Router: 1.1.1.1        Sequence Number: 0x80000003        Checksum: 0x4cd9        Length: 48      ▸ Flags: 0x00        Number of Links: 2      ▸ Type: Stub     ID: 1.1.1.1         Data: 255.255.255.255 Metric: 1      ▸ Type: Transit  ID: 192.168.12.2    Data: 192.168.12.1    Metric: 1
図3 R1 が送った LS Update(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1Message Type: LS Update (4)LSA を送るパケット(タイプ4)
2LS Age (seconds): 3600R1 のルータ LSA(Link State ID 1.1.1.1)の年齢を最大値にしたもの。受け取ったルータはこの LSA を消す

Hello(DR・BDR が 0.0.0.0、Neighbor なし)

続けて R1 は、DR と BDR を 0.0.0.0 にし、ネイバー(Active Neighbor)の一覧を空にした Hello を送ります。Router Priority も 0 になっています。R2 の show ip ospf neighbor で R1 の Pri が 0 になっていたのはこのためです。

パケットキャプチャ(Wireshark):Hello画面イメージ
▸ Internet Protocol Version 4, Src: 192.168.12.1, Dst: 224.0.0.5▾ Open Shortest Path First  ▾ OSPF Header      Version: 2      Message Type: Hello Packet (1)      Packet Length: 44      Source OSPF Router: 1.1.1.1      Area ID: 0.0.0.0 (Backbone)      Checksum: 0xea9d [correct]      Auth Type: Null (0)      Auth Data (none): 0000000000000000  ▾ OSPF Hello Packet      Network Mask: 255.255.255.0      Hello Interval [sec]: 10    ▸ Options: 0x12, (L) LLS Data block, (E) External Routing1      Router Priority: 0      Router Dead Interval [sec]: 402      Designated Router: 0.0.0.0      Backup Designated Router: 0.0.0.0  ▸ OSPF LLS Data Block
図4 R1 が送った Hello(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1Router Priority: 0DR・BDR の候補から外れる
2Designated Router: 0.0.0.0
Backup Designated Router: 0.0.0.0
DR・BDR なし。Packet Length が 44 バイトで、Active Neighbor の欄がない(ネイバーの一覧が空)

受け取った Hello のネイバー一覧に自分(R2)のルータ ID が入っていないので、R2 は R1 を2-WAY 以上の状態にしておけず、FULL から INIT に下げます。

シャットダウンからの復旧

no shutdown で戻す

R1 の router ospf で no shutdown を実行すると、隣接関係はすぐに FULL に戻ります。OSPF の設定はシャットダウン中も残っているので、設定し直す必要はありません。

R1

R1(config)# router ospf 1 
R1(config-router)# no shutdown
R1(config-router)#
*Jul 19 03:34:22.191: %OSPF-5-ADJCHG: Process 1, Nbr 2.2.2.2 on FastEthernet0/0.12 from 
LOADING to FULL, Loading Done

まとめ

タイミングR1(shutdown したルータ)R2(ネイバー)
shutdown 直後MaxAge の LS Update と、空の Hello を送るR1 の LSA を消し、R1 を INIT に下げる(すぐに経路を計算し直せる)
その後Hello を送らないDead タイマー(40 秒)が切れて DOWN
no shutdownOSPF を再開すぐに FULL に戻る

メンテナンスでルータを止めるときは、電源を切ったりインターフェースを落としたりする前に OSPF を shutdown しておくと、ほかのルータが迂回経路へ早く切り替えられます。インターフェース単位で止めたいときは、インターフェースの ip ospf shutdown も使えます。

コメント