MTUが不一致だとOSPFネイバーの状態がExstartでスタック

OSPFネイバーは、正常であれば2WayまたはFullの状態です。2Wayは単なるネイバー関係で、Fullはアジャセンシー関係でLSDBの同期が完了していることを示しています。ところが、ネイバーの状態がExstart状態でスタックしてしまうことがあります。

ネイバーがExstart状態でスタックしてしまう原因は、主にMTUの不一致です。Exstart状態とは、DDパケットを交換するにあたって、どちらから開始するかを決めている状態です。DDパケットには、Interface MTUの情報が含まれていて、Interface MTUが不一致だとネイバーの状態はExstartから先に進まなくなります。

図 MTU不一致だとExstart状態でスタックする
図 MTU不一致だとExstart状態でスタックする

OSPFのLSUパケットでLSAをアドバタイズします。アドバタイズするLSAがたくさんあると、LSUパケットのサイズが大きくなり分割されることがあります。MTUが一致していないと、分割されたLSUパケットの交換がうまくできなくなる可能性があります。そのため、ネイバー間でMTUが一致していなければいけません。

Exstart状態でスタックする例

次のネットワーク構成で、ネイバーがExstart状態でスタックする具体的な例をみてみましょう。

R1の設定

R1のOSPFに関連する設定は以下の通りです。R1のFa0/0のMTUを1400バイトに変更しています。

R1

interface Loopback0
 ip address 192.168.1.1 255.255.255.0
 ip ospf network point-to-point
!
interface FastEthernet0/0
 ip address 192.168.12.1 255.255.255.0
 ip mtu 1400
!
router ospf 1
 router-id 1.1.1.1
 log-adjacency-changes
 network 192.168.0.0 0.0.255.255 area 0

R2の設定

R2のOSPFに関連する設定は以下の通りです。R2 Fa0/0のMTUサイズはデフォルトのままです。

R2

interface Loopback0
 ip address 192.168.2.2 255.255.255.0
 ip ospf network point-to-point
!
interface FastEthernet0/0
 ip address 192.168.12.2 255.255.255.0
!
router ospf 1
 router-id 2.2.2.2
 log-adjacency-changes
 network 192.168.0.0 0.0.255.255 area 0

ネイバーの状態

R1とR2のMTUが不一致のとき、show ip ospf neighborコマンドでネイバーの状態を確認します。

R1

R1#show ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
2.2.2.2           1   EXSTART/DR      00:00:37    192.168.12.2    FastEthernet0/0

R2

R2#show ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
1.1.1.1           1   EXSTART/BDR     00:00:37    192.168.12.1    FastEthernet0/0

ネイバーの状態はExstart状態にとどまり、LSDBの同期の処理が先に進まないことがわかります。また、debug ip ospf adjコマンドでMTUが不一致であることがよくわかります。

R1

R1#debug ip ospf adj
OSPF adjacency events debugging is on
R1#
*Mar  1 14:13:52.556: OSPF: Send DBD to 2.2.2.2 on FastEthernet0/0 seq 0x1141 opt 0x52 flag 0x7 len 32
*Mar  1 14:13:52.560: OSPF: Retransmitting DBD to 2.2.2.2 on FastEthernet0/0 [22]
*Mar  1 14:13:53.304: OSPF: Rcv DBD from 2.2.2.2 on FastEthernet0/0 seq 0x520 opt 0x52 flag 0x7 len 32  mtu 1500 state EXSTART
*Mar  1 14:13:53.304: OSPF: Nbr 2.2.2.2 has larger interface MTU
R1#u all
All possible debugging has been turned off

ip ospf mtu-ignoreコマンド

Exstart状態でスタックしないようにするためには、ネイバー間でMTUが同じになるようにすることが基本です。デフォルトでは、ネイバーのMTUは一致するはずです。MTUを変更するときには、ネイバー同士できちんと同じMTUになるようにしてください。

また、Exstart状態でスタックしないようにするために、MTUの不一致を無視するように設定することもできます。そのためのコマンドは、以下の通りです。

MTU不一致を無視する(config)#interface <interface-name>
(config-if)#ip ospf mtu-ignore

<interface-name> : インタフェース名

ip ospf mtu-ignoreコマンドは、MTUが小さい方で設定すればOKです。MTUが不一致でもExstart状態から先にすすめるようになります。ただし、大きなサイズのLSUパケットになってしまう場合、正しくLSUパケットを交換できない可能性があります。

先ほど、例に挙げたR1のFa0/0でip ospf mtu-ignoreコマンドを設定すると、ネイバーの状態はFullになりLSDBの同期を確保することができます。

R1

interface FastEthernet0/0
 ip ospf mtu-ignore

図 ip ospf mtu-ignoreコマンド
図 ip ospf mtu-ignoreコマンド

R1

R1#show ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
2.2.2.2           1   FULL/DR         00:00:39    192.168.12.2    FastEthernet0/0

まとめ

ポイント

  • ネイバー間でMTUが一致していないと、Exstart状態でスタックします。
  • MTU不一致を無視するには、インタフェースコンフィグレーションモードで次のコマンドを入力します。
    • (config-if)#ip ospf mtu-ignore

OSPFの仕組み