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

DISと疑似ノード(Pseudonode)

目次

DISと疑似ノード(Pseudonode)

ブロードキャストのセグメントに複数のルータがつながっているとき、IS-ISはその中から代表を1台選びます。これがDIS(Designated Intermediate System)です。OSPFのDRに相当する役割ですが、似ているのは名前と「代表を選ぶ」という発想だけで、中身はかなり違います。

DISが担う仕事の中心は、疑似ノード(Pseudonode)というLSDB上の架空のノードを代表して作ることです。本記事では、疑似ノードが何を解決しているのか、DISがどう選ばれるのか、そしてOSPFのDRとどこが違うのかを、実機で確かめながら見ていきます。

LAN IIHに載るPriorityLAN IDというフィールドの位置づけはIS-ISパケットの種類とヘッダーフォーマットで解説しています。本記事では、それらを使ってDISがどう決まり、疑似ノードがどう作られるのかを扱います。

疑似ノードは何のためにあるのか

ブロードキャストのセグメントは、そこにいる全員が互いに直接届く場所です。これを素直にリンクステートで表現すると、n台のルータがフルメッシュでつながっていることになり、リンクの数は n(n−1)/2 本になります。4台なら6本、10台なら45本です。台数が増えると急激に膨らみます。

ISO/IEC 10589:2002の3.6.7は、これを避けるためにセグメントそのものを1つのノードとみなすと定めています。

ブロードキャストサブネットワークにn台の中間システムが接続されているとき、そのブロードキャストサブネットワーク自体が疑似ノードとみなされる。疑似ノードはn台のそれぞれにリンクを持ち、各ISは(他のIS全部への n−1 本ではなく)疑似ノードへの1本のリンクだけを持つ。

リンクの数が n(n−1)/2 から n本 に減ります。そして同規格7.2.3が、各ルータは疑似ノードへのリンクだけを報告し、疑似ノード自身のLSPはDISが代表して作ると定めています。

DISの本質的な仕事はこれです。「代表して喋る」のではなく、「LANという架空のノードのLSPを代筆する」役割だと捉えると、後の動作が理解しやすくなります。

疑似ノードLSPのメトリックは0

疑似ノードを導入すると、経路のコストを二重に数えてしまう危険が生まれます。R2からR3へ行くのに「R2→疑似ノード」と「疑似ノード→R3」の2本を通ることになるからです。

ISO/IEC 10589:2002はこれを、疑似ノードのLSPに載せるメトリックをすべて0にすることで解決しています。同規格7.2.3の脚注が理由を明記しています。

疑似ノードへのリンクによって既にメトリックが割り当てられているため、これらは0の値に設定される。疑似ノードLSPに0以外のメトリックを割り当てると、実際の値を倍にする効果を持つ。

つまりコストを払うのは「ルータ→疑似ノード」の向きだけで、「疑似ノード→ルータ」は無料です。この非対称な作りによって、ブロードキャストのセグメントを1ホップとして正しく数えられます。

DISの選出

選出規則はISO/IEC 10589:2002の8.4.5にあり、非常に短いものです。

LAN Designated Intermediate SystemはLAN上の特定の集合の中で優先度がもっとも高い中間システムであり、同点の場合は数値としてもっとも大きいMAC送信元SNPAアドレスによって決着する。

順序条件
1優先度がもっとも高いIS。IOS XRの既定値は64で、0127の範囲で設定できる
2同点ならSNPA(MACアドレス)が数値としてもっとも大きいIS

加えて同規格は、Upの隣接が1つ以上あるまでは自分をDISと宣言してはならないとも定めています。受信できない故障を抱えた機器が、誰の声も聞こえないまま自分をDISだと思い込むのを防ぐための規定です。

レベル1とレベル2でDISは別々に選ばれます。同じLANの上で、レベル1のDISとレベル2のDISが別のルータになることがあり、その場合は疑似ノードも2つ立ちます。

OSPFのDRとの違い

名前は似ていますが、実際の設計はかなり違います。この3点を押さえておくと混乱しません。

観点OSPFのDRIS-ISのDIS
バックアップBDRがいる。DR障害時に即座に昇格する存在しない。ISO/IEC 10589にバックアップDISという概念は無く、落ちたらその場で選び直す
優先度を上げたとき奪わない(非プリエンプティブ)。既存のDRが残る奪う(プリエンプティブ)。8.4.5が「より優先度の高い中間システムがその機能を引き継いだため」辞任すると明記している
隣接の張り方DR / BDRとだけ完全な隣接になる全員と隣接を張る。畳んでいるのはLSDBの表現だけで、隣接そのものは減らさない

3つ目は誤解されやすいところです。疑似ノードはあくまでLSDB上の表現であって、IIHのやり取りや隣接の数を減らすものではありません。実機でも、4台のLANでは各ルータが3つの隣接を持ちます。

再選出が速いのは、IIHを送受信するたびに選出をやり直す(8.4.5)ためです。バックアップを事前に決めておく必要がないので、BDRのような仕組みが要りません。

実機での検証

検証環境

4台のルータを1つのブロードキャストセグメント10.1.0.0/24)に接続しました。全台が同じエリア49.0001level-1-2、LAN側インタフェースにpoint-to-pointは書いていません。

ルータNETSNPA(MACアドレス)
R149.0001.0010.0100.1001.005254.00a3.a6fa
R249.0001.0020.0200.2002.005254.0075.d9dc
R349.0001.0030.0300.3003.005254.003a.d413
R449.0001.0040.0400.4004.005254.0089.cc01

優先度は全台が既定の64なので、SNPAがもっとも大きいR1がDISになるはずです。

検証のSTEP

STEP操作狙い
0初期状態DISの選出結果と疑似ノードLSPの中身
1R3の優先度を100にするプリエンプション。MACが最小のR3がDISを奪えるか
2R2の優先度をレベル2だけ110にするレベル別のDIS。同じLANに疑似ノードが2つ立つか
3R3のLANインタフェースをshutdown再選出。バックアップが無いことの確認
4優先度とshutdownを元に戻す(最終状態)初期状態と同じ

検証にはIOS XRの2つのコマンドが役立ちました。

コマンド見えるもの
show isis trace all | include ELECTDIS_RUN_ELECTION / DIS_TRIGGER_ELECTION / DIS_ELECTION_RESULT_*選出そのもの
show isis trace all | include PSEUDOLOCAL_PSEUDO_BUILD_STARTLOCAL_PSEUDO_NARROW_LINK_ADDLOCAL_PSEUDO_BUILD_END疑似ノードLSPを組み立てる過程

show isis traceは重大度(all / detailed / only / severe / standard)で選ぶ形式で、allは4000行近くになるため装置側で| includeを付けて絞ります。なお| include DISは配布処理のDIST_に当たってしまうので使えません。

初期状態のDIS(STEP 0)

STEP 0:R1の show isis interface GigabitEthernet0/0/0/0(抜粋)
  Level-1                   
    Adjacency Count:        3
    Adjacency Flaps:        0
    LAN ID:                 R1.01
    Priority (Local/DIS):   64/64
    Next LAN IIH in:        1 s
    LSP Pacing Interval:    33 ms
    PSNP Entry Queue Size:  0
    Hello Interval:         10 s
    Hello Multiplier:       3
  Level-2                   
    Adjacency Count:        3
    Adjacency Flaps:        0
    LAN ID:                 R1.01
    Priority (Local/DIS):   64/64

LAN ID: R1.01がレベル1・レベル2とも同じで、R1が両レベルのDISになりました。優先度は全台64なので、SNPAがもっとも大きいR1が勝ったことになります。Priority (Local/DIS): 64/64は「自分の優先度/DISの優先度」で、どちらも64です。

Adjacency Count: 3にも注目してください。疑似ノードを使っていても隣接の数は減りません。4台のLANなので、各ルータは残り3台すべてと隣接を張っています。

疑似ノードLSPの中身

STEP 0:R1の show isis database detail(抜粋)
R1.01-00              0x00000008   0xb492        636  /*            0/0/0
  Metric: 0          IS R4.00
  Metric: 0          IS R3.00
  Metric: 0          IS R2.00
  Metric: 0          IS R1.00
R2.00-00              0x00000006   0x8090        619  /1200         0/0/0
  Area Address:   49.0001
  LSP MTU:        1492
  NLPID:          0xcc
  IP Address:     2.2.2.2
  Hostname:       R2
  Metric: 0          IP 2.2.2.2/32
  Metric: 10         IP 10.1.0.0/24
  Metric: 10         IS R1.01

前半が疑似ノードLSPR1.01-00です。LAN上の4台すべてを列挙していますが、メトリックはすべて0です。

後半はR2自身のLSPで、IS(中間システム)への参照はMetric: 10 IS R1.011行しかありません。R3やR4への直接のリンクは書かれていません。各ルータは疑似ノードへの1本だけを報告するという7.2.3の規定がそのまま出ています。

この2つを合わせると、R2からR3へのコストは 10(R2→疑似ノード)+ 0(疑似ノード→R3)= 10 になります。もし疑似ノードLSPのメトリックが10だったら20になり、実際の2倍を数えてしまう — 規格の脚注が言っているとおりです。

優先度でDISを奪う(STEP 1)

R3の優先度を100に上げます。R3は4台の中でもっともSNPAが小さいルータなので、優先度だけでDISを奪えるかどうかがはっきり分かります。

STEP 1:R3に投入した設定
router isis 1
 interface GigabitEthernet0/0/0/0
  priority 100
STEP 1:R1の show isis database(Level-1)
IS-IS 1 (Level-1) Link State Database
LSPID                 LSP Seq Num  LSP Checksum  LSP Holdtime/Rcvd  ATT/P/OL
R1.00-00            * 0x00000007   0x24d2        1100 /*            0/0/0
R1.01-00              0x00000009   0x9aef        0 (1099)/*         0/0/0
R2.00-00              0x00000008   0xa228        1100 /1200         0/0/0
R3.00-00              0x00000007   0x257b        1099 /1200         0/0/0
R3.01-00              0x00000001   0x60a9        1099 /1200         0/0/0
R4.00-00              0x00000008   0xa3d0        1100 /1200         0/0/0

旧DISの疑似ノードLSPR1.01-00Holdtime0、つまりパージされています。代わりにR3.01-00シーケンス番号0x00000001、すなわち生まれたばかりの状態で現れました。

これはISO/IEC 10589:2002の7.2.3が定める動作です。

中間システムがDIS を辞任するとき、その疑似ノードLSPのRemaining Lifetimeをゼロに設定してネットワーク全体のパージを開始しなければならない。

優先度が最小のMACを覆したこと、そしてDISの交代が疑似ノードLSPの作り直しを伴うことの両方が、この1画面で確認できます。

キャプチャで見る交代

STEP 1:R2–SW間のキャプチャに現れたLSP(抜粋)
  No type   LSP-ID                    life seq
  23 L1 LSP 0010.0100.1001.01-00         0 0x00000008
  24 L2 LSP 0010.0100.1001.01-00         0 0x00000008
  ...
  41 L1 LSP 0030.0300.3003.01-00      1200 0x00000001
  43 L2 LSP 0030.0300.3003.01-00      1199 0x00000001

0010.0100.1001.01-00がR1.01、0030.0300.3003.01-00がR3.01です。旧DISの疑似ノードがlife=0でパージされ、新DISの疑似ノードがseq=1で生まれるという流れがそのまま流れています。

プリエンプション時(STEP 1)のキャプチャー(isis-dis-preempt.pcap) をダウンロード

ルータ自身が選出をやり直している

STEP 1:R1の show isis trace all | include ELECT(抜粋)
Sep  9 06:51:42.059 isis/1/det ... isis_dis_run_election:778      DIS_ELECTION_RESULT_DIS_EXISTS L1 Gi0/0/0/0
Sep  9 06:51:42.059 isis/1/det ... isis_dis_run_election:778      DIS_ELECTION_RESULT_DIS_EXISTS L2 Gi0/0/0/0
Sep  9 06:51:43.049 isis/1/det ... isis_dis_trigger_election:964  DIS_TRIGGER_ELECTION L1 Gi0/0/0/0 0030.0300.3003
Sep  9 06:51:43.049 isis/1/det ... isis_dis_trigger_election:964  DIS_TRIGGER_ELECTION L2 Gi0/0/0/0 0030.0300.3003

DIS_TRIGGER_ELECTIONの末尾に0030.0300.3003(R3)が入っています。R3のIIHを受け取ったことが引き金になって、R1が選出をやり直したという記録です。R3でcommitしたのが06:51:41なので、わずか2秒後に反応しています。

新DISとなったR3側には、疑似ノードLSPを組み立てる過程が残っていました。

STEP 1:R3の show isis trace all | include PSEUDO(抜粋)
Sep  9 06:51:42.103 isis/1/lsp ... LOCAL_PSEUDO_BUILD_START L1 Gi0/0/0/0 Node Num: 1
Sep  9 06:51:42.103 isis/1/std ... LOCAL_PSEUDO_NARROW_LINK_ADD L1 Gi0/0/0/0 Node Num: 1 0030.0300.3003.00
Sep  9 06:51:42.103 isis/1/std ... LOCAL_PSEUDO_NARROW_LINK_ADD L1 Gi0/0/0/0 Node Num: 1 0010.0100.1001.00
Sep  9 06:51:42.103 isis/1/std ... LOCAL_PSEUDO_NARROW_LINK_ADD L1 Gi0/0/0/0 Node Num: 1 0020.0200.2002.00
Sep  9 06:51:42.103 isis/1/std ... LOCAL_PSEUDO_NARROW_LINK_ADD L1 Gi0/0/0/0 Node Num: 1 0040.0400.4004.00
Sep  9 06:51:42.103 isis/1/lsp ... LOCAL_PSEUDO_BUILD_END L1 Gi0/0/0/0 Node Num: 1 1

BUILD_STARTのあとにNARROW_LINK_ADD4回(自分を含むLAN上の4台)並び、BUILD_ENDで締めています。疑似ノードLSPが「LAN上の全員へのリンク」として組み立てられていく様子が、そのまま記録されています。

レベルごとに別のDIS(STEP 2)

IOS XRでは優先度をレベル別に設定できます。R2のレベル2だけを110に上げます。

STEP 2:R2に投入した設定
router isis 1
 interface GigabitEthernet0/0/0/0
  priority 110 level 2
STEP 2:R1の show isis interface GigabitEthernet0/0/0/0(抜粋)
  Level-1                   
    Adjacency Count:        3
    Adjacency Flaps:        0
    LAN ID:                 R3.01
    Priority (Local/DIS):   64/100
  Level-2                   
    Adjacency Count:        3
    Adjacency Flaps:        0
    LAN ID:                 R2.01
    Priority (Local/DIS):   64/110

レベル1のDISはR3(優先度100)、レベル2のDISはR2(優先度110)に分かれましたPriority (Local/DIS)の右側が、それぞれのレベルのDISの優先度を示しています。

LSDBを見ると、同じLANに疑似ノードが2つ立っていることが分かります。

STEP 2:R1の show isis database
IS-IS 1 (Level-1) Link State Database
LSPID                 LSP Seq Num  LSP Checksum  LSP Holdtime/Rcvd  ATT/P/OL
R1.00-00            * 0x00000007   0x24d2        839  /*            0/0/0
R1.01-00              0x00000009   0x9aef        0 (838)/*          0/0/0
R2.00-00              0x00000008   0xa228        839  /1200         0/0/0
R3.00-00              0x00000007   0x257b        838  /1200         0/0/0
R3.01-00              0x00000001   0x60a9        838  /1200         0/0/0
R4.00-00              0x00000008   0xa3d0        839  /1200         0/0/0

 Total Level-1 LSP count: 6     Local Level-1 LSP count: 1

IS-IS 1 (Level-2) Link State Database
LSPID                 LSP Seq Num  LSP Checksum  LSP Holdtime/Rcvd  ATT/P/OL
R1.00-00            * 0x0000000f   0xfa2b        1097 /*            0/0/0
R1.01-00              0x00000009   0x9aef        0 (838)/*          0/0/0
R2.00-00              0x0000000f   0x807e        1096 /1200         0/0/0
R2.01-00              0x00000001   0xd556        1096 /1200         0/0/0
R3.00-00              0x0000000d   0x0acf        1097 /1200         0/0/0
R4.00-00              0x0000000e   0x8d24        1097 /1200         0/0/0

レベル1のLSDBにはR3.01-00、レベル2のLSDBにはR2.01-00があります。物理的には1本のLANなのに、レベルごとに違う疑似ノードで表現されているわけです。レベル1とレベル2でLSDBが完全に分かれていることの、分かりやすい現れ方でもあります(レベルの仕組みはレベル1とレベル2で解説しています)。

なお、レベル2のLSDBからR3.01-00は消えています。R3はレベル2のDISでなくなったので、レベル2の疑似ノードLSPだけをパージしました。辞任は「レベルごと」に起こります。

レベル別DISへの分割時(STEP 2)のキャプチャー(isis-dis-level.pcap) をダウンロード

DISが落ちたとき(STEP 3)

レベル1のDISであるR3のLANインタフェースを落とします。

STEP 3:R3に投入した設定
interface GigabitEthernet0/0/0/0
 shutdown
STEP 3:R1の show isis interface GigabitEthernet0/0/0/0(抜粋)
  Level-1                   
    Adjacency Count:        2
    LAN ID:                 R1.01
    Priority (Local/DIS):   64/64
  Level-2                   
    Adjacency Count:        2
    LAN ID:                 R2.01
    Priority (Local/DIS):   64/110

レベル1のDISはR1に移りました。残ったR1・R2・R4はいずれも優先度64(R2の110はレベル2だけの設定)なので、SNPAがもっとも大きいR1が選ばれています。レベル2のDISはR2のままで、影響を受けていません。

STEP 3:R1の show isis database(Level-1)
IS-IS 1 (Level-1) Link State Database
LSPID                 LSP Seq Num  LSP Checksum  LSP Holdtime/Rcvd  ATT/P/OL
R1.00-00            * 0x00000008   0xfb3e        1092 /*            0/0/0
R1.01-00              0x0000000a   0xe651        1092 /*            0/0/0
R2.00-00              0x0000000a   0x7894        1093 /1200         0/0/0
R3.00-00              0x00000007   0x257b        594  /1200         0/0/0
R3.01-00              0x00000001   0xe16c        0 (1092)/*         0/0/0
R4.00-00              0x0000000a   0x793d        1093 /1200         0/0/0

R3.01-00がパージされ、R1.01-00が復活しています。

ここで確認したかったのは、バックアップが用意されていなかったことです。OSPFならBDRが事前に決まっていて即座に昇格しますが、IS-ISにはその仕組みがありません。R3がいなくなったあと、残った3台がその場で選出をやり直してR1に決まりました。IIHを送受信するたびに選出を走らせる設計なので、事前に予備を決めておく必要がないわけです。

隣接が落ちたことはログにも残ります。

STEP 3:R1の show isis adjacency-log(Level 1、末尾)
07:00:00.552  R3              Gi0/0/0/0          u -> d  Holdtime expired
                                                         IPv4 Unicast Down

STEP 4で優先度とshutdownを元に戻し、DISはR1(両レベル)に戻って初期状態と同じになりました。

再選出時(STEP 3)のキャプチャー(isis-dis-reelect.pcap) をダウンロード

検証Configおよびshow結果

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

ファイル内容
..._show.txtshow version / show interface description / show route / show route isis / show isis / show isis hostname / show isis interface / show isis interface brief / show isis neighbors / show isis neighbors detail / show isis database / show isis database detail / show isis topology / show isis adjacency / show isis adjacency detail / show isis adjacency-log / show isis trace all | include ELECT / show isis trace all | include PSEUDO / show isis spf-log / show isis lsp-log / show isis statistics / show cef
..._log.txtそのSTEPの範囲だけに絞ったshow logging(STEP 0のみ起動時からの全履歴)
..._run.txtそのSTEP時点のshow running-config(=そのSTEPの検証Config)

最終状態のConfigは、4台とも優先度を設定していない(既定の64)状態です。STEP 1・2で入れたpriorityとSTEP 3のshutdownは、STEP 4ですべて外してあります。

STEP 0:初期状態

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

STEP 1:R3の優先度を100にする

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

STEP 2:R2の優先度をレベル2だけ110にする

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

STEP 3:R3のLANインタフェースをshutdown

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

STEP 4:優先度とshutdownを元に戻す(最終状態)

ルータshow出力syslogrunning-config
R1showlogrun
R2showlogrun
R3showlogrun
R4showlogrun
キャプチャーファイルは次の3本です。

プリエンプション時(STEP 1)のキャプチャー(isis-dis-preempt.pcap) をダウンロード

レベル別DISへの分割時(STEP 2)のキャプチャー(isis-dis-level.pcap) をダウンロード

再選出時(STEP 3)のキャプチャー(isis-dis-reelect.pcap) をダウンロード

参考

標準タイトル概要
ISO/IEC 10589:2002(第2版)Intermediate System to Intermediate System intra-domain routeing information exchange protocolIS-IS本体の仕様。本記事が参照したのは、DISと疑似ノードを定義する3.6.6 / 3.6.7、疑似ノードの扱いとメトリック0を定める7.2.3、疑似ノードLSPの生成を定める7.3.8、LSPのパージを定める7.3.16.4、DISの選出を定める8.4.5、LAN IIHのPriorityLAN IDを定義する9.5 / 9.6、管理パラメータの既定値を定める11.3
RFC 1142OSI IS-IS Intra-domain Routing ProtocolISO 10589のDraft Proposal(1990年)を再公開したもの。現在はHistoric。ISO/IEC 10589の代わりに参照してはいけません(RFC 7142)。
RFC 7142Reclassification of RFC 1142 to Historic参照すべきはISO/IEC 10589:2002 第2版であることを述べている。
RFC 1195Use of OSI IS-IS for Routing in TCP/IP and Dual EnvironmentsIPの経路を運ぶための拡張。

関連記事