Router-LSAとは
Router-LSA(Type 1)は、ルータが自分の足元だけを書いて広告するLSAです。「どのエリアで、何に、いくらのコストでつながっているか」を並べただけのもので、隣のエリアの話も外部経路の話も入っていません。それでも、エリア内の全ルータのRouter-LSAを集めるとエリアのグラフがそのまま復元できます。SPFの木はここから作られます。
| 項目 | 内容 |
|---|---|
| 生成するルータ | すべてのルータ(内部ルータもABRもASBRも) |
| いくつ作るか | エリアごとに1つ。2エリアに足があるABRは2つ作る |
| 届く範囲 | そのエリアの中だけ。ABRを越えない |
| Link State ID | 生成したルータのルータID |
| Advertising Router | 同じくルータID(Type 1ではこの2つが必ず一致する) |
この記事では、7台のラボで1台(R11)の設定を1つずつ変え、そのたびにR11のRouter-LSAのどのフィールドが動くかを実機で追いかけます。コストを変える、passiveにする、ネットワークタイプを変える、インタフェースを落とす、再配布する——の5種類です。
LSAに共通する20バイトのヘッダー(LS Age、シーケンス番号、チェックサムなど)はLSAとLSAヘッダーで扱っています。この記事はその続きの本体部分です。
パケットフォーマット
20バイトの共通ヘッダーのあとに、4バイトの「フラグ+リンク数」が来て、そこから12バイトのリンクエントリが# links個並びます。エントリの中身は次の5つです。
| フィールド | サイズ | 内容 |
|---|---|---|
| Link ID | 4バイト | そのリンクの相手を識別する値。Typeによって意味が変わる |
| Link Data | 4バイト | 自分側の情報。Typeによってアドレスだったりマスクだったりする |
| Type | 1バイト | 1=point-to-point、2=Transit、3=Stub、4=仮想リンク |
| # TOS | 1バイト | TOS別メトリックの数。現在の実装では常に0 |
| metric | 2バイト | そのリンクの送出コスト |
Link IDとLink Dataは同じ4バイトの入れ物なのに、Typeごとに入るものが違います。ここがRouter-LSAを読むときの最初の関門です。
検証トポロジ
| ルータ | エリア | インタフェース | ネットワークタイプ |
|---|---|---|---|
| R1 | 1 | Lo0 1.1.1.1/32、Gi0/0/0/0 10.0.12.1/24 | point-to-point |
| R2 | 0 / 1 | Lo0 2.2.2.2/32、Gi0/0/0/1 10.0.23.2/24、Gi0/0/0/2 10.0.24.2/24(エリア0)、Gi0/0/0/0 10.0.12.2/24(エリア1) | Gi0/0/0/1のみブロードキャスト |
| R3 | 0 / 2 | Lo0 3.3.3.3/32、Gi0/0/0/0 10.0.23.3/24(エリア0)、Gi0/0/0/1 172.16.3.3/24(エリア2) | Gi0/0/0/0のみブロードキャスト |
| R4 | 0 / 2 | Lo0 4.4.4.4/32、Gi0/0/0/0 10.0.24.4/24(エリア0)、Gi0/0/0/1 172.16.4.4/24(エリア2、コスト10) | すべてpoint-to-point |
| R11 | 2 | Lo0 11.11.11.11/32、Gi0/0/0/0 172.16.3.11/24、Gi0/0/0/1 10.1.11.11/24 | Gi0/0/0/1のみブロードキャスト |
| R12 | 2 | Lo0 12.12.12.12/32、Gi0/0/0/0 172.16.4.12/24(コスト10)、Gi0/0/0/1 10.1.12.12/24 | すべてpoint-to-point |
| R13 | 2 | Lo0 13.13.13.13/32、Gi0/0/0/0 10.1.11.13/24、Gi0/0/0/1 10.1.12.13/24 | Gi0/0/0/0のみブロードキャスト |
主役をR11にしたのは、Router-LSAの3種類のエントリが1台に揃っているからです。ループバック(Stub)、R3へのpoint-to-point(PTP+Stub)、R13とのブロードキャスト(Transit)が1つのLSAに同居します。しかもR11はエリア2の内部ルータなので、ABRやASBRのフラグに邪魔されずリンクの部分だけを観察できます。
R11から見たインタフェースは3本です。
RP/0/RP0/CPU0:R11#show ospf interface brief
Tue Sep 8 05:45:17.745 UTC
* Indicates MADJ interface, (P) Indicates fast detect hold down state
Interfaces for OSPF 1
Interface PID Area IP Address/Mask Cost State Nbrs F/C
Lo0 1 2 11.11.11.11/32 1 LOOP 0/0
Gi0/0/0/0 1 2 172.16.3.11/24 1 P2P 1/1
Gi0/0/0/1 1 2 10.1.11.11/24 1 BDR 1/1インタフェース1本がエントリいくつになるか
対応の規則はRFC 2328のSection 12.4.1で決まっていて、次の4通りしかありません。
| インタフェースの状態 | できるエントリ | Link ID | Link Data |
|---|---|---|---|
| ループバック | Stub 1つ | そのループバックのIPアドレス | 255.255.255.255(ホストマスク) |
| point-to-pointで隣接がFULL | PTPとStubの2つ | PTPは隣のルータID、Stubはサブネット番号 | PTPは自分のインタフェースアドレス、Stubはサブネットマスク |
| ブロードキャストで隣接がFULL | Transit 1つ | DRのインタフェースアドレス | 自分のインタフェースアドレス |
| passiveや、隣接が1つもいないブロードキャスト | Stub 1つ | サブネット番号 | サブネットマスク |
実機で見ると、show ospf database router self-originateが自分が出したRouter-LSAだけを表示してくれます。
RP/0/RP0/CPU0:R11#show ospf database router self-originate
Tue Sep 8 05:45:22.297 UTC
OSPF Router with ID (11.11.11.11) (Process ID 1)
Router Link States (Area 2)
LS age: 163
Options: (No TOS-capability, DC)
LS Type: Router Links
Link State ID: 11.11.11.11
Advertising Router: 11.11.11.11
LS Seq Number: 80000004
Checksum: 0xc1d7
Length: 72
Number of Links: 4
Link connected to: a Stub Network
(Link ID) Network/subnet number: 11.11.11.11
(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: 3.3.3.3
(Link Data) Router Interface address: 172.16.3.11
Number of TOS metrics: 0
TOS 0 Metrics: 1
Link connected to: a Stub Network
(Link ID) Network/subnet number: 172.16.3.0
(Link Data) Network Mask: 255.255.255.0
Number of TOS metrics: 0
TOS 0 Metrics: 1
Link connected to: a Transit Network
(Link ID) Designated Router address: 10.1.11.13
(Link Data) Router Interface address: 10.1.11.11
Number of TOS metrics: 0
TOS 0 Metrics: 1図と1行ずつ対応しています。
| エントリ | 元になったインタフェース | Link ID | Link Data |
|---|---|---|---|
| ① Stub | Lo0 11.11.11.11/32 | 11.11.11.11(ループバックのアドレス) | 255.255.255.255 |
| ② PTP | Gi0/0/0/0 172.16.3.11/24(point-to-point) | 3.3.3.3(隣のルータID、アドレスではない) | 172.16.3.11(自分のアドレス) |
| ③ Stub | ②と同じGi0/0/0/0のサブネット | 172.16.3.0(サブネット番号) | 255.255.255.0(マスク) |
| ④ Transit | Gi0/0/0/1 10.1.11.11/24(ブロードキャスト、DRはR13) | 10.1.11.13(DRのアドレス、自分ではない) | 10.1.11.11(自分のアドレス) |
point-to-pointのリンクがエントリ2つになるのがつまずきやすいところです。②はSPFのグラフの辺(R11からR3へ行ける)を表し、③はそのリンク上のIPサブネット(172.16.3.0/24という宛先)を表します。RFC 2328のSection 12.4.1.1が、番号付きのpoint-to-pointでは両方を出すと規定しています。一方ブロードキャストは④の1つだけで、サブネットの情報はDRが出すNetwork-LSA(Type 2)が持ちます。
同じLSAをパケット側から見ると、Link Typeが数値で見えます。次はキャプチャーのNo.97(R11 - R13のセグメント側)です。
Open Shortest Path First
OSPF Header
Version: 2
Message Type: LS Update (4)
Packet Length: 100
Source OSPF Router: 11.11.11.11
Area ID: 0.0.0.2
Checksum: 0xa8bc [correct]
Instance ID: Base IPv4 Unicast Instance (0)
Auth Type: Null (0)
Auth Data (none): 0000000000000000
LS Update Packet
Number of LSAs: 1
LSA-type 1 (Router-LSA), len 72
.000 0000 0000 0001 = LS Age (seconds): 1
0... .... .... .... = Do Not Age Flag: 0
Options: 0x28, (DC) Demand Circuits, (N) NSSA
0... .... = DN: Not set
.0.. .... = (O) Opaque: Not set
..1. .... = (DC) Demand Circuits: Supported
...0 .... = (L) LLS Data block: Not Present
.... 1... = (N) NSSA: Supported
.... .0.. = (MC) Multicast: Not capable
.... ..0. = (E) External Routing: Not capable
.... ...0 = (MT) Multi-Topology Routing: No
LS Type: Router-LSA (1)
Link State ID: 11.11.11.11
Advertising Router: 11.11.11.11
Sequence Number: 0x80000006
Checksum: 0xbdd9
Length: 72
Flags: 0x00
0... .... = (H) Host: No
..0. .... = (S) Shortcut-capable ABR: No
...0 .... = (N) NSSA translation: No
.... 0... = (W) Wild-card multicast receiver: No
.... .0.. = (V) Virtual link endpoint: No
.... ..0. = (E) AS boundary router: No
.... ...0 = (B) Area border router: No
Number of Links: 4
Type: Stub ID: 11.11.11.11 Data: 255.255.255.255 Metric: 1
Link ID: 11.11.11.11 - IP network/subnet number
Link Data: 255.255.255.255
Link Type: 3 - Connection to a stub network
Number of Metrics: 0 - TOS
0 Metric: 1
Type: PTP ID: 3.3.3.3 Data: 172.16.3.11 Metric: 1
Link ID: 3.3.3.3 - Neighboring router's Router ID
Link Data: 172.16.3.11
Link Type: 1 - Point-to-point connection to another router
Number of Metrics: 0 - TOS
0 Metric: 1
Type: Stub ID: 172.16.3.0 Data: 255.255.255.0 Metric: 1
Link ID: 172.16.3.0 - IP network/subnet number
Link Data: 255.255.255.0
Link Type: 3 - Connection to a stub network
Number of Metrics: 0 - TOS
0 Metric: 1
Type: Transit ID: 10.1.11.13 Data: 10.1.11.11 Metric: 1
Link ID: 10.1.11.13 - IP address of Designated Router
Link Data: 10.1.11.11
Link Type: 2 - Connection to a transit network
Number of Metrics: 0 - TOS
0 Metric: 1Type: Stub / PTP / Transit の3種類が並び、Link Type: 3 / 1 / 2 という数値も見えます。実機のshowが文章で書いていた「a Stub Network」「another Router (point-to-point)」「a Transit Network」は、パケットの上ではこの1バイトです。
設定を変えるとどのフィールドが動くか
ここからが本題です。R11の設定を1つずつ変えて、R11のRouter-LSAを毎回採取しました。9STEPぶんをまとめると次のようになります。
| STEP | 操作 | Seq | # links | エントリの並び |
|---|---|---|---|---|
| 0 | 起動直後 | 80000004 | 4 | Stub 11.11.11.11 / PTP 3.3.3.3 / Stub 172.16.3.0 / Transit 10.1.11.13 |
| 1 | Gi0/0/0/1をcost 5 | 80000005 | 4 | 同上(Transitのメトリックだけ 1→5) |
| 2 | コストを戻す | 80000006 | 4 | STEP 0と同じ |
| 3 | Gi0/0/0/1をpassive enable | 80000007 | 4 | Stub / PTP / Stub / Stub 10.1.11.0 |
| 4 | passiveを外す | 80000008 | 4 | STEP 0と同じ |
| 5 | R11 - R3をブロードキャストに | 8000000a | 3 | Stub / Transit 172.16.3.11 / Transit 10.1.11.13 |
| 6 | point-to-pointに戻す | 8000000c | 4 | STEP 0と同じ |
| 7 | Gi0/0/0/0をshutdown | 8000000d | 2 | Stub 11.11.11.11 / Transit 10.1.11.13 |
| 8 | 復旧してスタティックを再配布 | 8000000f | 4 | STEP 0と同じ。フラグにEビット |
シーケンス番号が飛んでいることに気づきます(80000009、8000000b、8000000eが表に出てこない)。これは設定変更の途中でLSAが2回作り直されたためで、たとえばSTEP 5ではネットワークタイプを変えた瞬間に1回、DRが決まった瞬間にもう1回生成されています。シーケンス番号は「何回作り直したか」であって「何回設定を変えたか」ではありません。
以下、変化が大きいものを順に見ていきます。
コストを変える — 動くのはメトリックだけ
cost 5を入れると、TransitエントリのTOS 0 Metricsだけが1から5になります。
RP/0/RP0/CPU0:R11#show ospf database router self-originate
Tue Sep 8 05:49:17.947 UTC
OSPF Router with ID (11.11.11.11) (Process ID 1)
Router Link States (Area 2)
LS age: 163
Options: (No TOS-capability, DC)
LS Type: Router Links
Link State ID: 11.11.11.11
Advertising Router: 11.11.11.11
LS Seq Number: 80000005
Checksum: 0x98fb
Length: 72
Number of Links: 4
Link connected to: a Stub Network
(Link ID) Network/subnet number: 11.11.11.11
(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: 3.3.3.3
(Link Data) Router Interface address: 172.16.3.11
Number of TOS metrics: 0
TOS 0 Metrics: 1
Link connected to: a Stub Network
(Link ID) Network/subnet number: 172.16.3.0
(Link Data) Network Mask: 255.255.255.0
Number of TOS metrics: 0
TOS 0 Metrics: 1
Link connected to: a Transit Network
(Link ID) Designated Router address: 10.1.11.13
(Link Data) Router Interface address: 10.1.11.11
Number of TOS metrics: 0
TOS 0 Metrics: 5エントリの並びも数も変わりません。メトリックはエントリの中の2バイトなので、構成には影響しないわけです。変わったのはLS Seq Number(80000004→80000005)とChecksum、そしてLS ageが0に戻ったことです。
STEP 2でコストを元に戻すとエントリの中身はSTEP 0と同じに戻りますが、シーケンス番号は80000006まで進んだままで戻りません。LSAの新旧判定はシーケンス番号だけで行うので、番号を戻すと「古いLSA」と誤認されてしまうためです。
passiveにする — TransitがStubに変わる
passive enableを入れるとHelloの送受信が止まり、そのセグメント上の隣接が消えます。RFC 2328のSection 12.4.1.2は、ブロードキャストのインタフェースに完全隣接が1つも無い場合はStubとして広告すると規定しています。実機でもそのとおりになりました。
RP/0/RP0/CPU0:R11#show ospf database router self-originate
Tue Sep 8 05:57:29.346 UTC
OSPF Router with ID (11.11.11.11) (Process ID 1)
Router Link States (Area 2)
LS age: 186
Options: (No TOS-capability, DC)
LS Type: Router Links
Link State ID: 11.11.11.11
Advertising Router: 11.11.11.11
LS Seq Number: 80000007
Checksum: 0x497a
Length: 72
Number of Links: 4
Link connected to: a Stub Network
(Link ID) Network/subnet number: 11.11.11.11
(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: 3.3.3.3
(Link Data) Router Interface address: 172.16.3.11
Number of TOS metrics: 0
TOS 0 Metrics: 1
Link connected to: a Stub Network
(Link ID) Network/subnet number: 172.16.3.0
(Link Data) Network Mask: 255.255.255.0
Number of TOS metrics: 0
TOS 0 Metrics: 1
Link connected to: a Stub Network
(Link ID) Network/subnet number: 10.1.11.0
(Link Data) Network Mask: 255.255.255.0
Number of TOS metrics: 0
TOS 0 Metrics: 1④がa Transit Networkからa Stub Networkに変わり、Link IDが10.1.11.13(DRのアドレス)から10.1.11.0(サブネット番号)へ、Link Dataが10.1.11.11(自分のアドレス)から255.255.255.0(マスク)へ、まとめて書き換わっています。インタフェースが消えたわけではないので、エントリの数は4のままです。
パケットでも同じものが見えます。
Open Shortest Path First
OSPF Header
Version: 2
Message Type: LS Update (4)
Packet Length: 100
Source OSPF Router: 11.11.11.11
Area ID: 0.0.0.2
Checksum: 0x3233 [correct]
Instance ID: Base IPv4 Unicast Instance (0)
Auth Type: Null (0)
Auth Data (none): 0000000000000000
LS Update Packet
Number of LSAs: 1
LSA-type 1 (Router-LSA), len 72
.000 0000 0000 0001 = LS Age (seconds): 1
0... .... .... .... = Do Not Age Flag: 0
Options: 0x28, (DC) Demand Circuits, (N) NSSA
0... .... = DN: Not set
.0.. .... = (O) Opaque: Not set
..1. .... = (DC) Demand Circuits: Supported
...0 .... = (L) LLS Data block: Not Present
.... 1... = (N) NSSA: Supported
.... .0.. = (MC) Multicast: Not capable
.... ..0. = (E) External Routing: Not capable
.... ...0 = (MT) Multi-Topology Routing: No
LS Type: Router-LSA (1)
Link State ID: 11.11.11.11
Advertising Router: 11.11.11.11
Sequence Number: 0x80000007
Checksum: 0x497a
Length: 72
Flags: 0x00
0... .... = (H) Host: No
..0. .... = (S) Shortcut-capable ABR: No
...0 .... = (N) NSSA translation: No
.... 0... = (W) Wild-card multicast receiver: No
.... .0.. = (V) Virtual link endpoint: No
.... ..0. = (E) AS boundary router: No
.... ...0 = (B) Area border router: No
Number of Links: 4
Type: Stub ID: 11.11.11.11 Data: 255.255.255.255 Metric: 1
Link ID: 11.11.11.11 - IP network/subnet number
Link Data: 255.255.255.255
Link Type: 3 - Connection to a stub network
Number of Metrics: 0 - TOS
0 Metric: 1
Type: PTP ID: 3.3.3.3 Data: 172.16.3.11 Metric: 1
Link ID: 3.3.3.3 - Neighboring router's Router ID
Link Data: 172.16.3.11
Link Type: 1 - Point-to-point connection to another router
Number of Metrics: 0 - TOS
0 Metric: 1
Type: Stub ID: 172.16.3.0 Data: 255.255.255.0 Metric: 1
Link ID: 172.16.3.0 - IP network/subnet number
Link Data: 255.255.255.0
Link Type: 3 - Connection to a stub network
Number of Metrics: 0 - TOS
0 Metric: 1
Type: Stub ID: 10.1.11.0 Data: 255.255.255.0 Metric: 1
Link ID: 10.1.11.0 - IP network/subnet number
Link Data: 255.255.255.0
Link Type: 3 - Connection to a stub network
Number of Metrics: 0 - TOS
0 Metric: 1このときセグメントの反対側でも同じことが起きます。R13から見るとGi0/0/0/0の隣接が0になるので、R13のRouter-LSAでもこのセグメントはStubになります。さらに、
RP/0/RP0/CPU0:R13#show ospf database network
Tue Sep 8 05:58:13.515 UTC
OSPF Router with ID (13.13.13.13) (Process ID 1)Network-LSAそのものが消えました。R13はshow ospf interface briefではまだDRのままですが、完全隣接が1つも無いDRはNetwork-LSAを出しません(RFC 2328のSection 12.4.2)。ブロードキャストのセグメントに1台しかいないなら、それは実質Stubのネットワークだからです。
point-to-pointをブロードキャストに変える — 2エントリが1つに減る
R11 - R3のnetwork point-to-pointを両側で外すと、番号付きp2pの「PTP+Stub」がTransit 1つになります。
RP/0/RP0/CPU0:R11#show ospf database router self-originate
Tue Sep 8 06:06:42.673 UTC
OSPF Router with ID (11.11.11.11) (Process ID 1)
Router Link States (Area 2)
LS age: 159
Options: (No TOS-capability, DC)
LS Type: Router Links
Link State ID: 11.11.11.11
Advertising Router: 11.11.11.11
LS Seq Number: 8000000a
Checksum: 0xbae9
Length: 60
Number of Links: 3
Link connected to: a Stub Network
(Link ID) Network/subnet number: 11.11.11.11
(Link Data) Network Mask: 255.255.255.255
Number of TOS metrics: 0
TOS 0 Metrics: 1
Link connected to: a Transit Network
(Link ID) Designated Router address: 172.16.3.11
(Link Data) Router Interface address: 172.16.3.11
Number of TOS metrics: 0
TOS 0 Metrics: 1
Link connected to: a Transit Network
(Link ID) Designated Router address: 10.1.11.13
(Link Data) Router Interface address: 10.1.11.11
Number of TOS metrics: 0
TOS 0 Metrics: 1Number of Linksが4から3へ減りました。エントリはStub 11.11.11.11 / Transit 172.16.3.11 / Transit 10.1.11.13です。
新しいTransitのLink IDが172.16.3.11、つまりR11自身のアドレスになっているのは、このセグメントのDRがR11だからです。
RP/0/RP0/CPU0:R11#show ospf interface brief
Tue Sep 8 06:06:38.143 UTC
* Indicates MADJ interface, (P) Indicates fast detect hold down state
Interfaces for OSPF 1
Interface PID Area IP Address/Mask Cost State Nbrs F/C
Lo0 1 2 11.11.11.11/32 1 LOOP 0/0
Gi0/0/0/0 1 2 172.16.3.11/24 1 DR 1/1
Gi0/0/0/1 1 2 10.1.11.11/24 1 BDR 1/1ルータIDが11.11.11.11とR3の3.3.3.3より大きいのでR11がDRになりました。その結果、R11が新しくNetwork-LSAを生成します。
Open Shortest Path First
OSPF Header
Version: 2
Message Type: LS Update (4)
Packet Length: 60
Source OSPF Router: 11.11.11.11
Area ID: 0.0.0.2
Checksum: 0xeba1 [correct]
Instance ID: Base IPv4 Unicast Instance (0)
Auth Type: Null (0)
Auth Data (none): 0000000000000000
LS Update Packet
Number of LSAs: 1
LSA-type 2 (Network-LSA), len 32
.000 0000 0000 0001 = LS Age (seconds): 1
0... .... .... .... = Do Not Age Flag: 0
Options: 0x28, (DC) Demand Circuits, (N) NSSA
0... .... = DN: Not set
.0.. .... = (O) Opaque: Not set
..1. .... = (DC) Demand Circuits: Supported
...0 .... = (L) LLS Data block: Not Present
.... 1... = (N) NSSA: Supported
.... .0.. = (MC) Multicast: Not capable
.... ..0. = (E) External Routing: Not capable
.... ...0 = (MT) Multi-Topology Routing: No
LS Type: Network-LSA (2)
Link State ID: 172.16.3.11
Advertising Router: 11.11.11.11
Sequence Number: 0x80000001
Checksum: 0x7391
Length: 32
Netmask: 255.255.255.0
Attached Router: 3.3.3.3
Attached Router: 11.11.11.11つまりネットワークタイプを1行変えただけで、Router-LSAのエントリが1つ減り、代わりにLSAが1つ増えます。エリア内のLSAの総数は増えるのに、Router-LSAは短くなる、という交換になっています。ネットワークタイプそのものはOSPF ネットワークタイプ、DRの選び方はDRとBDRで扱っています。
Router-LSAの側も、パケットで見るとTransitが2つ並んでいるのが分かります。
Open Shortest Path First
OSPF Header
Version: 2
Message Type: LS Update (4)
Packet Length: 88
Source OSPF Router: 11.11.11.11
Area ID: 0.0.0.2
Checksum: 0xb2be [correct]
Instance ID: Base IPv4 Unicast Instance (0)
Auth Type: Null (0)
Auth Data (none): 0000000000000000
LS Update Packet
Number of LSAs: 1
LSA-type 1 (Router-LSA), len 60
.000 0000 0000 0001 = LS Age (seconds): 1
0... .... .... .... = Do Not Age Flag: 0
Options: 0x28, (DC) Demand Circuits, (N) NSSA
0... .... = DN: Not set
.0.. .... = (O) Opaque: Not set
..1. .... = (DC) Demand Circuits: Supported
...0 .... = (L) LLS Data block: Not Present
.... 1... = (N) NSSA: Supported
.... .0.. = (MC) Multicast: Not capable
.... ..0. = (E) External Routing: Not capable
.... ...0 = (MT) Multi-Topology Routing: No
LS Type: Router-LSA (1)
Link State ID: 11.11.11.11
Advertising Router: 11.11.11.11
Sequence Number: 0x8000000a
Checksum: 0xbae9
Length: 60
Flags: 0x00
0... .... = (H) Host: No
..0. .... = (S) Shortcut-capable ABR: No
...0 .... = (N) NSSA translation: No
.... 0... = (W) Wild-card multicast receiver: No
.... .0.. = (V) Virtual link endpoint: No
.... ..0. = (E) AS boundary router: No
.... ...0 = (B) Area border router: No
Number of Links: 3
Type: Stub ID: 11.11.11.11 Data: 255.255.255.255 Metric: 1
Link ID: 11.11.11.11 - IP network/subnet number
Link Data: 255.255.255.255
Link Type: 3 - Connection to a stub network
Number of Metrics: 0 - TOS
0 Metric: 1
Type: Transit ID: 172.16.3.11 Data: 172.16.3.11 Metric: 1
Link ID: 172.16.3.11 - IP address of Designated Router
Link Data: 172.16.3.11
Link Type: 2 - Connection to a transit network
Number of Metrics: 0 - TOS
0 Metric: 1
Type: Transit ID: 10.1.11.13 Data: 10.1.11.11 Metric: 1
Link ID: 10.1.11.13 - IP address of Designated Router
Link Data: 10.1.11.11
Link Type: 2 - Connection to a transit network
Number of Metrics: 0 - TOS
0 Metric: 1インタフェースを落とす — エントリが2つ消え、相手側はStubだけになる
Gi0/0/0/0をshutdownすると、そのインタフェースが作っていたPTPとStubの2つのエントリがまとめて消えます。
RP/0/RP0/CPU0:R11#show ospf database router self-originate
Tue Sep 8 06:16:08.151 UTC
OSPF Router with ID (11.11.11.11) (Process ID 1)
Router Link States (Area 2)
LS age: 196
Options: (No TOS-capability, DC)
LS Type: Router Links
Link State ID: 11.11.11.11
Advertising Router: 11.11.11.11
LS Seq Number: 8000000d
Checksum: 0x3710
Length: 48
Number of Links: 2
Link connected to: a Stub Network
(Link ID) Network/subnet number: 11.11.11.11
(Link Data) Network Mask: 255.255.255.255
Number of TOS metrics: 0
TOS 0 Metrics: 1
Link connected to: a Transit Network
(Link ID) Designated Router address: 10.1.11.13
(Link Data) Router Interface address: 10.1.11.11
Number of TOS metrics: 0
TOS 0 Metrics: 1Number of Linksが2になりました。RFC 2328のSection 12.4.1は、インタフェースの状態がDownならリンクを1つも追加しないと規定しています。
一方、R3側のインタフェースはshutdownしていないので上がったままです。それでもR3のエリア2のRouter-LSAはこうなります。
Router Link States (Area 2)
LS age: 111
Options: (No TOS-capability, DC)
LS Type: Router Links
Link State ID: 3.3.3.3
Advertising Router: 3.3.3.3
LS Seq Number: 80000007
Checksum: 0xd3e
Length: 36
Area Border Router
AS Boundary Router
Number of Links: 1
Link connected to: a Stub Network
(Link ID) Network/subnet number: 172.16.3.0
(Link Data) Network Mask: 255.255.255.0
Number of TOS metrics: 0
TOS 0 Metrics: 1PTPエントリが消えて、Stubの172.16.3.0だけが残りました(Number of Links: 1)。リンクは物理的に上がっていても、隣接がFULLでなければPTPエントリは作られません。Router-LSAが表しているのは「ケーブルがつながっているか」ではなく「隣接が確立しているか」です。
この非対称は、SPF計算の双方向の確認(RFC 2328のSection 16.1)とも噛み合っています。片側だけがPTPエントリを持っていても、相手側に自分を指すエントリが無ければその辺は使われません。ここでは両側とも消えたので迷う余地はありませんが、片側のLSAだけが古いまま残ったときに経路が消えるのはこの規則のためです。
再配布してASBRになる — フラグにEビットが立つ
最後に、Gi0/0/0/0を復旧したうえでR11にスタティックの再配布を入れます。
RP/0/RP0/CPU0:R11#show ospf database router self-originate
Tue Sep 8 06:20:49.311 UTC
OSPF Router with ID (11.11.11.11) (Process ID 1)
Router Link States (Area 2)
LS age: 197
Options: (No TOS-capability, DC)
LS Type: Router Links
Link State ID: 11.11.11.11
Advertising Router: 11.11.11.11
LS Seq Number: 8000000f
Checksum: 0xb1da
Length: 72
AS Boundary Router
Number of Links: 4
Link connected to: a Stub Network
(Link ID) Network/subnet number: 11.11.11.11
(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: 3.3.3.3
(Link Data) Router Interface address: 172.16.3.11
Number of TOS metrics: 0
TOS 0 Metrics: 1
Link connected to: a Stub Network
(Link ID) Network/subnet number: 172.16.3.0
(Link Data) Network Mask: 255.255.255.0
Number of TOS metrics: 0
TOS 0 Metrics: 1
Link connected to: a Transit Network
(Link ID) Designated Router address: 10.1.11.13
(Link Data) Router Interface address: 10.1.11.11
Number of TOS metrics: 0
TOS 0 Metrics: 1Number of Linksの手前にAS Boundary Routerの行が増えました。リンクのエントリはSTEP 0とまったく同じで、変わったのはフラグの1ビットだけです。パケットではFlags: 0x02として見えます。
Open Shortest Path First
OSPF Header
Version: 2
Message Type: LS Update (4)
Packet Length: 100
Source OSPF Router: 11.11.11.11
Area ID: 0.0.0.2
Checksum: 0xb2b2 [correct]
Instance ID: Base IPv4 Unicast Instance (0)
Auth Type: Null (0)
Auth Data (none): 0000000000000000
LS Update Packet
Number of LSAs: 1
LSA-type 1 (Router-LSA), len 72
.000 0000 0000 0001 = LS Age (seconds): 1
0... .... .... .... = Do Not Age Flag: 0
Options: 0x28, (DC) Demand Circuits, (N) NSSA
0... .... = DN: Not set
.0.. .... = (O) Opaque: Not set
..1. .... = (DC) Demand Circuits: Supported
...0 .... = (L) LLS Data block: Not Present
.... 1... = (N) NSSA: Supported
.... .0.. = (MC) Multicast: Not capable
.... ..0. = (E) External Routing: Not capable
.... ...0 = (MT) Multi-Topology Routing: No
LS Type: Router-LSA (1)
Link State ID: 11.11.11.11
Advertising Router: 11.11.11.11
Sequence Number: 0x8000000f
Checksum: 0xb1da
Length: 72
Flags: 0x02, (E) AS boundary router
0... .... = (H) Host: No
..0. .... = (S) Shortcut-capable ABR: No
...0 .... = (N) NSSA translation: No
.... 0... = (W) Wild-card multicast receiver: No
.... .0.. = (V) Virtual link endpoint: No
.... ..1. = (E) AS boundary router: Yes
.... ...0 = (B) Area border router: No
Number of Links: 4
Type: Stub ID: 11.11.11.11 Data: 255.255.255.255 Metric: 1
Link ID: 11.11.11.11 - IP network/subnet number
Link Data: 255.255.255.255
Link Type: 3 - Connection to a stub network
Number of Metrics: 0 - TOS
0 Metric: 1
Type: PTP ID: 3.3.3.3 Data: 172.16.3.11 Metric: 1
Link ID: 3.3.3.3 - Neighboring router's Router ID
Link Data: 172.16.3.11
Link Type: 1 - Point-to-point connection to another router
Number of Metrics: 0 - TOS
0 Metric: 1
Type: Stub ID: 172.16.3.0 Data: 255.255.255.0 Metric: 1
Link ID: 172.16.3.0 - IP network/subnet number
Link Data: 255.255.255.0
Link Type: 3 - Connection to a stub network
Number of Metrics: 0 - TOS
0 Metric: 1
Type: Transit ID: 10.1.11.13 Data: 10.1.11.11 Metric: 1
Link ID: 10.1.11.13 - IP address of Designated Router
Link Data: 10.1.11.11
Link Type: 2 - Connection to a transit network
Number of Metrics: 0 - TOS
0 Metric: 1フラグの意味
Router-LSAのフラグは3ビットで、そのルータが境界にいるかどうかを表します。
| ビット | 名前 | 意味 |
|---|---|---|
| V | Virtual link endpoint | そのルータが仮想リンクの終端になっている(このラボでは未使用) |
| E | External | そのルータがASBRである。外部経路を再配布している |
| B | Border | そのルータがABRである。2つ以上のエリアに足がある |
ラボの起動直後の分布は次のとおりです。
| ルータ | 実機の表示 | 立っているビット | 理由 |
|---|---|---|---|
| R1 | AS Boundary Router | E | スタティックを再配布しているASBR |
| R2 | Area Border Router | B | エリア0とエリア1の両方に足がある |
| R3・R4 | Area Border RouterとAS Boundary Router | B・E | ABRであることに加え、NSSAのType 7をType 5に変換する立場なのでEビットも立つ(RFC 3101のSection 3.1) |
| R11・R12 | 表示なし | なし | エリア2の内部ルータ |
| R13 | AS Boundary Router | E | NSSAの中で再配布しているASBR |
Bビットは「エリアをまたいでいる」という事実そのものなので、設定で立てるものではありません。2つ目のエリアにインタフェースを入れた瞬間に立ちます。R3とR4がエリア0でもエリア2でもEビットを立てているのは、NSSAの翻訳者になりうるからで、実際に再配布しているわけではありません。
Router-LSAからトポロジを組み立てる
最後に、集めたRouter-LSAからエリアのグラフを復元してみます。SPFが使うのはRouter-LSA(Type 1)とNetwork-LSA(Type 2)の2つだけで、Type 3以降は木ができたあとにぶら下げる宛先です。
| エントリの種類 | グラフでの扱い |
|---|---|
| PTP | 辺。相手はLink IDのルータID |
| Transit | 辺。相手はLink IDのアドレスを持つNetwork-LSA(=セグメントという頂点) |
| Stub | 葉。宛先とコストだけ。ここから先へは進まない |
規則は3つです。
- 辺は双方向で確認する。 相手のRouter-LSAに自分を指すエントリが無ければ、その辺は使わない(RFC 2328のSection 16.1)
- ネットワークからルータへ戻る辺のコストは0。 そのため、ブロードキャストのセグメントを1本渡るコストは片側分だけになる
- Stubは最後に足す。 木ができたあと、各ルータまでのコストにStubのメトリックを足して宛先を作る
エリア2で実際に計算してみます。R11のRouter-LSAは3.3.3.3を指すPTPを持ち(コスト1)、R3のエリア2のRouter-LSAも11.11.11.11を指すPTPを持っているので、この辺は双方向で成立しています。R11からR13へは、Transitエントリ(コスト1)でセグメント10.1.11.0/24へ渡り、そこからR13へは0コストです。
O 10.1.11.0/24, metric 1
10.1.11.11, directly connected, via GigabitEthernet0/0/0/1, ifIndex 4
O 10.1.12.0/24, metric 2
10.1.11.13, from 13.13.13.13, via GigabitEthernet0/0/0/1, ifIndex 4, path-id 1
O 11.11.11.11/32, metric 1
11.11.11.11, directly connected, via Loopback0, ifIndex 7
O 12.12.12.12/32, metric 3
10.1.11.13, from 12.12.12.12, via GigabitEthernet0/0/0/1, ifIndex 4, path-id 1
O 13.13.13.13/32, metric 2
10.1.11.13, from 13.13.13.13, via GigabitEthernet0/0/0/1, ifIndex 4, path-id 1
O 172.16.3.0/24, metric 1
172.16.3.11, directly connected, via GigabitEthernet0/0/0/0, ifIndex 3
O 172.16.4.0/24, metric 12
10.1.11.13, from 12.12.12.12, via GigabitEthernet0/0/0/1, ifIndex 4, path-id 1| 宛先 | コストの内訳 | show ospf routes |
|---|---|---|
10.1.11.0/24 | R11 → セグメント 1 | metric 1 |
172.16.3.0/24 | R11のStubエントリ 1 | metric 1 |
13.13.13.13/32 | R11 → セグメント 1 + セグメント → R13 0 + R13のStub 1 | metric 2 |
12.12.12.12/32 | R11 → セグメント 1 + セグメント → R13 0 + R13 → R12 1 + R12のStub 1 | metric 3 |
手で足した値と一致しました。ネットワークからルータへ戻る辺が0コストなので、ブロードキャストのセグメントを1本渡るコストは片側分の1だけになります。
なお3.3.3.3/32や10.0.23.0/24がO IAになっているのは、R3のLo0やエリア0のセグメントが別のエリアにあり、Router-LSAではなくType 3で届いているためです。Router-LSAから組み立てられるのは、あくまで自分と同じエリアの中だけです。
参考
| 文書 | 節 | 内容 |
|---|---|---|
| RFC 2328 | Section 12.4.1 | Router-LSAの生成規則。インタフェースの種類ごとのLink IDとLink Data |
| RFC 2328 | Section 12.4.1.1 | point-to-pointがPTPとStubの2エントリになる規定。unnumberedではLink DataがMIBのifIndexになる |
| RFC 2328 | Section 12.4.1.2 | ブロードキャストで完全隣接が無いときStubとして広告する規定 |
| RFC 2328 | Section 12.4.1.4 | ループバックを255.255.255.255のStubとして広告する規定 |
| RFC 2328 | Section 12.4.2 | Network-LSAの生成規則(完全隣接が無いDRは生成しない) |
| RFC 2328 | Section 16.1 | SPF計算。双方向の確認と、ネットワークからルータへの辺が0コストである規定 |
| RFC 2328 | Appendix A.4.2 | Router-LSAのパケットフォーマット、V/E/Bビット |
| RFC 3101 | Section 3.1 | NSSAの翻訳者となるABRでEビットが立つ規定 |
検証構成
CMLに7台のXRd(IOS XR 26.1.1)で組んだラボです。設定を変えたのはR11だけ(STEP 5のみR3の対向インタフェースも合わせて変更)で、STEP 0から順に9回、7台すべてのshowを採取しました。キャプチャーはR3 - R11(point-to-point)とR11 - R13(ブロードキャスト)の2か所で、38分間をまるごと取っています。
R3 - R11(point-to-point)のキャプチャーをダウンロード
R11 - R13(ブロードキャスト)のキャプチャーをダウンロード
検証Configおよびshow結果
各STEPで7台すべてから、次の3種類をルータごとに分けて取得しています。検証Configはこの..._run.txtです(最終状態はSTEP 8のもの)。
| ファイル | 内容 |
|---|---|
..._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 database router self-originate / show ospf database summary / show ospf database external / show ospf database nssa-external / show ospf border-routers / show ospf routes / show ospf database database-summary |
..._log.txt | そのSTEPの範囲だけに絞ったshow logging |
..._run.txt | そのSTEP時点のshow running-config(=そのSTEPの検証Config) |
show ospf database router self-originateを足したのがこの記事の要で、自分が出したRouter-LSAだけが1画面に出るので、STEP間の差分を追うのに使いました。
STEP 0:起動直後
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R11 | show | log | run |
| R12 | show | log | run |
| R13 | show | log | run |
STEP 1:R11 Gi0/0/0/1にcost 5
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R11 | show | log | run |
| R12 | show | log | run |
| R13 | show | log | run |
STEP 2:コストを元に戻す
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R11 | show | log | run |
| R12 | show | log | run |
| R13 | show | log | run |
STEP 3:R11 Gi0/0/0/1をpassive enable
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R11 | show | log | run |
| R12 | show | log | run |
| R13 | show | log | run |
STEP 4:passiveを外す
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R11 | show | log | run |
| R12 | show | log | run |
| R13 | show | log | run |
STEP 5:R11 - R3をブロードキャストに変更(R3側も)
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R11 | show | log | run |
| R12 | show | log | run |
| R13 | show | log | run |
STEP 6:point-to-pointに戻す
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R11 | show | log | run |
| R12 | show | log | run |
| R13 | show | log | run |
STEP 7:R11 Gi0/0/0/0をshutdown
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R11 | show | log | run |
| R12 | show | log | run |
| R13 | show | log | run |
STEP 8:Gi0/0/0/0を復旧し、R11でスタティックを再配布(最終状態)
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| R11 | show | log | run |
| R12 | show | log | run |
| R13 | show | log | run |
関連記事
- OSPFとは
- OSPF ルータID
- OSPFパケットの種類とヘッダーフォーマット
- OSPFの状態遷移
- OSPF Optionsフィールド
- DRとBDR
- OSPF ネットワークタイプ
- OSPFの外部経路(スタティックの再配布)
- OSPFのマルチエリアとABR
- OSPFのスタブエリアとトータリースタブエリア
- OSPFのNSSAとトータリーNSSA
- OSPFの経路集約
- OSPFのLSAとLSAヘッダー
- OSPFのRouter-LSA(Type 1)
- OSPFのNetwork-LSA(Type 2)
- OSPFのSummary-LSA(Type 3)
- OSPFのASBR Summary-LSA(Type 4)
- OSPFのAS External-LSA(Type 5)