IS-ISのフラッディングとLSDB同期
IS-ISの経路計算は、全ルータが同じリンクステートデータベース(LSDB)を持っていることを前提にしています。1台でも古い情報を持っていれば、そのルータだけ違う経路を選び、ループやブラックホールになります。
その一致を保つのがフラッディング(LSPを配る)とSNP(Sequence Numbers PDU、持ち物を突き合わせる)です。この記事では、受け取ったLSPをどう扱うか、SRM/SSNという2つのフラグが何をしているか、そしてポイントツーポイントとブロードキャストで仕組みがどう変わるかを、ISO/IEC 10589:2002の規定とIOS XRのキャプチャーで確認します。
LSPそのものの一生(生成・周期更新・分割・失効)はIS-ISのLSPとリンクステートデータベースで解説しています。
フラッディングの基本規則
7.3.14.1は基本の仕組みをこう定めています。「各Intermediate systemは、受け取った相手を除くすべての隣接するIntermediate systemへ伝搬する。重複は検出して捨てる」。
受け取った回線に送り返さないので、リンクが環状につながっていても同じLSPが回り続けません。重複検出は新旧判定(7.3.16)が兼ねていて、すでに持っているものと同じLSPが届いたら伝搬せずに終わります。
受け取ったLSPをどう扱うか
7.3.15.1 e)は、受信したLSPをデータベースの内容と比べて3つに分岐させます。
| 受け取ったLSP | 動作 |
|---|---|
| 新しい | データベースへ保存し、受信回線以外のすべてにSRMを立てる。受信回線のSRMは落とす |
| 同じ | 受信回線のSRMを落とす(=これが確認応答になる) |
| 古い | 受信回線にSRMを立てる。手元の新しいものを送り返し、受信回線のSSNは落とす |
「新しい」と「同じ」では、受信回線がブロードキャストでない場合にかぎり受信回線のSSNを立てます。ポイントツーポイントで確認応答のPSNPが返るのはこの規定によるもので、ブロードキャストでは立てません。
「古いものが届いたら新しいものを送り返す」のがフラッディングの自己修復です。遅れているルータがいると、隣接から自動的に最新版が押し戻されます。
新旧の判定はシーケンス番号→残り寿命0→チェックサムの順で、IS-ISのLSPとリンクステートデータベースで解説しています。
SRMフラグとSSNフラグ
7.3.15は、LSPごと・回線ごとに2つのフラグを持つと定めています。
| フラグ | 意味 | 落ちる契機 |
|---|---|---|
| SRM(Send Routeing Message) | そのLSPをその回線に送る必要がある | ブロードキャストは送信した時点。ポイントツーポイントはLSPかSNPを受け取ったとき |
| SSN(Send Sequence Numbers) | そのLSPの情報をPSNPに載せる必要がある | PSNPを送信した時点 |
この落ち方の違いが、そのまま媒体ごとの動作の違いになります。ポイントツーポイントではSRMが立ったままだとminimumLSPTransmissionInterval(5秒)ごとに再送され(7.3.15.5)、相手からPSNPが返って初めて止まります。確認応答が無ければ送り続けるわけです。
規格はSRMを立ててはいけない場合も定めています。シーケンス番号が0のLSPと、externalDomainが真の回線です。またLSPが回線のdataLinkBlockSizeより大きい場合は伝搬せずlSPTooLargeToPropagateを上げます。
フラグ自体は実装内部の状態で、show isis databaseのような一覧には出ません。ただしIOS XRはisisプロセスの内部トレースに記録しており、show isis trace all | include UPD_LSP_SET_SRMでどのLSPにどの回線のSRMを立てたかを後から読み出せます。この記事のラボではこれを使って規格の記述を確かめます。
媒体でSNPの使い方が変わる
CSNP(Complete Sequence Numbers PDU)はLSDB全体の目次、PSNP(Partial Sequence Numbers PDU)はその一部です。どちらもTLV 9(LSP Entries)にLSPのID・シーケンス番号・残り寿命・チェックサムを並べます。
| 項目 | ポイントツーポイント | ブロードキャスト |
|---|---|---|
| CSNP | 隣接の初期化時だけ(7.3.15.3 b) | DISがcompleteSNPInterval(既定10秒)ごとに送る |
| PSNP | 受け取ったLSPの確認応答 | 非DISが不足を要求する(partialSNPIntervalごと) |
| 届かないとき | 5秒ごとに再送(7.3.15.5) | 次の定期CSNPで気づく |
ポイントツーポイントに定期CSNPが要らないのは、1つずつPSNPで確認できるからです。相手は1台しかいないので、送った・届いたを個別に管理すれば足ります。
一方ブロードキャストは相手が複数で、1台ずつ確認応答を取ると台数分のPSNPが飛び交います。そこでDISが目次(CSNP)を定期的に配り、足りない側が気づいてPSNPで要求する形にしています。DISと疑似ノードはIS-ISのDISと疑似ノードで解説しています。
実機での検証
検証環境
R1 — R2 をpoint-to-point、R2 — R3 — R4 をブロードキャストのLANにします。全台を同じエリア49.0001のlevel-2-onlyにし、1つのラボで両方の媒体を見られるようにしました。LANを3台にしたのは、DISではないルータを2台つくって非DISの動きを見るためです。
| ルータ | NET | Lo0 | リンク |
|---|---|---|---|
| R1 | 49.0001.0010.0100.1001.00 | 1.1.1.1/32 | Gi0/0/0/0 10.1.2.1(p2p) |
| R2 | 49.0001.0020.0200.2002.00 | 2.2.2.2/32 | Gi0/0/0/1 10.1.2.2(p2p)/ Gi0/0/0/0 10.2.0.2(LAN) |
| R3 | 49.0001.0030.0300.3003.00 | 3.3.3.3/32 | Gi0/0/0/0 10.2.0.3(LAN) |
| R4 | 49.0001.0040.0400.4004.00 | 4.4.4.4/32 | Gi0/0/0/0 10.2.0.4(LAN) |
検証のSTEP
| STEP | 操作 | 確かめること |
|---|---|---|
| 0 | 既定・安定状態 | p2pにCSNPが流れないこと、LANでDISが定期CSNPを出すこと |
| 1 | R1にLoopback1(172.16.1.1/32)を追加 | LSPがR1→R2→LANと伝わる順序と、受け取った回線には返さないこと |
| 2 | R1 — R2をshutdown → R1にLoopback2を追加 → no shutdown | 隣接復活時のCSNPで不足を検出し、同期する流れ |
| 3 | すべて元に戻す(最終状態) | STEP 0と同じ |
STEP 0:p2pに定期CSNPは流れない
何も変えずに、両方のリンクを10分ずつキャプチャーしました。PDUの内訳です。
| PDU | p2p(R1 — R2) | LAN(R2 — R3 — R4) |
|---|---|---|
| IIH | 139 | 342 |
| LSP | 3 | 4 |
| CSNP | 0 | 69 |
| PSNP | 3 | 0 |
p2pにCSNPは1つも流れず、LANにPSNPは1つも流れていません。CSNPをポイントツーポイントでは初期化時にしか送らないこと(7.3.15.3 b)と、不足が無いかぎり非DISがPSNPを出さないことが、そのまま数に出ています。
LANのCSNP 69個はすべてDISのR2が送ったもので、間隔は7.5〜10.0秒(平均8.8秒)でした。completeSNPIntervalの既定10秒より短めに散るのは、10.1が求めるジッターによるものです。
p2p側では、この10分の間に流れたLSPと、それに続くPSNPが対になっています。
7 2026-09-10 20:07:10.374921 52:54:00:ed:a5:21 → 09:00:2b:00:00:05 ISIS LSP 80 L2 LSP, LSP-ID: 0020.0200.2002.01-00, Sequence: 0x00000006, Lifetime: 1200s
8 2026-09-10 20:07:10.879176 52:54:00:fa:e5:1c → 09:00:2b:00:00:05 ISIS PSNP 52 L2 PSNP, Source-ID: 0010.0100.1001.00
17 2026-09-10 20:07:42.394397 52:54:00:ed:a5:21 → 09:00:2b:00:00:05 ISIS LSP 107 L2 LSP, LSP-ID: 0040.0400.4004.00-00, Sequence: 0x00000007, Lifetime: 1200s
18 2026-09-10 20:07:42.898614 52:54:00:fa:e5:1c → 09:00:2b:00:00:05 ISIS PSNP 52 L2 PSNP, Source-ID: 0010.0100.1001.00
141 2026-09-10 20:16:27.922463 52:54:00:ed:a5:21 → 09:00:2b:00:00:05 ISIS LSP 130 L2 LSP, LSP-ID: 0020.0200.2002.00-00, Sequence: 0x00000009, Lifetime: 1200s
142 2026-09-10 20:16:28.426389 52:54:00:fa:e5:1c → 09:00:2b:00:00:05 ISIS PSNP 52 L2 PSNP, Source-ID: 0010.0100.1001.00LSPの約0.5秒後にPSNPが返っており、3組とも同じ形です。これがポイントツーポイントの確認応答で、これが返るまでSRMは落ちません。
STEP 0のp2p側キャプチャー(10分)をダウンロード
STEP 0のLAN側キャプチャー(10分)をダウンロード
STEP 1:受け取った回線には送り返さない
R1にLoopback1(172.16.1.1/32)を追加し、IS-ISで広告させました。
interface Loopback1
ipv4 address 172.16.1.1 255.255.255.255
!
router isis 1
is-type level-2-only
net 49.0001.0010.0100.1001.00
log adjacency changes
address-family ipv4 unicast
!
interface Loopback0
passive
address-family ipv4 unicast
!
!
interface Loopback1
passive
address-family ipv4 unicast
!
!
interface GigabitEthernet0/0/0/0
point-to-point
address-family ipv4 unicast
!
!
!両方のリンクを同時にキャプチャーし、mergecapで1つに束ねたものです。R2は2つのインタフェースでMACアドレスが違うので、どちら側へ送ったかが送信元MACで分かります。
12 2026-09-10 20:37:48.833480 52:54:00:fa:e5:1c → 09:00:2b:00:00:05 ISIS LSP 119 L2 LSP, LSP-ID: 0010.0100.1001.00-00, Sequence: 0x0000000b, Lifetime: 1200s
13 2026-09-10 20:37:48.836933 52:54:00:e7:1e:24 → 01:80:c2:00:00:15 ISIS LSP 119 L2 LSP, LSP-ID: 0010.0100.1001.00-00, Sequence: 0x0000000b, Lifetime: 1200s
15 2026-09-10 20:37:49.337207 52:54:00:ed:a5:21 → 09:00:2b:00:00:05 ISIS PSNP 52 L2 PSNP, Source-ID: 0020.0200.2002.00| MACアドレス | どこ |
|---|---|
52:54:00:fa:e5:1c | R1のGi0/0/0/0(p2p) |
52:54:00:ed:a5:21 | R2のGi0/0/0/1(p2p) |
52:54:00:e7:1e:24 | R2のGi0/0/0/0(LAN) |
R1が20:37:48.833480にLSP(0010.0100.1001.00-00、シーケンス0x0000000b)をp2pへ送り、R2が3.5ミリ秒後の20:37:48.836933に同じLSP-IDとシーケンス番号のままLANへ送っています。そしてp2pに同じLSPが再び現れることはありません。受け取った回線を除いて伝搬する、という7.3.14.1の規定どおりです。
その0.5秒後の20:37:49.337207に、R2がp2pへPSNPを返しています。LANへの中継が3.5ミリ秒だったのに対し、確認応答は500ミリ秒待ってからです。伝搬は即座に、確認応答はまとめて、という作りになっています。
宛先MACも媒体で違います。p2pは09:00:2b:00:00:05、LANは01:80:c2:00:00:15(AllL2ISs)です。
R2の内部トレースには、このときの判断がそのまま残っています。
Sep 10 11:37:48.835 isis/1/upd 0/RP0/CPU0 t4290 isis_upd_lsp_acceptance:1105 UPD_LSP_ACCEPT_NEW_NEWER Upd Type: LSP L2 0010.0100.1001.00-00 Gi0/0/0/1
Sep 10 11:37:48.835 isis/1/upd 0/RP0/CPU0 t4290 isis_upd_lsp_set_all_srm:1252 UPD_LSP_SET_SRM Upd Type: LSP L2 0010.0100.1001.00-00 Gi0/0/0/0
Sep 10 11:37:49.335 isis/1/upd 0/RP0/CPU0 t4290 isis_upd_lsp_send_psnp_walker:2235 UPD_PSNP_SEND_ENTRY L2 Gi0/0/0/1 0010.0100.1001.00-00
Sep 10 11:37:49.335 isis/1/std 0/RP0/CPU0 t4290 isis_upd_psnp_send:2167 UPD_PSNP_SEND_SUMMARY L2 Gi0/0/0/17.3.15.1 e)の「新しい」分岐が3つの動作に分かれて現れています。
| トレース | 意味 | 対応するパケット |
|---|---|---|
UPD_LSP_ACCEPT_NEW_NEWER ... Gi0/0/0/1 | p2pで受け取り、手元より新しいと判定 | 上のNo.12 |
UPD_LSP_SET_SRM ... Gi0/0/0/0 | SRMを立てた回線として挙がるのは 受信回線ではない Gi0/0/0/0 だけ | 上のNo.13 |
UPD_PSNP_SEND_ENTRY ... Gi0/0/0/1 | 受信回線にPSNPを送る(SSNの結果) | 上のNo.15 |
SRMが立った回線としてLAN側のGi0/0/0/0だけが挙がり、受信したGi0/0/0/1は挙がりません。フラグはshowの表には出ませんが、その操作はこうして観測できます。
STEP 2:隣接が戻るときだけCSNPが流れる
R1 — R2をshutdownし、切り離した状態でR1にLoopback2(172.16.2.1/32)を追加してから、no shutdownで戻しました。切り離している間の両者のデータベースです。
RP/0/RP0/CPU0:R1#show isis database
Thu Sep 10 11:47:20.598 UTC
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
R1.00-00 * 0x0000000d 0x6199 1158 /* 0/0/0
R2.00-00 0x0000000b 0x5d2e 923 /1200 0/0/0
R2.01-00 0x00000008 0x02d1 353 /1200 0/0/0
R3.00-00 0x00000009 0x3a85 1011 /1200 0/0/0
R4.00-00 0x00000009 0xbad9 558 /1200 0/0/0
Total Level-2 LSP count: 5 Local Level-2 LSP count: 1
RP/0/RP0/CPU0:R2#show isis database
Thu Sep 10 11:47:25.809 UTC
IS-IS 1 (Level-2) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
R1.00-00 0x0000000b 0xa225 622 /1200 0/0/0
R2.00-00 * 0x0000000c 0xf54d 1112 /* 0/0/0
R2.01-00 0x00000008 0x02d1 348 /* 0/0/0
R3.00-00 0x00000009 0x3a85 1005 /1200 0/0/0
R4.00-00 0x00000009 0xbad9 552 /1200 0/0/0
Total Level-2 LSP count: 5 Local Level-2 LSP count: 1この出力はR1側とR2側として添付しています。食い違いは両方向に出ています。R1は自分のLSPを0x0000000dまで進めていますが、R2が持つR1のコピーは0x0000000bのままです。逆にR2は自分のLSPを0x0000000cにしていますが、R1が持つコピーは0x0000000bです。互いに相手より新しい情報と、相手より古い情報を同時に抱えた状態になります。
リンクを戻した直後のp2pです。
25 2026-09-10 20:47:43.258357 52:54:00:fa:e5:1c → 09:00:2b:00:00:05 ISIS CSNP 132 L2 CSNP, Source-ID: 0010.0100.1001.00, Start LSP-ID: 0000.0000.0000.00-00, End LSP-ID: ffff.ffff.ffff.ff-ff
26 2026-09-10 20:47:43.261362 52:54:00:ed:a5:21 → 09:00:2b:00:00:05 ISIS LSP 130 L2 LSP, LSP-ID: 0020.0200.2002.00-00, Sequence: 0x0000000d, Lifetime: 1199s
27 2026-09-10 20:47:43.765201 52:54:00:fa:e5:1c → 09:00:2b:00:00:05 ISIS PSNP 52 L2 PSNP, Source-ID: 0010.0100.1001.00
28 2026-09-10 20:47:44.258382 52:54:00:fa:e5:1c → 09:00:2b:00:00:05 ISIS LSP 131 L2 LSP, LSP-ID: 0010.0100.1001.00-00, Sequence: 0x0000000f, Lifetime: 1199s
29 2026-09-10 20:47:44.258599 52:54:00:fa:e5:1c → 09:00:2b:00:00:05 ISIS LSP 80 L2 LSP, LSP-ID: 0020.0200.2002.01-00, Sequence: 0x00000008, Lifetime: 330s
30 2026-09-10 20:47:44.258728 52:54:00:fa:e5:1c → 09:00:2b:00:00:05 ISIS LSP 107 L2 LSP, LSP-ID: 0030.0300.3003.00-00, Sequence: 0x00000009, Lifetime: 987s
31 2026-09-10 20:47:44.258970 52:54:00:fa:e5:1c → 09:00:2b:00:00:05 ISIS LSP 107 L2 LSP, LSP-ID: 0040.0400.4004.00-00, Sequence: 0x00000009, Lifetime: 534s
32 2026-09-10 20:47:44.261847 52:54:00:ed:a5:21 → 09:00:2b:00:00:05 ISIS PSNP 52 L2 PSNP, Source-ID: 0020.0200.2002.00
34 2026-09-10 20:47:44.347718 52:54:00:ed:a5:21 → 09:00:2b:00:00:05 ISIS CSNP 132 L2 CSNP, Source-ID: 0020.0200.2002.00, Start LSP-ID: 0000.0000.0000.00-00, End LSP-ID: ffff.ffff.ffff.ff-ff
35 2026-09-10 20:47:44.762934 52:54:00:ed:a5:21 → 09:00:2b:00:00:05 ISIS PSNP 100 L2 PSNP, Source-ID: 0020.0200.2002.00
38 2026-09-10 20:47:55.692508 52:54:00:ed:a5:21 → 09:00:2b:00:00:05 ISIS LSP 80 L2 LSP, LSP-ID: 0020.0200.2002.01-00, Sequence: 0x00000009, Lifetime: 1200s
39 2026-09-10 20:47:56.197774 52:54:00:fa:e5:1c → 09:00:2b:00:00:05 ISIS PSNP 52 L2 PSNP, Source-ID: 0010.0100.1001.00
40 2026-09-10 20:47:59.270912 52:54:00:ed:a5:21 → 09:00:2b:00:00:05 ISIS LSP 107 L2 LSP, LSP-ID: 0040.0400.4004.00-00, Sequence: 0x0000000a, Lifetime: 1200s
41 2026-09-10 20:47:59.775063 52:54:00:fa:e5:1c → 09:00:2b:00:00:05 ISIS PSNP 52 L2 PSNP, Source-ID: 0010.0100.1001.00再同期は次の順で進みます。
20:47:43.258357R1がCSNPを送る(No.25)。開始LSPIDが0000.0000.0000.00-00、終了がffff.ffff.ffff.ff-ffで、データベース全体を1つで表す目次です20:47:43.261362R2がそのCSNPを見て、自分のLSPが相手では古いと気づき、0x0000000dを送り返します(No.26)。CSNPに載っていた番号より新しいものを送る、7.3.15.2 c)の動作です20:47:44.258382〜 R1が4つのLSPをまとめて送出します(No.28〜31)。ポイントツーポイント回線が起動したときは全LSPにSRMを立てる、という7.3.17の規定によるものです。R2自身のLSP(0020.0200.2002.00-00)だけが含まれていないのは、その直前にR2から新しいコピーを受け取ったためです20:47:44.347718R2もCSNPを送ります(No.34)
この7分のキャプチャーでp2pに流れたCSNPはNo.25とNo.34の2個だけです。以降、定期的なCSNPは1つも流れていません。
STEP 2のp2p側キャプチャー(7分)をダウンロード
STEP 2のLAN側キャプチャー(7分)をダウンロード
STEP 3:元に戻す
Loopback1とLoopback2をIS-ISと設定の両方から外しました。4台ともrunning-configはSTEP 0と一致しています。
検証Configおよびshow結果
各STEPで4台すべてから、次の4種類をルータごとに分けて取得しています。検証Configはこの..._run.txtです(最終状態は最後のSTEPのもの)。
| ファイル | 内容 |
|---|---|
..._show.txt | show version / show interface description / show route と、show isis 系一式(interface / neighbors detail / database detail / topology / adjacency-log / spf-log / lsp-log / statistics) |
..._log.txt | そのSTEPの範囲だけに絞ったshow logging。各STEPの開始時にlogmsgでマーカーを入れ、その時刻をshow logging startに指定して取得したもの |
..._run.txt | そのSTEP時点のshow running-config(=そのSTEPの検証Config) |
..._trace.txt | show isis trace allをフラッディング関連のイベントで絞ったもの(UPD_LSP_ACCEPT / UPD_LSP_SET_SRM / UPD_SNP_ENTRY / UPD_CSNP / UPD_PSNP) |
step2_..._linkdown.txt | STEP 2でリンクを切り離している間のR1とR2のshow isis database。復旧前の食い違いを残したもの |
STEP 0:初期状態
| ルータ | show出力 | syslog | running-config | trace |
|---|---|---|---|---|
| R1 | show | log | run | trace |
| R2 | show | log | run | trace |
| R3 | show | log | run | trace |
| R4 | show | log | run | trace |
STEP 1:R1にLoopback1(172.16.1.1/32)を追加
| ルータ | show出力 | syslog | running-config | trace |
|---|---|---|---|---|
| R1 | show | log | run | trace |
| R2 | show | log | run | trace |
| R3 | show | log | run | trace |
| R4 | show | log | run | trace |
STEP 2:R1 — R2をshutdown → Loopback2を追加 → no shutdown
| ルータ | show出力 | syslog | running-config | trace |
|---|---|---|---|---|
| R1 | show | log | run | trace |
| R2 | show | log | run | trace |
| R3 | show | log | run | trace |
| R4 | show | log | run | trace |
STEP 3:すべて元に戻す(最終状態)
| ルータ | show出力 | syslog | running-config | trace |
|---|---|---|---|---|
| R1 | show | log | run | trace |
| R2 | show | log | run | trace |
| R3 | show | log | run | trace |
| R4 | show | log | run | trace |
参考
| 標準 | タイトル | 概要 |
|---|---|---|
| ISO/IEC 10589:2002(第2版) | Intermediate System to Intermediate System intra-domain routeing information exchange protocol | IS-IS本体の仕様。本記事が参照したのは、フラッディングの基本を定める7.3.14.1、受信時の動作の7.3.14.2、SRM / SSNフラグを定義する7.3.15、3分岐の7.3.15.1、CSNPの送出条件の7.3.15.3、PSNPの7.3.15.4、再送間隔の7.3.15.5、確認応答の7.3.17。 |
| RFC 1195 | Use of OSI IS-IS for Routing in TCP/IP and Dual Environments | IPの経路を運ぶための拡張。 |
| 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版であることを述べている。 |
関連記事
- IS-ISとは
- IS-ISのNSAPアドレスとNET(System ID)
- 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のATTビットとレベル1のデフォルトルート