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

OSPFのRouter-LSA(Type 1)

目次

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 ID4バイトそのリンクの相手を識別する値。Typeによって意味が変わる
Link Data4バイト自分側の情報。Typeによってアドレスだったりマスクだったりする
Type1バイト1=point-to-point、2=Transit、3=Stub、4=仮想リンク
# TOS1バイトTOS別メトリックの数。現在の実装では常に0
metric2バイトそのリンクの送出コスト

Link IDとLink Dataは同じ4バイトの入れ物なのに、Typeごとに入るものが違います。ここがRouter-LSAを読むときの最初の関門です。

検証トポロジ

ルータエリアインタフェースネットワークタイプ
R11Lo0 1.1.1.1/32、Gi0/0/0/0 10.0.12.1/24point-to-point
R20 / 1Lo0 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のみブロードキャスト
R30 / 2Lo0 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のみブロードキャスト
R40 / 2Lo0 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
R112Lo0 11.11.11.11/32、Gi0/0/0/0 172.16.3.11/24、Gi0/0/0/1 10.1.11.11/24Gi0/0/0/1のみブロードキャスト
R122Lo0 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
R132Lo0 13.13.13.13/32、Gi0/0/0/0 10.1.11.13/24、Gi0/0/0/1 10.1.12.13/24Gi0/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本です。

R11 show ospf interface brief
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 IDLink Data
ループバックStub 1つそのループバックのIPアドレス255.255.255.255(ホストマスク)
point-to-pointで隣接がFULLPTPとStubの2つPTPは隣のルータID、Stubはサブネット番号PTPは自分のインタフェースアドレス、Stubはサブネットマスク
ブロードキャストで隣接がFULLTransit 1つDRのインタフェースアドレス自分のインタフェースアドレス
passiveや、隣接が1つもいないブロードキャストStub 1つサブネット番号サブネットマスク

実機で見ると、show ospf database router self-originate自分が出したRouter-LSAだけを表示してくれます。

R11 show ospf database router self-originate(STEP 0:起動直後)
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 IDLink Data
① StubLo0 11.11.11.11/3211.11.11.11(ループバックのアドレス)255.255.255.255
② PTPGi0/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(マスク)
④ TransitGi0/0/0/1 10.1.11.11/24(ブロードキャスト、DRはR13)10.1.11.13DRのアドレス、自分ではない)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のセグメント側)です。

No.97 R11のRouter-LSA(tshark -V)
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: 1
上のtshark出力のパケット(No.97 R11のRouter-LSA)のpcapをダウンロード

Type: 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起動直後800000044Stub 11.11.11.11 / PTP 3.3.3.3 / Stub 172.16.3.0 / Transit 10.1.11.13
1Gi0/0/0/1をcost 5800000054同上(Transitのメトリックだけ 1→5)
2コストを戻す800000064STEP 0と同じ
3Gi0/0/0/1をpassive enable800000074Stub / PTP / Stub / Stub 10.1.11.0
4passiveを外す800000084STEP 0と同じ
5R11 - R3をブロードキャストに8000000a3Stub / Transit 172.16.3.11 / Transit 10.1.11.13
6point-to-pointに戻す8000000c4STEP 0と同じ
7Gi0/0/0/0をshutdown8000000d2Stub 11.11.11.11 / Transit 10.1.11.13
8復旧してスタティックを再配布8000000f4STEP 0と同じ。フラグにEビット

シーケンス番号が飛んでいることに気づきます(800000098000000b8000000eが表に出てこない)。これは設定変更の途中でLSAが2回作り直されたためで、たとえばSTEP 5ではネットワークタイプを変えた瞬間に1回、DRが決まった瞬間にもう1回生成されています。シーケンス番号は「何回作り直したか」であって「何回設定を変えたか」ではありません

以下、変化が大きいものを順に見ていきます。

コストを変える — 動くのはメトリックだけ

cost 5を入れると、TransitエントリのTOS 0 Metricsだけが1から5になります。

R11 STEP 1:Gi0/0/0/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 Number8000000480000005)と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として広告すると規定しています。実機でもそのとおりになりました。

R11 STEP 3:Gi0/0/0/1をpassiveにした状態
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のままです

パケットでも同じものが見えます。

No.146 passive適用後のR11のRouter-LSA(tshark -V)
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
上のtshark出力のパケット(No.146 passive適用後のRouter-LSA)のpcapをダウンロード

このときセグメントの反対側でも同じことが起きます。R13から見るとGi0/0/0/0の隣接が0になるので、R13のRouter-LSAでもこのセグメントはStubになります。さらに、

R13 STEP 3:Network-LSAが1つも無い
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つになります。

R11 STEP 5:R11 - R3をブロードキャストにした状態
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: 1

Number 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だからです。

R11 STEP 5:Gi0/0/0/0がDRになっている
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を生成します

No.300 R11が新しく出したNetwork-LSA(tshark -V)
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
上のtshark出力のパケット(No.300 R11が出したNetwork-LSA)のpcapをダウンロード

つまりネットワークタイプを1行変えただけで、Router-LSAのエントリが1つ減り、代わりにLSAが1つ増えます。エリア内のLSAの総数は増えるのに、Router-LSAは短くなる、という交換になっています。ネットワークタイプそのものはOSPF ネットワークタイプ、DRの選び方はDRとBDRで扱っています。

Router-LSAの側も、パケットで見るとTransitが2つ並んでいるのが分かります。

No.302 ブロードキャスト化後のR11のRouter-LSA(tshark -V)
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
上のtshark出力のパケット(No.302 ブロードキャスト化後のRouter-LSA)のpcapをダウンロード

インタフェースを落とす — エントリが2つ消え、相手側はStubだけになる

Gi0/0/0/0をshutdownすると、そのインタフェースが作っていたPTPとStubの2つのエントリがまとめて消えます

R11 STEP 7:Gi0/0/0/0をshutdownした状態
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: 1

Number of Linksが2になりました。RFC 2328のSection 12.4.1は、インタフェースの状態がDownならリンクを1つも追加しないと規定しています。

一方、R3側のインタフェースはshutdownしていないので上がったままです。それでもR3のエリア2のRouter-LSAはこうなります。

R3 STEP 7:エリア2のRouter-LSA(R3側は落としていない)
		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: 1

PTPエントリが消えて、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にスタティックの再配布を入れます。

R11 STEP 8:スタティックを再配布した状態(最終状態)
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: 1

Number of Linksの手前にAS Boundary Routerの行が増えました。リンクのエントリはSTEP 0とまったく同じで、変わったのはフラグの1ビットだけです。パケットではFlags: 0x02として見えます。

No.474 ASBRになったR11のRouter-LSA(tshark -V)
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
上のtshark出力のパケット(No.474 ASBRになったRouter-LSA)のpcapをダウンロード

フラグの意味

Router-LSAのフラグは3ビットで、そのルータが境界にいるかどうかを表します。

ビット名前意味
VVirtual link endpointそのルータが仮想リンクの終端になっている(このラボでは未使用)
EExternalそのルータがASBRである。外部経路を再配布している
BBorderそのルータがABRである。2つ以上のエリアに足がある

ラボの起動直後の分布は次のとおりです。

ルータ実機の表示立っているビット理由
R1AS Boundary RouterEスタティックを再配布しているASBR
R2Area Border RouterBエリア0とエリア1の両方に足がある
R3・R4Area Border RouterAS Boundary RouterB・EABRであることに加え、NSSAのType 7をType 5に変換する立場なのでEビットも立つ(RFC 3101のSection 3.1)
R11・R12表示なしなしエリア2の内部ルータ
R13AS Boundary RouterENSSAの中で再配布している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つです。

  1. 辺は双方向で確認する。 相手のRouter-LSAに自分を指すエントリが無ければ、その辺は使わない(RFC 2328のSection 16.1)
  2. ネットワークからルータへ戻る辺のコストは0。 そのため、ブロードキャストのセグメントを1本渡るコストは片側分だけになる
  3. 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コストです。

R11 show ospf routes(エリア内の経路=Oの行)
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/24R11 → セグメント 1metric 1
172.16.3.0/24R11のStubエントリ 1metric 1
13.13.13.13/32R11 → セグメント 1 + セグメント → R13 0 + R13のStub 1metric 2
12.12.12.12/32R11 → セグメント 1 + セグメント → R13 0 + R13 → R12 1 + R12のStub 1metric 3

手で足した値と一致しました。ネットワークからルータへ戻る辺が0コストなので、ブロードキャストのセグメントを1本渡るコストは片側分の1だけになります。

なお3.3.3.3/3210.0.23.0/24O IAになっているのは、R3のLo0やエリア0のセグメントが別のエリアにあり、Router-LSAではなくType 3で届いているためです。Router-LSAから組み立てられるのは、あくまで自分と同じエリアの中だけです。

参考

文書内容
RFC 2328Section 12.4.1Router-LSAの生成規則。インタフェースの種類ごとのLink IDとLink Data
RFC 2328Section 12.4.1.1point-to-pointがPTPとStubの2エントリになる規定。unnumberedではLink DataがMIBのifIndexになる
RFC 2328Section 12.4.1.2ブロードキャストで完全隣接が無いときStubとして広告する規定
RFC 2328Section 12.4.1.4ループバックを255.255.255.255のStubとして広告する規定
RFC 2328Section 12.4.2Network-LSAの生成規則(完全隣接が無いDRは生成しない)
RFC 2328Section 16.1SPF計算。双方向の確認と、ネットワークからルータへの辺が0コストである規定
RFC 2328Appendix A.4.2Router-LSAのパケットフォーマット、V/E/Bビット
RFC 3101Section 3.1NSSAの翻訳者となる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.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 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出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R11showlogrun
R12showlogrun
R13showlogrun

STEP 1:R11 Gi0/0/0/1にcost 5

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R11showlogrun
R12showlogrun
R13showlogrun

STEP 2:コストを元に戻す

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R11showlogrun
R12showlogrun
R13showlogrun

STEP 3:R11 Gi0/0/0/1をpassive enable

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R11showlogrun
R12showlogrun
R13showlogrun

STEP 4:passiveを外す

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R11showlogrun
R12showlogrun
R13showlogrun

STEP 5:R11 - R3をブロードキャストに変更(R3側も)

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R11showlogrun
R12showlogrun
R13showlogrun

STEP 6:point-to-pointに戻す

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R11showlogrun
R12showlogrun
R13showlogrun

STEP 7:R11 Gi0/0/0/0をshutdown

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R11showlogrun
R12showlogrun
R13showlogrun

STEP 8:Gi0/0/0/0を復旧し、R11でスタティックを再配布(最終状態)

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
R11showlogrun
R12showlogrun
R13showlogrun

関連記事