AS External-LSAとは
AS External-LSA(Type 5)は、OSPFの外にある宛先を運ぶLSAです。ASBRがスタティックやBGPなどの経路を再配布すると、宛先1つにつき1つのType 5が生まれます。
この記事の主題はひとつです。Type 5はエリアの境界で作り直されません。 Summary-LSA(Type 3)とASBR Summary-LSA(Type 4)がABRごとに新しく作られるのに対して、Type 5はASBRが作ったものがそのままAS全体に流れます。
| 項目 | Type 3・Type 4 | Type 5 |
|---|---|---|
| 生成するルータ | ABR(エリアごとに作り直す) | ASBRだけ |
| 届く範囲 | そのエリアの中だけ | AS全体(スタブとNSSAを除く) |
| Advertising Router | エリアごとに変わる | 元のASBRのまま変わらない |
| Metric | ABRごとに再計算される | 変わらない(シードメトリックのまま) |
| ABRの役割 | 作り直して広告する | そのまま転送するだけ |
Type 5の中身、E1とE2の違い、ASBRが複数あるときのパス選択、デフォルトルートの生成はOSPFの外部経路で扱っています。この記事はType 5にしかない性質、つまり作り直されないこと、Link State IDの衝突、External Route Tagに絞ります。
パケットフォーマット
Type 3・4より2フィールド多く、36バイトです。
| フィールド | サイズ | 内容 |
|---|---|---|
| Network Mask | 4バイト | 外部の宛先のマスク |
| E | 1ビット | 0ならE1、1ならE2。既定はE2 |
| metric | 24ビット | シードメトリック。既定は20 |
| Forwarding Address | 4バイト | 0.0.0.0なら「Advertising Routerまで来い」 |
| External Route Tag | 4バイト | 32ビットの任意の値。OSPFは中身を解釈しない |
Forwarding Addressが非ゼロになる条件は別記事で解説します。
検証トポロジ
3エリアとも通常エリアなので、Type 5は3エリアすべてに行き渡ります。エリア1のR1がASBRで、スタティック5経路を再配布しています。
作り直されない
R1がエリア1で出した192.168.1.0/24のType 5を、3つのエリアそれぞれで見てみます。まずASBR自身の出力です。
RP/0/RP0/CPU0:R1#show ospf database external self-originate
Wed Sep 9 06:57:58.666 UTC
OSPF Router with ID (1.1.1.1) (Process ID 1)
Type-5 AS External Link States
LS age: 123
Options: (No TOS-capability, DC)
LS Type: AS External Link
Link State ID: 192.168.1.0 (External Network Number)
Advertising Router: 1.1.1.1
LS Seq Number: 80000001
Checksum: 0xd25
Length: 36
Network Mask: /24
Metric Type: 2 (Larger than any link state path)
TOS: 0
Metric: 20
Forward Address: 0.0.0.0
External Route Tag: 0
LS age: 123これと同じものを、2つ隣のエリア2にいるR11で見ると、すべてのフィールドが一致します。
RP/0/RP0/CPU0:R11#show ospf database external
Wed Sep 9 06:59:32.180 UTC
OSPF Router with ID (11.11.11.11) (Process ID 1)
Type-5 AS External Link States
Routing Bit Set on this LSA
LS age: 218
Options: (No TOS-capability, DC)
LS Type: AS External Link
Link State ID: 192.168.1.0 (External Network Number)
Advertising Router: 1.1.1.1
LS Seq Number: 80000001
Checksum: 0xd25
Length: 36
Network Mask: /24
Metric Type: 2 (Larger than any link state path)
TOS: 0
Metric: 20
Forward Address: 0.0.0.0
External Route Tag: 0| 項目 | エリア1(ASBR自身) | エリア2(2つ隣) |
|---|---|---|
| Link State ID | 192.168.1.0 | 192.168.1.0 |
| Advertising Router | 1.1.1.1 | 1.1.1.1 |
| LS Seq Number | 80000001 | 80000001 |
| Metric Type / Metric | 2 / 20 | 2 / 20 |
| Forward Address | 0.0.0.0 | 0.0.0.0 |
シーケンス番号まで同じというのが決定的です。Type 3なら、エリアをまたぐたびに別のABRが自分のシーケンス番号で新しいLSAを作っていました。Type 5では同じ1つのLSAが、そのまま3つのエリアに配られているだけです。ABRは中身に触れません。
このため、エリア0やエリア2のルータもASBRのルータID(1.1.1.1)を直接知ることになります。ただしルータIDが分かってもそこへの行き方は分からないので、Type 4が別途必要になる、という関係です。
取り消しも全エリアがほぼ同時
作り直しが無いことは、変化の伝わり方にそのまま出ます。R1で192.168.1.0/24のスタティックを削除したときの取り消しを、エリア0とエリア2で同時にキャプチャーしました。
Open Shortest Path First
OSPF Header
Version: 2
Message Type: LS Update (4)
Packet Length: 64
Source OSPF Router: 2.2.2.2
Area ID: 0.0.0.0 (Backbone)
Checksum: 0xc9c8 [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 5 (AS-External-LSA (ASBR)), len 36
.000 1110 0001 0000 = LS Age (seconds): 3600
0... .... .... .... = Do Not Age Flag: 0
Options: 0x20, (DC) Demand Circuits
0... .... = DN: Not set
.0.. .... = (O) Opaque: Not set
..1. .... = (DC) Demand Circuits: Supported
...0 .... = (L) LLS Data block: Not Present
.... 0... = (N) NSSA: Not supported
.... .0.. = (MC) Multicast: Not capable
.... ..0. = (E) External Routing: Not capable
.... ...0 = (MT) Multi-Topology Routing: No
LS Type: AS-External-LSA (ASBR) (5)
Link State ID: 192.168.1.0
Advertising Router: 1.1.1.1
Sequence Number: 0x80000004
Checksum: 0x3e05
Length: 36
Netmask: 255.255.255.0
1... .... = External Type: Type 2 (metric is larger than any other link state path)
.000 0000 = TOS: 0
Metric: 16777215
Forwarding Address: 0.0.0.0
External Route Tag: 0Open Shortest Path First
OSPF Header
Version: 2
Message Type: LS Update (4)
Packet Length: 64
Source OSPF Router: 3.3.3.3
Area ID: 0.0.0.2
Checksum: 0xc7c4 [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 5 (AS-External-LSA (ASBR)), len 36
.000 1110 0001 0000 = LS Age (seconds): 3600
0... .... .... .... = Do Not Age Flag: 0
Options: 0x20, (DC) Demand Circuits
0... .... = DN: Not set
.0.. .... = (O) Opaque: Not set
..1. .... = (DC) Demand Circuits: Supported
...0 .... = (L) LLS Data block: Not Present
.... 0... = (N) NSSA: Not supported
.... .0.. = (MC) Multicast: Not capable
.... ..0. = (E) External Routing: Not capable
.... ...0 = (MT) Multi-Topology Routing: No
LS Type: AS-External-LSA (ASBR) (5)
Link State ID: 192.168.1.0
Advertising Router: 1.1.1.1
Sequence Number: 0x80000004
Checksum: 0x3e05
Length: 36
Netmask: 255.255.255.0
1... .... = External Type: Type 2 (metric is larger than any other link state path)
.000 0000 = TOS: 0
Metric: 16777215
Forwarding Address: 0.0.0.0
External Route Tag: 0Advertising Routerもシーケンス番号(0x80000004)も同じで、LS Age 3600とMetric 16777215の取り消し方もType 3と同じです。違うのは時刻です。
| LSAの種類 | エリア0 | エリア2 | 差 |
|---|---|---|---|
| Type 3 | 12:52:24.688 | 12:52:24.878 | 190ミリ秒 |
| Type 4 | 14:46:45.212 | 14:46:45.338 | 126ミリ秒 |
| Type 5 | 16:18:19.775 | 16:18:19.785 | 10ミリ秒 |
Type 3・4では、ABRが「自分のLSDBを再計算して、新しいLSAを作って、流す」という手順を踏むので一段ぶんの時間がかかります。Type 5にはその手順が無く、受け取ったLSAをそのまま隣へ流すだけなので、フラッディングの遅延しか乗りません。同じ検証を5回繰り返して、差はすべて5〜10ミリ秒でした。
「作り直される/されない」は、収束時間の差として実際に測れます。
Link State IDが衝突したら
Type 5のLink State IDは宛先のネットワーク番号で、マスクは本体のNetwork Maskにあります。ということは、10.90.0.0/16と10.90.0.0/24を両方再配布すると、Link State IDが同じ10.90.0.0になってしまいます。
LSAは「LS Type・Link State ID・Advertising Router」の3つ組で識別されるので、このままでは同じASBRが出した2つの経路が区別できません。RFC 2328のAppendix Eは、この場合ホストビットを立てて区別すると規定しています。実際にやってみました。
Routing Bit Set on this LSA
LS age: 192
Options: (No TOS-capability, DC)
LS Type: AS External Link
Link State ID: 10.90.0.0 (External Network Number)
Advertising Router: 1.1.1.1
LS Seq Number: 80000001
Checksum: 0xb2d
Length: 36
Network Mask: /16
Metric Type: 2 (Larger than any link state path)
TOS: 0
Metric: 20
Forward Address: 0.0.0.0
External Route Tag: 0
Routing Bit Set on this LSA
LS age: 192
Options: (No TOS-capability, DC)
LS Type: AS External Link
Link State ID: 10.90.0.255 (External Network Number)
Advertising Router: 1.1.1.1
LS Seq Number: 80000001
Checksum: 0xb2d
Length: 36
Network Mask: /24
Metric Type: 2 (Larger than any link state path)
TOS: 0
Metric: 20
Forward Address: 0.0.0.0
External Route Tag: 0| 再配布した経路 | Link State ID | Network Mask |
|---|---|---|
10.90.0.0/16 | 10.90.0.0 | /16 |
10.90.0.0/24 | 10.90.0.255 | /24 |
より細かいほう(/24)のLink State IDにホストビットが立ちました。 10.90.0.255という値は宛先そのものではなく、LSAを区別するための識別子として使われているだけです。宛先は本体のNetwork Mask: /24と組み合わせて10.90.0.0/24と正しく解釈されます。
パケットでも、2つのType 5が1つのLSUに入って流れているのが見えます。
Open Shortest Path First
OSPF Header
Version: 2
Message Type: LS Update (4)
Packet Length: 100
Source OSPF Router: 2.2.2.2
Area ID: 0.0.0.0 (Backbone)
Checksum: 0x89fd [correct]
Instance ID: Base IPv4 Unicast Instance (0)
Auth Type: Null (0)
Auth Data (none): 0000000000000000
LS Update Packet
Number of LSAs: 2
LSA-type 5 (AS-External-LSA (ASBR)), len 36
.000 0000 0000 0010 = LS Age (seconds): 2
0... .... .... .... = Do Not Age Flag: 0
Options: 0x20, (DC) Demand Circuits
0... .... = DN: Not set
.0.. .... = (O) Opaque: Not set
..1. .... = (DC) Demand Circuits: Supported
...0 .... = (L) LLS Data block: Not Present
.... 0... = (N) NSSA: Not supported
.... .0.. = (MC) Multicast: Not capable
.... ..0. = (E) External Routing: Not capable
.... ...0 = (MT) Multi-Topology Routing: No
LS Type: AS-External-LSA (ASBR) (5)
Link State ID: 10.90.0.0
Advertising Router: 1.1.1.1
Sequence Number: 0x80000001
Checksum: 0x0b2d
Length: 36
Netmask: 255.255.0.0
1... .... = External Type: Type 2 (metric is larger than any other link state path)
.000 0000 = TOS: 0
Metric: 20
Forwarding Address: 0.0.0.0
External Route Tag: 0
LSA-type 5 (AS-External-LSA (ASBR)), len 36
.000 0000 0000 0010 = LS Age (seconds): 2
0... .... .... .... = Do Not Age Flag: 0
Options: 0x20, (DC) Demand Circuits
0... .... = DN: Not set
.0.. .... = (O) Opaque: Not set
..1. .... = (DC) Demand Circuits: Supported
...0 .... = (L) LLS Data block: Not Present
.... 0... = (N) NSSA: Not supported
.... .0.. = (MC) Multicast: Not capable
.... ..0. = (E) External Routing: Not capable
.... ...0 = (MT) Multi-Topology Routing: No
LS Type: AS-External-LSA (ASBR) (5)
Link State ID: 10.90.0.255
Advertising Router: 1.1.1.1
Sequence Number: 0x80000001
Checksum: 0x0b2d
Length: 36
Netmask: 255.255.255.0
1... .... = External Type: Type 2 (metric is larger than any other link state path)
.000 0000 = TOS: 0
Metric: 20
Forwarding Address: 0.0.0.0
External Route Tag: 0Link State ID: 10.90.0.0 と Link State ID: 10.90.0.255 が並び、Netmask がそれぞれ 255.255.0.0 と 255.255.255.0 になっています。
実務では、集約経路とその構成要素を両方再配布したときにこれが起きます。 show ospf database externalで見慣れない.255や.15のようなLink State IDを見つけたら、「衝突を避けた結果」だと分かれば戸惑わずに済みます。
External Route Tag
Type 5には32ビットのタグを載せられます。OSPFはこの値を一切解釈せず、そのまま運ぶだけです。他プロトコルへ再び再配布するときのループ防止や、ポリシーの分岐に使われます。
R1でredistribute static tag 65001としたときの、エリア2での見え方です。
RP/0/RP0/CPU0:R11#show ospf database external
Wed Sep 9 07:12:46.096 UTC
OSPF Router with ID (11.11.11.11) (Process ID 1)
Type-5 AS External Link States
Routing Bit Set on this LSA
LS age: 206
Options: (No TOS-capability, DC)
LS Type: AS External Link
Link State ID: 192.168.1.0 (External Network Number)
Advertising Router: 1.1.1.1
LS Seq Number: 80000002
Checksum: 0x5bed
Length: 36
Network Mask: /24
Metric Type: 2 (Larger than any link state path)
TOS: 0
Metric: 20
Forward Address: 0.0.0.0
External Route Tag: 65001External Route Tag: 65001が、2つのエリアを越えてそのまま届いています。Advertising Routerも1.1.1.1のままです。
タグを付け外ししたときのシーケンス番号の動きも記録しました。
| STEP | 操作 | External Route Tag | LS Seq Number |
|---|---|---|---|
| 0 | 起動直後 | 0 | 80000001 |
| 3 | tag 65001を付ける | 65001 | 80000002 |
| 4 | タグを外す | 0 | 80000003 |
タグを変えただけでもLSAは作り直され、シーケンス番号が1つ進みます。タグはLSAの中身の一部なので当然ですが、運用でタグを付け替えるとAS全体にフラッディングが走る、ということでもあります。
STEPごとの結果
| STEP | 操作 | エリア2で観測したこと |
|---|---|---|
| 0 | 起動直後 | Type 5が5件。3エリアで全フィールドが一致 |
| 1 | 10.90.0.0/16と/24を再配布 | LSIDが10.90.0.0と10.90.0.255に分かれる |
| 2 | 元に戻す | 5件に戻る |
| 3 | tag 65001を付けて再配布 | タグ65001が全エリアに届く。Seqが+1 |
| 4 | タグを外す | タグ0に戻る。Seqがさらに+1 |
| 5 | 192.168.1.0/24の再配布を止める | 取り消しが全エリアほぼ同時(10ミリ秒) |
| 6 | 全復旧(最終状態) | 新しいLSAとして80000001から再開 |
STEP 6で注目したいのは、復旧後のシーケンス番号が80000001に戻っていることです。STEP 5で取り消したときにLSAはLSDBから削除されたので、作り直されたものはまったく新しいLSAとして扱われます。同じ宛先でも、いったん消えたら番号は1から始まります。
Type 5が届かない場所
AS全体に流れるType 5ですが、例外が2つあります。
| エリアの種類 | Type 5 | 代わりに |
|---|---|---|
| 通常エリア | 届く | — |
| スタブエリア | 入らない | ABRがType 3のデフォルトルートを出す |
| NSSA | 入らない | NSSA内のASBRはType 7を使う |
どちらも「外部経路の詳細を持たせない代わりにデフォルトルートで出す」という設計です。エリアを分けてもType 5だけはAS全体に配られてしまうため、それを止めたいときにスタブやNSSAを使う、という関係になっています。
まとめ
| 見たいもの | どこを見るか |
|---|---|
| どのASBRが出した経路か | Advertising Router(エリアをまたいでも変わらない) |
| E1かE2か | Metric Type |
| 見慣れないLink State IDの意味 | 衝突を避けてホストビットを立てた結果(Appendix E) |
| タグが付いているか | External Route Tag |
| 取り消されたか | LS Age 3600 または Metric 16777215 |
Type 3・4を読むときは「誰が、どこから測って言っているのか」を意識する必要がありました。Type 5はその心配がありません。 どのエリアで見ても発信元と値が同じなので、LSDBのどこで見ても同じものが見える——これがType 5のいちばんの特徴です。
参考
| 文書 | 節 | 内容 |
|---|---|---|
| RFC 2328 | Section 12.4.4 | Type 5の生成規則。AS全体にフラッディングされ、ABRで作り直されない |
| RFC 2328 | Appendix A.4.5 | Type 5のパケットフォーマット(Eビット、Forwarding Address、External Route Tag) |
| RFC 2328 | Appendix E | Link State IDが衝突する場合にホストビットを立てる規定 |
| RFC 2328 | Section 16.4 | Type 5の計算。ASBRまたはForwarding Addressへの到達性が必要 |
| RFC 2328 | Section 3.6 | スタブエリアにType 5が入らない規定 |
検証構成
CMLに7台のXRd(IOS XR 26.1.1)で組んだ3エリアのラボです(weight 120・160・170と同じラボを再起動して流用しました)。3エリアとも通常エリアなので、Type 5が全エリアに行き渡る様子を観察できます。キャプチャーはエリア0(R2 - R3)とエリア2(R3 - R11)の2か所で、取り消しの同時性を測るために同時に取りました。
エリア0(R2 - R3)のキャプチャーをダウンロード
エリア2(R3 - R11)のキャプチャーをダウンロード
検証Configおよびshow結果
各STEPで7台すべてから、次の3種類をルータごとに分けて取得しています。検証Configはこの..._run.txtです(最終状態はSTEP 6のもの)。
| ファイル | 内容 |
|---|---|
..._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 external self-originate / show ospf database external / show ospf database database-summary / show ospf border-routers / show ospf routes |
..._log.txt | そのSTEPの範囲だけに絞ったshow logging |
..._run.txt | そのSTEP時点のshow running-config(=そのSTEPの検証Config) |
show ospf database external self-originateはASBR自身でしか中身が出ません。Type 5を作れるのはASBRだけなので、この出力が空でないルータを探せばASBRが特定できます。
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:10.90.0.0/16と10.90.0.0/24を再配布(LSIDが衝突する)
| ルータ | 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:tag 65001を付けて再配布
| ルータ | 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:タグを外す
| ルータ | 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:192.168.1.0/24の再配布を止める
| ルータ | 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:全復旧(最終状態)
| ルータ | 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)