メインコンテンツへスキップ
  1. ネットワーク 記事一覧/
  2. OSPF記事一覧/

OSPF ネットワークタイプ

目次

OSPFのネットワークタイプとは

OSPFは、インタフェースが接続されているリンクの性質に応じて動作を変えます。この性質の分類がネットワークタイプです。イーサネットのように1つのセグメントに何台でも接続でき、マルチキャストがそのまま届くリンクと、2台しかつながらない専用線、マルチキャストが届かないフレームリレー網とでは、ネイバーの見つけ方も、DR/BDRを選ぶべきかどうかも変わるためです。

ネットワークタイプによって、次の4点が変わります。

変わるもの説明
Hello / DeadインターバルHelloを送る間隔と、Helloが届かなくなってからネイバーをダウンとみなすまでの時間
DR/BDRの選出1つのセグメントに3台以上が載りうるタイプでは、隣接関係の数を減らすためにDR/BDRを選出する(DRとBDR
ネイバーの発見方法マルチキャスト(224.0.0.5)で自動的に発見するか、neighborコマンドで手動指定するか
LSDB上の表現DR/BDRを選出するタイプではNetwork-LSA(Type 2)が生成され、Router-LSAのリンクはTransitになる。選出しないタイプではNetwork-LSAは作られず、リンクはPoint-to-Pointとして広告される

Hello / Deadインターバルはネイバーとの間で一致していなければなりません。 一致しないHelloは破棄されるため、リンクの両端でネットワークタイプが違うと、それだけで隣接関係を確立できないことがあります。

ネットワークタイプの一覧

RFC 2328は4種類のネットワークタイプを定義しています(Section 1.2)。これにCiscoの実装が独自のタイプを1つ加えています。

タイプHello / DeadDR/BDRネイバーの発見Network-LSA主な用途
ブロードキャスト10 / 40秒選出する自動(224.0.0.5)ありイーサネット(既定)
ポイントツーポイント10 / 40秒選出しない自動(224.0.0.5)なし2台だけがつながるリンク
ノンブロードキャスト(NBMA)30 / 120秒選出する手動(neighborありフレームリレー、ATMのフルメッシュ
ポイントツーマルチポイント30 / 120秒選出しない自動(224.0.0.5)なし部分メッシュ網
ポイントツーマルチポイント ノンブロードキャスト30 / 120秒選出しない手動(neighborなしマルチキャストが使えない部分メッシュ網(RFCの4種類には無い、Ciscoの拡張)

このほか、show ospf interfaceにはループバックインタフェースを表すLOOPBACKが現れます。これはHelloを送るリンクではなく、ホストルート(/32のスタブネットワーク)としてRouter-LSAに載るだけの扱いです。

実機での検証

Cisco IOS XR(XRd 26.1.1)のルータ3台を直線に接続し、すべてのリンクをエリア0に所属させた構成で、R1–R2間のイーサネットリンクのネットワークタイプだけを切り替えて挙動を比べます。R2–R3間は既定のブロードキャストのまま残してあるので、同じR2の上で2つのタイプを同時に観測できます。

IOS XRでは、ネットワークタイプはrouter ospf配下のインタフェースにnetworkコマンドで設定します。既定はイーサネットならブロードキャストです。

検証は次の8段階(STEP 0〜7)で進めます。各STEPで3台すべてから取得したshow出力・syslog・running-configは、記事末尾の検証Configおよびshow結果にまとめました。

STEP操作R1–R2間の結果
0初期状態(既定)BROADCAST、Hello 10/Dead 40、DR/BDRあり
1両側にnetwork point-to-pointPOINT_TO_POINT、DR/BDRなし、Network-LSAが消える
2R1側だけ既定に戻す(タイプ不一致隣接が確立できず、OSPF経路が全滅
3両側を既定に戻す復旧
4両側にnetwork non-broadcastNON_BROADCAST、Hello 30/Dead 120、ネイバーを発見できない
5neighborでネイバーを手動指定隣接が確立。Helloがユニキャストになる
6両側にnetwork point-to-multipointPOINT_TO_MULTIPOINT、Hello 30/Dead 120、DRなし、neighbor不要
7networkの設定を削除(最終状態)初期状態に復旧

既定はブロードキャスト(STEP 0)

show ospf interfaceにネットワークタイプ、DR/BDR、タイマーがまとめて表示されます。この記事ではこのコマンドを主軸に確認していきます。

STEP 0 R1 既定(ブロードキャスト)
GigabitEthernet0/0/0/0 is up, line protocol is up 
  Internet Address 10.1.2.1/24, Area 0, SID 0, Strict-SPF SID 0
  Label stack Primary label 0 Backup label 0 SRTE label 0
  Process ID 1, Router ID 1.1.1.1, Network Type BROADCAST, Cost: 1
  Transmit Delay is 1 sec, State BDR, Priority 1, MTU 1500, MaxPktSz 1500
  Forward reference No, Unnumbered no,  Bandwidth 1000000 
  RIB LC sync Yes
  Designated Router (ID) 2.2.2.2, Interface address 10.1.2.2
  Backup Designated router (ID) 1.1.1.1, Interface address 10.1.2.1
  Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
    Hello due in 00:00:08:985

Network Type BROADCASTで、DRはR2(2.2.2.2)、BDRはR1自身、Hello 10, Dead 40です。LSDBにはこのセグメントのNetwork-LSA(Link ID 10.1.2.2)があります。

STEP 0 R1 LSDB
RP/0/RP0/CPU0:R1#show ospf database
Sun Sep  6 05:02:42.895 UTC


            OSPF Router with ID (1.1.1.1) (Process ID 1)

		Router Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum Link count
1.1.1.1         1.1.1.1         42          0x80000003 0x00b343 2
2.2.2.2         2.2.2.2         36          0x80000003 0x00ded7 3
3.3.3.3         3.3.3.3         36          0x80000003 0x0004d3 2

		Net Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum
10.1.2.2        2.2.2.2         43          0x80000001 0x0031e5
10.2.3.3        3.3.3.3         37          0x80000001 0x0046c1

ポイントツーポイントに変更する(STEP 1)

R1・R2の両側にnetwork point-to-pointを設定します。

STEP 1 R1・R2に投入した設定
router ospf 1
 area 0
  interface GigabitEthernet0/0/0/0
   network point-to-point
  !
 !
!
STEP 1 R1 ポイントツーポイント
GigabitEthernet0/0/0/0 is up, line protocol is up 
  Internet Address 10.1.2.1/24, Area 0, SID 0, Strict-SPF SID 0
  Label stack Primary label 0 Backup label 0 SRTE label 0
  Process ID 1, Router ID 1.1.1.1, Network Type POINT_TO_POINT, Cost: 1
  Transmit Delay is 1 sec, State POINT_TO_POINT, MTU 1500, MaxPktSz 1500
  Forward reference No, Unnumbered no,  Bandwidth 1000000 
  RIB LC sync Yes
  Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
    Hello due in 00:00:06:819
  Index 1/1, flood queue length 0

DRとBDRの行そのものが無くなり、StatePOINT_TO_POINTになりました。Hello/Deadは10/40のままです。show ospf neighborでも、状態の/以降の役割が-になります。

STEP 1 R1 ネイバー
RP/0/RP0/CPU0:R1#show ospf neighbor
Sun Sep  6 05:06:30.673 UTC

* Indicates MADJ interface
# Indicates Neighbor awaiting BFD session up

Neighbors for OSPF 1

Neighbor ID     Pri   State           Dead Time   Address         Interface
2.2.2.2         1     FULL/  -        00:00:35    10.1.2.2        GigabitEthernet0/0/0/0
    Neighbor is up for 00:01:30

Total neighbor count: 1

LSDBからは、このセグメントのNetwork-LSA(10.1.2.2)が消えました。残っているのはR2–R3間の10.2.3.3だけです。かわりにR1のRouter-LSAはリンク数が2から3に増えています。

STEP 1 R1 LSDB(Network-LSAが1つ減る)
RP/0/RP0/CPU0:R1#show ospf database
Sun Sep  6 05:06:32.582 UTC


            OSPF Router with ID (1.1.1.1) (Process ID 1)

		Router Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum Link count
1.1.1.1         1.1.1.1         92          0x80000005 0x006777 3
2.2.2.2         2.2.2.2         93          0x80000005 0x000a98 4
3.3.3.3         3.3.3.3         263         0x80000003 0x0004d3 2

		Net Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum
10.2.3.3        3.3.3.3         264         0x80000001 0x0046c1

増えた1つは、ポイントツーポイントのリンクが「対向ルータへのリンク」と「そのセグメントのスタブネットワーク」の2つに分けて広告されるためです。DRがいないのでNetwork-LSAは作られず、セグメント自体はスタブとして表現されます。

STEP 1 R1 Router-LSA
RP/0/RP0/CPU0:R1#show ospf database router
Sun Sep  6 05:06:33.580 UTC


            OSPF Router with ID (1.1.1.1) (Process ID 1)

		Router Link States (Area 0)

  LS age: 93
  Options: (No TOS-capability, DC)
  LS Type: Router Links
  Link State ID: 1.1.1.1
  Advertising Router: 1.1.1.1
  LS Seq Number: 80000005
  Checksum: 0x6777
  Length: 60
   Number of Links: 3

    Link connected to: a Stub Network
     (Link ID) Network/subnet number: 1.1.1.1
     (Link Data) Network Mask: 255.255.255.255
      Number of TOS metrics: 0
       TOS 0 Metrics: 1

    Link connected to: another Router (point-to-point)
     (Link ID) Neighboring Router ID: 2.2.2.2
     (Link Data) Router Interface address: 10.1.2.1
      Number of TOS metrics: 0
       TOS 0 Metrics: 1

パケットの上でも違いが分かります。切り替え前後のHelloを1本のキャプチャで並べると、DR/BDRフィールドが実アドレスから0.0.0.0に変わっています。

No.TimeSourceDestinationInfo
10.00010.1.2.2224.0.0.5Hello Packet
22.55810.1.2.1224.0.0.5Hello Packet
39.48410.1.2.2224.0.0.5Hello Packet
411.87910.1.2.1224.0.0.5Hello Packet
516.01110.1.2.1224.0.0.5Hello Packet
619.47510.1.2.2224.0.0.5Hello Packet
725.62310.1.2.1224.0.0.5Hello Packet
1036.18110.1.2.2224.0.0.5Hello Packet
1145.23110.1.2.1224.0.0.5Hello Packet
1245.26110.1.2.210.1.2.1DB Description

No.4までがブロードキャストのHello、No.5からがポイントツーポイントのHelloです。R2側の切り替えが遅れているため、No.6・No.8ではまだDRが入ったHelloが流れています。両側が0.0.0.0になった後、No.12からDBDの交換が始まって隣接が張り直されます。

No.4 Hello(ブロードキャスト、切り替え前)
Open Shortest Path First
    OSPF Header
        Version: 2
        Message Type: Hello Packet (1)
        Packet Length: 48
        Source OSPF Router: 1.1.1.1
        Area ID: 0.0.0.0 (Backbone)
        Checksum: 0xce8f [correct]
        Instance ID: Base IPv4 Unicast Instance (0)
        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 Routing
            0... .... = DN: Not set
            .0.. .... = (O) Opaque: Not set
            ..0. .... = (DC) Demand Circuits: Not supported
            ...1 .... = (L) LLS Data block: Present
            .... 0... = (N) NSSA: Not supported
            .... .0.. = (MC) Multicast: Not capable
            .... ..1. = (E) External Routing: Capable
            .... ...0 = (MT) Multi-Topology Routing: No
        Router Priority: 1
        Router Dead Interval [sec]: 40
        Designated Router: 10.1.2.2
        Backup Designated Router: 10.1.2.1
        Active Neighbor: 2.2.2.2
    OSPF LLS Data Block
        Checksum: 0x7fc4
        LLS Data Length: 32 bytes
        Extended options TLV
            TLV Type: 1
            TLV Length: 4
            Options: 0x00000001, (LR) LSDB Resynchronization
                .... .... .... .... .... .... .... ..0. = (RS) Restart Signal: Not set
                .... .... .... .... .... .... .... ...1 = (LR) LSDB Resynchronization: Set
        Local Interface ID
            TLV Type: 18
            TLV Length: 4
            Local Interface ID: 00000003
        Unknown LLS TLV
            TLV Type: 32768
            TLV Length: 8
上のtshark出力のパケット(No.4 Hello)のpcapをダウンロード
No.5 Hello(ポイントツーポイント、切り替え後)
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: 0xea9c [correct]
        Instance ID: Base IPv4 Unicast Instance (0)
        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 Routing
            0... .... = DN: Not set
            .0.. .... = (O) Opaque: Not set
            ..0. .... = (DC) Demand Circuits: Not supported
            ...1 .... = (L) LLS Data block: Present
            .... 0... = (N) NSSA: Not supported
            .... .0.. = (MC) Multicast: Not capable
            .... ..1. = (E) External Routing: Capable
            .... ...0 = (MT) Multi-Topology Routing: No
        Router Priority: 1
        Router Dead Interval [sec]: 40
        Designated Router: 0.0.0.0
        Backup Designated Router: 0.0.0.0
    OSPF LLS Data Block
        Checksum: 0x7fc4
        LLS Data Length: 32 bytes
        Extended options TLV
            TLV Type: 1
            TLV Length: 4
            Options: 0x00000001, (LR) LSDB Resynchronization
                .... .... .... .... .... .... .... ..0. = (RS) Restart Signal: Not set
                .... .... .... .... .... .... .... ...1 = (LR) LSDB Resynchronization: Set
        Local Interface ID
            TLV Type: 18
            TLV Length: 4
            Local Interface ID: 00000003
        Unknown LLS TLV
            TLV Type: 32768
            TLV Length: 8
上のtshark出力のパケット(No.5 Hello)のpcapをダウンロード

ネットワークタイプが一致しないと隣接できない(STEP 2・3)

R1側だけを既定(ブロードキャスト)に戻し、R2をポイントツーポイントのままにします。Hello/Deadはどちらも10/40で一致しているため、タイマー不一致では説明できない状況です。

R1側は自分だけでDRになり、ネイバーはINITから先に進みません。

STEP 2 R1 ブロードキャスト側
GigabitEthernet0/0/0/0 is up, line protocol is up 
  Internet Address 10.1.2.1/24, Area 0, SID 0, Strict-SPF SID 0
  Label stack Primary label 0 Backup label 0 SRTE label 0
  Process ID 1, Router ID 1.1.1.1, Network Type BROADCAST, Cost: 1
  Transmit Delay is 1 sec, State DR, Priority 1, MTU 1500, MaxPktSz 1500
  Forward reference No, Unnumbered no,  Bandwidth 1000000 
  RIB LC sync Yes
  Designated Router (ID) 1.1.1.1, Interface address 10.1.2.1
  No backup designated router on this network
  Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
    Hello due in 00:00:08:082
  Index 1/1, flood queue length 0
  Next 0(0)/0(0)
STEP 2 R1 ネイバー
RP/0/RP0/CPU0:R1#show ospf neighbor
Sun Sep  6 05:10:54.370 UTC

* Indicates MADJ interface
# Indicates Neighbor awaiting BFD session up

Neighbors for OSPF 1

Neighbor ID     Pri   State           Dead Time   Address         Interface
2.2.2.2         1     INIT/DROTHER    00:00:37    10.1.2.2        GigabitEthernet0/0/0/0

Total neighbor count: 1

R2側はそもそもネイバーとして数えていません。

STEP 2 R2 ポイントツーポイント側
GigabitEthernet0/0/0/0 is up, line protocol is up 
  Internet Address 10.1.2.2/24, Area 0, SID 0, Strict-SPF SID 0
  Label stack Primary label 0 Backup label 0 SRTE label 0
  Process ID 1, Router ID 2.2.2.2, Network Type POINT_TO_POINT, Cost: 1
  Transmit Delay is 1 sec, State POINT_TO_POINT, MTU 1500, MaxPktSz 1500
  Forward reference No, Unnumbered no,  Bandwidth 1000000 
  RIB LC sync Yes
  Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
    Hello due in 00:00:09:320
  Index 1/1, flood queue length 0
  Next 0(0)/0(0)
  Last flood scan length is 1, maximum is 2
  Last flood scan time is 0 msec, maximum is 0 msec
  LS Ack List: current length 0, high water mark 2
  Neighbor Count is 0, Adjacent neighbor count is 0

理由はshow ospf trace helloに残っています。IOS XRはHelloの処理をトレースバッファに記録しているので、debugを仕掛けていなくても後から読み出せます。

STEP 2 R2 Helloが破棄される理由(show ospf trace hello の抜粋)
405  Sep  6 05:11:29.430  ospf_rcv_hello: intf Gi0/0/0/0 area 0.0.0.0 from 1.1.1.1 10.1.2.1
406  Sep  6 05:11:29.430  ospf_validate_hello: non-zero DR 10.1.2.1 on non-multiaccess interface, ignoring hello
407  Sep  6 05:11:29.430  ospf_rcv_hello: WARN hello validation failed, ospf_rtr_id 1.1.1.1

ポイントツーポイントのインタフェースは、DRフィールドが0以外のHelloを破棄します。 ブロードキャスト側は自分がDRになったのでDRフィールドに自分のアドレスを入れて送り、それがポイントツーポイント側で捨てられる、という噛み合わせです。

その結果、R1のOSPF経路は1つも残りません。

STEP 2 R1 経路
RP/0/RP0/CPU0:R1#show route ospf
Sun Sep  6 05:10:51.396 UTC

% No matching routes found

STEP 3で両側を既定に戻すと、隣接も経路も元どおりになります。ネットワークタイプはリンクの両端で必ず揃える必要があります。

STEP 3 R1 復旧後
RP/0/RP0/CPU0:R1#show route ospf
Sun Sep  6 05:13:59.016 UTC

O    2.2.2.2/32 [110/2] via 10.1.2.2, 00:01:22, GigabitEthernet0/0/0/0
O    3.3.3.3/32 [110/3] via 10.1.2.2, 00:01:22, GigabitEthernet0/0/0/0
O    10.2.3.0/24 [110/2] via 10.1.2.2, 00:01:22, GigabitEthernet0/0/0/0

ノンブロードキャスト(NBMA)に変更する(STEP 4・5)

両側にnetwork non-broadcastを設定します。

STEP 4 R1・R2に投入した設定
router ospf 1
 area 0
  interface GigabitEthernet0/0/0/0
   network non-broadcast
  !
 !
!
STEP 4 R1 ノンブロードキャスト(neighbor未設定)
GigabitEthernet0/0/0/0 is up, line protocol is up 
  Internet Address 10.1.2.1/24, Area 0, SID 0, Strict-SPF SID 0
  Label stack Primary label 0 Backup label 0 SRTE label 0
  Process ID 1, Router ID 1.1.1.1, Network Type NON_BROADCAST, Cost: 1
  Transmit Delay is 1 sec, State DR, Priority 1, MTU 1500, MaxPktSz 1500
  Forward reference No, Unnumbered no,  Bandwidth 1000000 
  RIB LC sync Yes
  Designated Router (ID) 1.1.1.1, Interface address 10.1.2.1
  No backup designated router on this network
  Timer intervals configured, Hello 30, Dead 120, Wait 120, Retransmit 5
    Hello due in 00:00:06:525
  Index 1/1, flood queue length 0
  Next 0(0)/0(0)
  Last flood scan length is 1, maximum is 1
  Last flood scan time is 0 msec, maximum is 0 msec
  LS Ack List: current length 0, high water mark 3
  Neighbor Count is 0, Adjacent neighbor count is 0

Hello 30, Dead 120, Wait 120とタイマーが変わり、DR/BDRの選出はある(R1が自分だけでDRになっている)ものの、ネイバーが1台も見つかりません。ノンブロードキャストはマルチキャストでネイバーを探さないためです。

キャプチャを見ると、この間リンク上にOSPFパケットが1つも流れていないことが分かります。ユニキャストで送る相手が設定されていないので、Helloすら送信されません。

No.TimeSourceDestinationInfo
10.00010.1.2.1224.0.0.5Hello Packet
22.21410.1.2.2224.0.0.5Hello Packet
39.82810.1.2.1224.0.0.5Hello Packet
412.06010.1.2.2224.0.0.5Hello Packet
521.54310.1.2.2224.0.0.5Hello Packet
6329.59410.1.2.110.1.2.2Hello Packet
7341.45510.1.2.210.1.2.1Hello Packet
8341.46010.1.2.110.1.2.2DB Description
23358.81410.1.2.110.1.2.2Hello Packet
24370.47310.1.2.210.1.2.1Hello Packet

No.5(21.5秒)からNo.6(329.6秒)まで約5分間、パケットがまったくありません。No.6がneighborを設定した直後の最初のHelloで、宛先が224.0.0.5ではなく相手のインタフェースアドレス10.1.2.2になっています。

STEP 5 R1・R2に投入した設定
router ospf 1
 area 0
  interface GigabitEthernet0/0/0/0
   neighbor 10.1.2.2     ! R2側は neighbor 10.1.2.1
  !
 !
!
No.6 Hello(ノンブロードキャスト、ユニキャスト送信)
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: 0xde36 [correct]
        Instance ID: Base IPv4 Unicast Instance (0)
        Auth Type: Null (0)
        Auth Data (none): 0000000000000000
    OSPF Hello Packet
        Network Mask: 255.255.255.0
        Hello Interval [sec]: 30
        Options: 0x12, (L) LLS Data block, (E) External Routing
            0... .... = DN: Not set
            .0.. .... = (O) Opaque: Not set
            ..0. .... = (DC) Demand Circuits: Not supported
            ...1 .... = (L) LLS Data block: Present
            .... 0... = (N) NSSA: Not supported
            .... .0.. = (MC) Multicast: Not capable
            .... ..1. = (E) External Routing: Capable
            .... ...0 = (MT) Multi-Topology Routing: No
        Router Priority: 1
        Router Dead Interval [sec]: 120
        Designated Router: 10.1.2.1
        Backup Designated Router: 0.0.0.0
    OSPF LLS Data Block
        Checksum: 0x7fc4
        LLS Data Length: 32 bytes
        Extended options TLV
            TLV Type: 1
            TLV Length: 4
            Options: 0x00000001, (LR) LSDB Resynchronization
                .... .... .... .... .... .... .... ..0. = (RS) Restart Signal: Not set
                .... .... .... .... .... .... .... ...1 = (LR) LSDB Resynchronization: Set
        Local Interface ID
            TLV Type: 18
            TLV Length: 4
            Local Interface ID: 00000003
        Unknown LLS TLV
            TLV Type: 32768
            TLV Length: 8
上のtshark出力のパケット(No.6 Hello)のpcapをダウンロード

neighborを入れた後は隣接が確立し、DR/BDRも選出されます。

STEP 5 R1 ネイバー手動指定後
GigabitEthernet0/0/0/0 is up, line protocol is up 
  Internet Address 10.1.2.1/24, Area 0, SID 0, Strict-SPF SID 0
  Label stack Primary label 0 Backup label 0 SRTE label 0
  Process ID 1, Router ID 1.1.1.1, Network Type NON_BROADCAST, Cost: 1
  Transmit Delay is 1 sec, State BDR, Priority 1, MTU 1500, MaxPktSz 1500
  Forward reference No, Unnumbered no,  Bandwidth 1000000 
  RIB LC sync Yes
  Designated Router (ID) 2.2.2.2, Interface address 10.1.2.2
  Backup Designated router (ID) 1.1.1.1, Interface address 10.1.2.1
  Timer intervals configured, Hello 30, Dead 120, Wait 120, Retransmit 5
    Hello due in 00:00:21:917
  Index 1/1, flood queue length 0
  Next 0(0)/0(0)
  Last flood scan length is 1, maximum is 1
  Last flood scan time is 0 msec, maximum is 0 msec
  LS Ack List: current length 0, high water mark 3
  Neighbor Count is 1, Adjacent neighbor count is 1

ポイントツーマルチポイントに変更する(STEP 6)

neighborを削除し、両側にnetwork point-to-multipointを設定します。

STEP 6 R1・R2に投入した設定
router ospf 1
 area 0
  interface GigabitEthernet0/0/0/0
   no neighbor 10.1.2.2  ! R2側は no neighbor 10.1.2.1
   network point-to-multipoint
  !
 !
!
STEP 6 R1 ポイントツーマルチポイント
GigabitEthernet0/0/0/0 is up, line protocol is up 
  Internet Address 10.1.2.1/24, Area 0, SID 0, Strict-SPF SID 0
  Label stack Primary label 0 Backup label 0 SRTE label 0
  Process ID 1, Router ID 1.1.1.1, Network Type POINT_TO_MULTIPOINT, Cost: 1
  Transmit Delay is 1 sec, State POINT_TO_MULTIPOINT, MTU 1500, MaxPktSz 1500
  Forward reference No, Unnumbered no,  Bandwidth 1000000 
  RIB LC sync Yes
  Timer intervals configured, Hello 30, Dead 120, Wait 120, Retransmit 5
    Hello due in 00:00:02:902
  Index 1/1, flood queue length 0

タイマーはノンブロードキャストと同じ30/120秒ですが、DR/BDRは選出せず、neighborの設定なしで隣接が確立しました。Helloはマルチキャスト(224.0.0.5)で送られています。

No.4 Hello(ポイントツーマルチポイント)
Open Shortest Path First
    OSPF Header
        Version: 2
        Message Type: Hello Packet (1)
        Packet Length: 48
        Source OSPF Router: 1.1.1.1
        Area ID: 0.0.0.0 (Backbone)
        Checksum: 0xe630 [correct]
        Instance ID: Base IPv4 Unicast Instance (0)
        Auth Type: Null (0)
        Auth Data (none): 0000000000000000
    OSPF Hello Packet
        Network Mask: 255.255.255.0
        Hello Interval [sec]: 30
        Options: 0x12, (L) LLS Data block, (E) External Routing
            0... .... = DN: Not set
            .0.. .... = (O) Opaque: Not set
            ..0. .... = (DC) Demand Circuits: Not supported
            ...1 .... = (L) LLS Data block: Present
            .... 0... = (N) NSSA: Not supported
            .... .0.. = (MC) Multicast: Not capable
            .... ..1. = (E) External Routing: Capable
            .... ...0 = (MT) Multi-Topology Routing: No
        Router Priority: 1
        Router Dead Interval [sec]: 120
        Designated Router: 0.0.0.0
        Backup Designated Router: 0.0.0.0
        Active Neighbor: 2.2.2.2
    OSPF LLS Data Block
        Checksum: 0x7fc4
        LLS Data Length: 32 bytes
        Extended options TLV
            TLV Type: 1
            TLV Length: 4
            Options: 0x00000001, (LR) LSDB Resynchronization
                .... .... .... .... .... .... .... ..0. = (RS) Restart Signal: Not set
                .... .... .... .... .... .... .... ...1 = (LR) LSDB Resynchronization: Set
        Local Interface ID
            TLV Type: 18
            TLV Length: 4
            Local Interface ID: 00000003
        Unknown LLS TLV
            TLV Type: 32768
            TLV Length: 8
上のtshark出力のパケット(No.4 Hello)のpcapをダウンロード

このタイプに特有なのは、セグメントがサブネットではなく対向ごとの/32ホストルートとして広告されることです。R1のルーティングテーブルには、他のタイプでは現れない10.1.2.2/32が載っています。

STEP 6 R1 経路(/32のホストルートが増える)
RP/0/RP0/CPU0:R1#show route ospf
Sun Sep  6 05:30:31.183 UTC

O    2.2.2.2/32 [110/2] via 10.1.2.2, 00:03:17, GigabitEthernet0/0/0/0
O    3.3.3.3/32 [110/3] via 10.1.2.2, 00:03:17, GigabitEthernet0/0/0/0
O    10.1.2.2/32 [110/1] via 10.1.2.2, 00:03:17, GigabitEthernet0/0/0/0
O    10.2.3.0/24 [110/2] via 10.1.2.2, 00:03:17, GigabitEthernet0/0/0/0

Router-LSAを見ると、対向へのポイントツーポイントリンクに加えて、自分のインタフェースアドレス10.1.2.1/32がメトリック0のスタブとして広告されています。部分メッシュ網では「どの2台が直接届くか」がペアごとに違うため、サブネット単位ではなくペア単位で広告する、という考え方です。

STEP 6 R1 Router-LSA
RP/0/RP0/CPU0:R1#show ospf database router
Sun Sep  6 05:30:36.515 UTC


            OSPF Router with ID (1.1.1.1) (Process ID 1)

		Router Link States (Area 0)

  LS age: 203
  Options: (No TOS-capability, DC)
  LS Type: Router Links
  Link State ID: 1.1.1.1
  Advertising Router: 1.1.1.1
  LS Seq Number: 8000000e
  Checksum: 0x4d88
  Length: 60
   Number of Links: 3

    Link connected to: a Stub Network
     (Link ID) Network/subnet number: 1.1.1.1
     (Link Data) Network Mask: 255.255.255.255
      Number of TOS metrics: 0
       TOS 0 Metrics: 1

    Link connected to: another Router (point-to-point)
     (Link ID) Neighboring Router ID: 2.2.2.2
     (Link Data) Router Interface address: 10.1.2.1
      Number of TOS metrics: 0
       TOS 0 Metrics: 1

    Link connected to: a Stub Network
     (Link ID) Network/subnet number: 10.1.2.1
     (Link Data) Network Mask: 255.255.255.255
      Number of TOS metrics: 0
       TOS 0 Metrics: 0

既定へ戻す(STEP 7)

networkの設定を削除すると、イーサネットの既定であるブロードキャストに戻ります。

STEP 7 R1 既定に復旧
GigabitEthernet0/0/0/0 is up, line protocol is up 
  Internet Address 10.1.2.1/24, Area 0, SID 0, Strict-SPF SID 0
  Label stack Primary label 0 Backup label 0 SRTE label 0
  Process ID 1, Router ID 1.1.1.1, Network Type BROADCAST, Cost: 1
  Transmit Delay is 1 sec, State BDR, Priority 1, MTU 1500, MaxPktSz 1500
  Forward reference No, Unnumbered no,  Bandwidth 1000000 
  RIB LC sync Yes
  Designated Router (ID) 2.2.2.2, Interface address 10.1.2.2
  Backup Designated router (ID) 1.1.1.1, Interface address 10.1.2.1
  Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
    Hello due in 00:00:03:925
IOS XRはnetwork point-to-multipoint non-broadcastも受け付けます。ただしshow ospf interfaceの表示は通常のポイントツーマルチポイントと同じPOINT_TO_MULTIPOINTで、区別が付きません。どちらで動いているかはrunning-configで確認する必要があります(検証時の出力は記事末尾「検証Configおよびshow結果」のSTEP 7「追加取得」に置いてあります)。

Helloパケットの比較

4つのタイプで実際に流れたHelloを並べると、違いは宛先アドレス・Hello/Deadインターバル・DR/BDRフィールドの3点に集約されます。

タイプ宛先Hello / DeadDRフィールドキャプチャ
ブロードキャスト224.0.0.510 / 4010.1.2.2(DRのアドレス)ospf-network-type-p2p.pcap No.4
ポイントツーポイント224.0.0.510 / 400.0.0.0ospf-network-type-p2p.pcap No.5
ノンブロードキャスト10.1.2.2(ユニキャスト)30 / 12010.1.2.1(DRのアドレス)ospf-network-type-nbma.pcap No.6
ポイントツーマルチポイント224.0.0.530 / 1200.0.0.0ospf-network-type-p2mp.pcap No.4

設計上の使い分け

  • イーサネットで2台しかつながらないリンクは、ポイントツーポイントにすると無駄が減ります。 DR/BDRの選出(Waitタイマー40秒)が不要になるので隣接の確立が速くなり、Network-LSAが1つ減ってLSDBも小さくなります。STEP 1で確認したとおり、経路の内容は変わりません。
  • リンクの両端でタイプを必ず揃えます。 STEP 2のとおり、Hello/Deadが一致していてもタイプが違うだけで隣接が確立できず、しかもshow ospf neighborには相手がINITで残るため、原因が分かりにくい形の障害になります。
  • ノンブロードキャストはneighborの設定漏れがそのまま停止につながります。 設定するまでHelloすら流れないため、片側だけ設定した状態にも注意が必要です。
  • ブロードキャストとノンブロードキャストはDR/BDRを選出します。多数のルータが載るセグメントでの選出の詳細はDRとBDRで解説しています。

検証Configおよびshow結果

各STEPで3台すべてから、次の3種類をルータごとに分けて取得しています。検証Configはこの..._run.txtです(最終状態はSTEP 7のもの)。

ファイル内容
..._show.txtshow version / show interface description / show route / show route ospf / show ospf / show ospf interface / show ospf interface brief / show ospf neighbor / show ospf neighbor detail / show ospf database / show ospf database router / show ospf database network / show ospf statistics interface / show ospf routes / show ospf trace events / show ospf trace adj / show ospf trace hello
..._log.txtそのSTEPの範囲だけに絞ったshow logging。各STEPの開始時にlogmsgでマーカーを入れ、その時刻をshow logging startに指定して取得したもの(STEP 0のみ起動時からの全履歴)
..._run.txtそのSTEP時点のshow running-config(=そのSTEPの検証Config)

いくつかのSTEPでは、設定変更直後にR1で確認したコマンドの記録(..._check.txt)も取得しています。

STEP 0:初期状態(既定のブロードキャスト)BROADCAST、Hello 10/Dead 40、DR/BDRあり

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun

STEP 1:R1・R2の両側にnetwork point-to-pointPOINT_TO_POINT、DR/BDRなし、Network-LSAが消える

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun

STEP 2:R1側だけ既定に戻す(タイプ不一致) — 隣接が確立できず、OSPF経路が全滅

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun

追加取得: R1 不一致時の確認

STEP 3:R2側も既定に戻す — 復旧

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun

STEP 4:両側にnetwork non-broadcastNON_BROADCAST、Hello 30/Dead 120、ネイバーを発見できない

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun

追加取得: R1 NBMA(neighbor未設定)

STEP 5:両側にneighborを設定 — 隣接が確立。Helloがユニキャストになる

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun

追加取得: R1 NBMA(neighbor設定後)

STEP 6:neighborを削除し両側にnetwork point-to-multipointPOINT_TO_MULTIPOINT、DRなし、neighbor不要

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun

追加取得: R1 P2MPの確認

STEP 7:networkの設定を削除(最終状態) — 初期状態と同じ構成に復旧

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun

追加取得: R1 既定への復旧 / R1 point-to-multipoint non-broadcastの確認

キャプチャーファイルは次の3本です。いずれもR1–R2間のリンクで取得しました。

ポイントツーポイントへの切り替え(STEP 1)のキャプチャー(ospf-network-type-p2p.pcap) をダウンロード

ノンブロードキャスト(STEP 4・5)のキャプチャー(ospf-network-type-nbma.pcap) をダウンロード

ポイントツーマルチポイント(STEP 6)のキャプチャー(ospf-network-type-p2mp.pcap) をダウンロード

参考

RFCタイトル概要
RFC 2328OSPF Version 2ネットワークタイプの定義(Section 1.2)と、タイプごとのインタフェース動作(Section 9)。

関連記事