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 / Dead | DR/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-point | POINT_TO_POINT、DR/BDRなし、Network-LSAが消える |
| 2 | R1側だけ既定に戻す(タイプ不一致) | 隣接が確立できず、OSPF経路が全滅 |
| 3 | 両側を既定に戻す | 復旧 |
| 4 | 両側にnetwork non-broadcast | NON_BROADCAST、Hello 30/Dead 120、ネイバーを発見できない |
| 5 | neighborでネイバーを手動指定 | 隣接が確立。Helloがユニキャストになる |
| 6 | 両側にnetwork point-to-multipoint | POINT_TO_MULTIPOINT、Hello 30/Dead 120、DRなし、neighbor不要 |
| 7 | networkの設定を削除(最終状態) | 初期状態に復旧 |
既定はブロードキャスト(STEP 0)
show ospf interfaceにネットワークタイプ、DR/BDR、タイマーがまとめて表示されます。この記事ではこのコマンドを主軸に確認していきます。
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:985Network Type BROADCASTで、DRはR2(2.2.2.2)、BDRはR1自身、Hello 10, Dead 40です。LSDBにはこのセグメントのNetwork-LSA(Link ID 10.1.2.2)があります。
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を設定します。
router ospf 1
area 0
interface GigabitEthernet0/0/0/0
network point-to-point
!
!
!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 0DRとBDRの行そのものが無くなり、StateもPOINT_TO_POINTになりました。Hello/Deadは10/40のままです。show ospf neighborでも、状態の/以降の役割が-になります。
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: 1LSDBからは、このセグメントのNetwork-LSA(10.1.2.2)が消えました。残っているのはR2–R3間の10.2.3.3だけです。かわりにR1のRouter-LSAはリンク数が2から3に増えています。
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は作られず、セグメント自体はスタブとして表現されます。
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. | Time | Source | Destination | Info |
|---|---|---|---|---|
| 1 | 0.000 | 10.1.2.2 | 224.0.0.5 | Hello Packet |
| 2 | 2.558 | 10.1.2.1 | 224.0.0.5 | Hello Packet |
| 3 | 9.484 | 10.1.2.2 | 224.0.0.5 | Hello Packet |
| 4 | 11.879 | 10.1.2.1 | 224.0.0.5 | Hello Packet |
| 5 | 16.011 | 10.1.2.1 | 224.0.0.5 | Hello Packet |
| 6 | 19.475 | 10.1.2.2 | 224.0.0.5 | Hello Packet |
| 7 | 25.623 | 10.1.2.1 | 224.0.0.5 | Hello Packet |
| 10 | 36.181 | 10.1.2.2 | 224.0.0.5 | Hello Packet |
| 11 | 45.231 | 10.1.2.1 | 224.0.0.5 | Hello Packet |
| 12 | 45.261 | 10.1.2.2 | 10.1.2.1 | DB Description |
No.4までがブロードキャストのHello、No.5からがポイントツーポイントのHelloです。R2側の切り替えが遅れているため、No.6・No.8ではまだDRが入ったHelloが流れています。両側が0.0.0.0になった後、No.12からDBDの交換が始まって隣接が張り直されます。
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: 8Open 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ネットワークタイプが一致しないと隣接できない(STEP 2・3)
R1側だけを既定(ブロードキャスト)に戻し、R2をポイントツーポイントのままにします。Hello/Deadはどちらも10/40で一致しているため、タイマー不一致では説明できない状況です。
R1側は自分だけでDRになり、ネイバーはINITから先に進みません。
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)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: 1R2側はそもそもネイバーとして数えていません。
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を仕掛けていなくても後から読み出せます。
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つも残りません。
RP/0/RP0/CPU0:R1#show route ospf
Sun Sep 6 05:10:51.396 UTC
% No matching routes foundSTEP 3で両側を既定に戻すと、隣接も経路も元どおりになります。ネットワークタイプはリンクの両端で必ず揃える必要があります。
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を設定します。
router ospf 1
area 0
interface GigabitEthernet0/0/0/0
network non-broadcast
!
!
!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 0Hello 30, Dead 120, Wait 120とタイマーが変わり、DR/BDRの選出はある(R1が自分だけでDRになっている)ものの、ネイバーが1台も見つかりません。ノンブロードキャストはマルチキャストでネイバーを探さないためです。
キャプチャを見ると、この間リンク上にOSPFパケットが1つも流れていないことが分かります。ユニキャストで送る相手が設定されていないので、Helloすら送信されません。
| No. | Time | Source | Destination | Info |
|---|---|---|---|---|
| 1 | 0.000 | 10.1.2.1 | 224.0.0.5 | Hello Packet |
| 2 | 2.214 | 10.1.2.2 | 224.0.0.5 | Hello Packet |
| 3 | 9.828 | 10.1.2.1 | 224.0.0.5 | Hello Packet |
| 4 | 12.060 | 10.1.2.2 | 224.0.0.5 | Hello Packet |
| 5 | 21.543 | 10.1.2.2 | 224.0.0.5 | Hello Packet |
| 6 | 329.594 | 10.1.2.1 | 10.1.2.2 | Hello Packet |
| 7 | 341.455 | 10.1.2.2 | 10.1.2.1 | Hello Packet |
| 8 | 341.460 | 10.1.2.1 | 10.1.2.2 | DB Description |
| 23 | 358.814 | 10.1.2.1 | 10.1.2.2 | Hello Packet |
| 24 | 370.473 | 10.1.2.2 | 10.1.2.1 | Hello Packet |
No.5(21.5秒)からNo.6(329.6秒)まで約5分間、パケットがまったくありません。No.6がneighborを設定した直後の最初のHelloで、宛先が224.0.0.5ではなく相手のインタフェースアドレス10.1.2.2になっています。
router ospf 1
area 0
interface GigabitEthernet0/0/0/0
neighbor 10.1.2.2 ! R2側は neighbor 10.1.2.1
!
!
!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: 8neighborを入れた後は隣接が確立し、DR/BDRも選出されます。
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を設定します。
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
!
!
!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)で送られています。
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このタイプに特有なのは、セグメントがサブネットではなく対向ごとの/32ホストルートとして広告されることです。R1のルーティングテーブルには、他のタイプでは現れない10.1.2.2/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/0Router-LSAを見ると、対向へのポイントツーポイントリンクに加えて、自分のインタフェースアドレス10.1.2.1/32がメトリック0のスタブとして広告されています。部分メッシュ網では「どの2台が直接届くか」がペアごとに違うため、サブネット単位ではなくペア単位で広告する、という考え方です。
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の設定を削除すると、イーサネットの既定であるブロードキャストに戻ります。
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:925network 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 / Dead | DRフィールド | キャプチャ |
|---|---|---|---|---|
| ブロードキャスト | 224.0.0.5 | 10 / 40 | 10.1.2.2(DRのアドレス) | ospf-network-type-p2p.pcap No.4 |
| ポイントツーポイント | 224.0.0.5 | 10 / 40 | 0.0.0.0 | ospf-network-type-p2p.pcap No.5 |
| ノンブロードキャスト | 10.1.2.2(ユニキャスト) | 30 / 120 | 10.1.2.1(DRのアドレス) | ospf-network-type-nbma.pcap No.6 |
| ポイントツーマルチポイント | 224.0.0.5 | 30 / 120 | 0.0.0.0 | ospf-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.txt | show 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出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
STEP 1:R1・R2の両側にnetwork point-to-point — POINT_TO_POINT、DR/BDRなし、Network-LSAが消える
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
STEP 2:R1側だけ既定に戻す(タイプ不一致) — 隣接が確立できず、OSPF経路が全滅
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
追加取得: R1 不一致時の確認
STEP 3:R2側も既定に戻す — 復旧
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
STEP 4:両側にnetwork non-broadcast — NON_BROADCAST、Hello 30/Dead 120、ネイバーを発見できない
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
追加取得: R1 NBMA(neighbor未設定)
STEP 5:両側にneighborを設定 — 隣接が確立。Helloがユニキャストになる
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
追加取得: R1 NBMA(neighbor設定後)
STEP 6:neighborを削除し両側にnetwork point-to-multipoint — POINT_TO_MULTIPOINT、DRなし、neighbor不要
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
追加取得: R1 P2MPの確認
STEP 7:networkの設定を削除(最終状態) — 初期状態と同じ構成に復旧
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
追加取得: 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 2328 | OSPF Version 2 | ネットワークタイプの定義(Section 1.2)と、タイプごとのインタフェース動作(Section 9)。 |