IS-ISのDISと疑似ノード(Pseudonode)
ブロードキャストのセグメントでは代表を1台選びます。これがDIS(Designated Intermediate System)です。OSPFのDRに相当しますが、似ているのは「代表を選ぶ」という発想だけです。
DISの中心の仕事は、疑似ノード(Pseudonode)というLSDB上の架空のノードを代表して作ることです。疑似ノードの目的、DISの選出、OSPFのDRとの違いを実機で確かめます。
LAN IIHのPriorityとLAN IDのフィールドはIS-ISパケットの種類とヘッダーフォーマットで解説しています。
疑似ノードは何のためにあるのか
ブロードキャストのセグメントを素直に表現するとn台のフルメッシュになり、リンク数は n(n−1)/2 本です。10台なら45本で、台数とともに急増します。
ISO/IEC 10589:2002の3.6.7はセグメントそのものを1つのノードとみなすと定めています。
ブロードキャストサブネットワークにn台の中間システムが接続されているとき、そのブロードキャストサブネットワーク自体が疑似ノードとみなされる。疑似ノードはn台のそれぞれにリンクを持ち、各ISは(他のIS全部への n−1 本ではなく)疑似ノードへの1本のリンクだけを持つ。
リンクはn本に減ります。7.2.3は各ルータは疑似ノードへのリンクだけを報告し、疑似ノードのLSPはDISが代表して作ると定めています。
DISの本質はこれです。「LANという架空のノードのLSPを代筆する」役割です。
疑似ノードLSPのメトリックは0
疑似ノードを通ると「R2→疑似ノード」と「疑似ノード→R3」の2本を通るため、コストを二重に数える危険があります。
規格は疑似ノード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で、0〜127の範囲で設定できる |
| 2 | 同点ならSNPA(MACアドレス)が数値としてもっとも大きいIS |
同規格はUpの隣接が1つ以上あるまでは自分をDISと宣言してはならないとも定めています。受信できない機器が自分をDISだと思い込むのを防ぐためです。
DISはレベルごとに別々に選ばれます。別のルータになれば疑似ノードも2つ立ちます。
OSPFのDRとの違い
設計は次の3点で違います。
| 観点 | OSPFのDR | IS-ISのDIS |
|---|---|---|
| バックアップ | BDRがいる。DR障害時に即座に昇格する | 存在しない。ISO/IEC 10589にバックアップDISという概念は無く、落ちたらその場で選び直す |
| 優先度を上げたとき | 奪わない(非プリエンプティブ)。既存のDRが残る | 奪う(プリエンプティブ)。7.2.3が「より優先度の高い中間システムがその機能を引き継いだため」辞任すると明記している |
| 隣接の張り方 | DR / BDRとだけ完全な隣接になる | 全員と隣接を張る。畳んでいるのはLSDBの表現だけで、隣接そのものは減らさない |
疑似ノードはLSDB上の表現であって、隣接の数を減らすものではありません。4台のLANでは各ルータが3つの隣接を持ちます。
IIHを送受信するたびに選出をやり直す(8.4.5)ので、BDRのような仕組みが要りません。
実機での検証
検証環境
4台を1つのブロードキャストセグメント(10.1.0.0/24)に接続します。全台が同じエリア49.0001でlevel-1-2、point-to-pointは書きません。
| ルータ | NET | SNPA(MACアドレス) |
|---|---|---|
| R1 | 49.0001.0010.0100.1001.00 | 5254.00a3.a6fa |
| R2 | 49.0001.0020.0200.2002.00 | 5254.0075.d9dc |
| R3 | 49.0001.0030.0300.3003.00 | 5254.003a.d413 |
| R4 | 49.0001.0040.0400.4004.00 | 5254.0089.cc01 |
優先度は全台64なので、SNPAが最大のR1がDISになります。
検証のSTEP
| STEP | 操作 | 狙い |
|---|---|---|
| 0 | 初期状態 | DISの選出結果と疑似ノードLSPの中身 |
| 1 | R3の優先度を100にする | プリエンプション。MACが最小のR3がDISを奪えるか |
| 2 | R2の優先度をレベル2だけ110にする | レベル別のDIS。同じLANに疑似ノードが2つ立つか |
| 3 | R3のLANインタフェースをshutdown | 再選出。バックアップが無いことの確認 |
| 4 | 優先度とshutdownを元に戻す(最終状態) | 初期状態と同じ |
IOS XRの次の2つのコマンドを使います。
| コマンド | 見えるもの |
|---|---|
show isis trace all | include ELECT | DIS_RUN_ELECTION / DIS_TRIGGER_ELECTION / DIS_ELECTION_RESULT_*。選出そのもの |
show isis trace all | include PSEUDO | LOCAL_PSEUDO_BUILD_START → LOCAL_PSEUDO_NARROW_LINK_ADD → LOCAL_PSEUDO_BUILD_END。疑似ノードLSPを組み立てる過程 |
show isis traceは重大度で選び、allは4000行近いので| includeで絞ります(| include DISはDIST_に当たるので使えません)。
初期状態のDIS(STEP 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/64LAN ID: R1.01が両レベルとも同じで、R1が両レベルのDISです。Priority (Local/DIS): 64/64は「自分の優先度/DISの優先度」です。
Adjacency Count: 3のとおり、疑似ノードがあっても隣接の数は減りません。
疑似ノードLSPの中身
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で、4台すべてを列挙し、メトリックはすべて0です。
後半のR2自身のLSPには、ISへの参照がMetric: 10 IS R1.01の1行しかありません。7.2.3の「疑似ノードへの1本だけを報告する」がそのまま出ています。
R2からR3へのコストは 10 + 0 = 10 です。疑似ノードLSPのメトリックが10なら20になり、2倍を数えてしまいます。
優先度でDISを奪う(STEP 1)
R3の優先度を100に上げます。R3はSNPAが最小なので、優先度だけでDISを奪えるかがはっきりします。
router isis 1
interface GigabitEthernet0/0/0/0
priority 100IS-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-00はHoldtimeが0(パージ)で、R3.01-00がシーケンス番号0x00000001で、生まれたばかりの状態で現れます。
これはISO/IEC 10589:2002の7.2.3が定める動作です。
中間システムがDIS を辞任するとき、その疑似ノードLSPのRemaining Lifetimeをゼロに設定してネットワーク全体のパージを開始しなければならない。
優先度が最小のMACを覆したことと、交代が疑似ノード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旧DISの疑似ノード0010.0100.1001.01-00がlife=0でパージされ、新DISの0030.0300.3003.01-00がseq=1で生まれています。
traceに残る再選出
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.3003DIS_TRIGGER_ELECTIONの末尾の0030.0300.3003(R3)は、R3のIIHを引き金にR1が選出をやり直した記録です。R3のcommit(06:51:41)の2秒後です。
新DISのR3側には疑似ノードLSPを組み立てる過程が残っています。
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 1NARROW_LINK_ADDが4回(LAN上の4台)並び、疑似ノードLSPが「全員へのリンク」として組み立てられる様子が記録されています。
レベルごとに別のDIS(STEP 2)
優先度はレベル別に設定できます。R2のレベル2だけを110に上げます。
router isis 1
interface GigabitEthernet0/0/0/0
priority 110 level 2 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)に分かれます。
同じLANに疑似ノードが2つ立ちます。
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にはR3.01-00、レベル2にはR2.01-00があり、1本のLANがレベルごとに違う疑似ノードで表現されます(IS-ISのレベル1とレベル2)。
レベル2のR3.01-00は消えています。辞任はレベルごとに起こります。
DISが落ちたとき(STEP 3)
レベル1のDISであるR3のLANインタフェースを落とします。
interface GigabitEthernet0/0/0/0
shutdown 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に移ります。残る3台はレベル1の優先度が64なので、SNPA最大のR1です。レベル2のDISはR2のままです。
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/0R3.01-00がパージされ、R1.01-00が復活しています。
バックアップは用意されていません。残った3台がその場で選出をやり直してR1に決まります。
隣接が落ちたことはログに残ります。
07:00:00.552 R3 Gi0/0/0/0 u -> d Holdtime expired
IPv4 Unicast DownSTEP 4で優先度とshutdownを戻すと、DISはR1(両レベル)に戻ります。
検証Configおよびshow結果
各STEPで4台から次の3種類を取得しています。検証Configはこの..._run.txtです(最終状態はSTEP 4)。
| ファイル | 内容 |
|---|---|
..._show.txt | show 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) |
最終状態は4台とも優先度が既定の64で、priorityとshutdownを外した状態です。
STEP 0:初期状態
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
STEP 1:R3の優先度を100にする
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
STEP 2:R2の優先度をレベル2だけ110にする
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
STEP 3:R3のLANインタフェースをshutdown
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
STEP 4:優先度とshutdownを元に戻す(最終状態)
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
| キャプチャーファイルは次の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 protocol | IS-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のPriorityとLAN IDを定義する9.5 / 9.6、管理パラメータの既定値を定める11.3。 |
| RFC 1142 | OSI IS-IS Intra-domain Routing Protocol | ISO 10589のDraft Proposal(1990年)を再公開したもの。現在はHistoric。ISO/IEC 10589の代わりに参照してはいけません(RFC 7142)。 |
| RFC 7142 | Reclassification of RFC 1142 to Historic | 参照すべきはISO/IEC 10589:2002 第2版であることを述べている。 |
| RFC 1195 | Use of OSI IS-IS for Routing in TCP/IP and Dual Environments | IPの経路を運ぶための拡張。 |
関連記事
- IS-ISとは
- IS-ISのNSAPアドレスとNET(System ID)
- IS-ISの複数エリアアドレス(マルチホーミング)とエリアの統合・分割
- IS-ISのレベル1とレベル2(階層構造)
- IS-ISパケットの種類とヘッダーフォーマット
- IS-ISの隣接関係の確立と状態遷移
- IS-ISのDISと疑似ノード(Pseudonode)
- IS-ISのネットワークタイプ(broadcast / point-to-point)
- IS-ISのメトリック(narrow / wide)
- IS-ISの認証(hello-password / lsp-password)
- IS-ISのLSPとリンクステートデータベース
- IS-ISの主要TLV
- IS-ISのフラッディングとLSDB同期
- IS-ISのSPF計算と経路選択
- IS-ISのECMP(等コストマルチパス)
- IS-ISのATTビットとレベル1のデフォルトルート
- IS-ISのルートリークとup/downビット
- IS-ISの経路集約
- IS-ISのオーバーロードビット
- IS-ISのIPv6対応とマルチトポロジ(TLV 236 / MT ID 2)
- IS-ISのHelloとHolding Time
- IS-ISの収束タイマー(SPF / LSP生成)
- IS-ISのフラッディングのタイマー(LSP送信間隔・再送・CSNP / PSNP)
- IS-ISのリンク障害と経路切り替え
- IS-ISへの再配布(connected / static)
- IS-ISへのBGP経路の再配布