IS-ISパケットの種類とヘッダーフォーマット
IS-ISは、ネイバーの発見からLSDBの同期までを専用のパケットでやり取りします(プロトコル全体の流れはIS-ISとはで解説しています)。ISO/IEC 10589ではこれらをPDU(Protocol Data Unit)と呼びますが、本記事ではIPの用語に合わせて「パケット」と書きます。
IS-ISのパケットには、OSPFと比べたときに際立つ特徴があります。ヘッダーが非常に短く、中身のほとんどがTLV(Type-Length-Value)であるという点です。全パケット共通のヘッダーはわずか8バイトで、その後ろにパケット種別ごとの固定部と、可変長のTLVが並びます。
本記事では、9種類あるパケットの役割と、共通ヘッダーの各フィールド、そしてTLVという仕組みを、実機(Cisco IOS XR)のキャプチャで確認しながら解説します。9種類すべてを実際に観測できたので、それぞれのtshark出力を載せています。
IS-ISパケットが使うアドレスとカプセル化
IS-ISのパケットはIPに載らず、イーサネットフレームのペイロードとして直接運ばれます。カプセル化の詳細はIS-ISとはで解説していますが、本記事で必要になるのは次の3点です。
| 項目 | 内容 |
|---|---|
| カプセル化 | イーサネット(IEEE 802.3)+ LLC(DSAP/SSAP = 0xFE、Control = 0x03) |
| 宛先MACアドレス | ブロードキャストリンクでは01:80:C2:00:00:14(AllL1ISs)/01:80:C2:00:00:15(AllL2ISs)。ポイントツーポイントとして動作するリンクでは09:00:2B:00:00:05 |
| IS-ISの開始 | 共通ヘッダー先頭の0x83(Intradomain Routeing Protocol Discriminator) |
この3つのマルチキャストMACアドレスは、いずれもISO/IEC 10589:2002の表9(ISO 8802サブネットワーク用のアーキテクチャ定数)に載っています。ただし同じ表の中でも位置づけが違います。01:80:C2:00:00:14(AllL1ISs)と01:80:C2:00:00:15(AllL2ISs)はIS-IS自身がLAN IIHの宛先として使うものですが、09:00:2B:00:00:05は表の説明が「AllIntermediateSystems — ISO 9542が使う『All Intermediate Systems』」となっており、IS-ISではなくES-IS(ISO 9542)のアドレスです。イーサネット上でIS-ISをpoint-to-pointとして動かしたときにこのアドレスが使われるのは実装上の取り決めで、ISO/IEC 10589がそう規定しているわけではありません。
本記事の検証ではブロードキャストリンクとポイントツーポイントリンクの両方を使うため、3つすべてを実際に観測できました。
パケットの種類
IS-ISのパケットは3つのカテゴリに分かれ、それぞれレベルやリンク種別ごとに番号が振られています。ISO/IEC 10589:2002の9.4が列挙しているのは、次の9種類だけです。
| カテゴリ | パケット | PDU Type | 役割 |
|---|---|---|---|
| Hello | LAN Level 1 IIH | 15 | ブロードキャストリンクでレベル1の隣接を確立・維持する |
| Hello | LAN Level 2 IIH | 16 | ブロードキャストリンクでレベル2の隣接を確立・維持する |
| Hello | Point-to-Point IIH | 17 | ポイントツーポイントリンクで隣接を確立・維持する。レベルは中のCircuit typeで示す |
| Link State | Level 1 LSP | 18 | レベル1のリンク状態を配布する |
| Link State | Level 2 LSP | 20 | レベル2のリンク状態を配布する |
| Sequence Number | Level 1 CSNP | 24 | レベル1のLSDBにあるLSPの一覧を見せる |
| Sequence Number | Level 2 CSNP | 25 | レベル2のLSDBにあるLSPの一覧を見せる |
| Sequence Number | Level 1 PSNP | 26 | レベル1で足りないLSPを要求する/受信を確認する |
| Sequence Number | Level 2 PSNP | 27 | レベル2で足りないLSPを要求する/受信を確認する |
OSPFと対応づけると次のようになります。
| OSPF | IS-IS |
|---|---|
| Hello(Type 1) | IIH(15 / 16 / 17) |
| DBD(Type 2) | CSNP(24 / 25) |
| LSR(Type 3) | PSNP(26 / 27) |
| LSU(Type 4) | LSP(18 / 20) |
| LSAck(Type 5) | PSNP(26 / 27) |
IS-ISはPSNPが2つの役割を兼ねます。足りないLSPの要求(OSPFのLSR)と、受け取ったLSPの確認応答(OSPFのLSAck)の両方です。この2つの顔はPSNP(PDU Type 26 / 27)で実際のキャプチャを並べて確認します。またOSPFはHelloが1種類なのに対し、IS-ISはリンク種別とレベルでHelloが3種類に分かれる点が異なります。
19という番号のPDUは存在しません。ISO/IEC 10589:2002が定義するPDUは9.4に挙がっている上表の9種類だけで、レベル1 LSPの18とレベル2 LSPの20の間にある19には何も割り当てられていません。
共通ヘッダーのフォーマット
9種類すべてのパケットが、先頭に同じ8バイトのヘッダーを持ちます。各フィールドはすべて1バイトです。
| フィールド | 長さ | 内容 |
|---|---|---|
| Intradomain Routeing Protocol Discriminator | 1バイト | IS-ISであることを示す固定値0x83(二進10000011、10進131)。ISO/IEC 10589:2002の表2にアーキテクチャ定数IntradomainRouteingPDとして載っており、値そのものはISO/TR 9577(ネットワーク層プロトコル識別子の登録)で割り当てられたもの |
| Length Indicator | 1バイト | 固定ヘッダーの長さ(バイト)。TLVは含まない |
| Version/Protocol ID Extension | 1バイト | 1 |
| ID Length | 1バイト | このルーティングドメインで使うSystem IDの長さ。0は6バイトを意味する。1〜8は実際のバイト数、255は長さ0。それ以外の値は不正 |
| PDU Type | 1バイト | 下位5ビット(ビット1〜5)がパケットの種類(15〜27)。上位3ビット(ビット6〜8)は予約で、送信時は0、受信時は無視する |
| Version | 1バイト | 1 |
| Reserved | 1バイト | 未使用。0で送り、受信時は無視する |
| Maximum Area Addresses | 1バイト | このISのエリアで許されるエリアアドレスの数。1〜254が有効値で、0は受信時に3として扱われる |
ID LengthとMaximum Area Addressesは、0が「0個」ではなく既定値(6バイト/3個)を意味する点に注意が必要です。実機の出力でもここは0になります。
なおISO/IEC 10589:2002の9.1は、PDU内のオクテットを1から数え、オクテット内のビットを1〜8で数える(ビット1が最下位)と定めています。上表の「ビット1〜5」「ビット6〜8」はこの数え方によるものです。
Length Indicatorはパケットの種類によって値が変わります。共通ヘッダーの8バイトに、種別ごとの固定部の長さを足したものだからです。本記事で観測した値は次のとおりでした。
| パケット | Length Indicator | 内訳(共通8バイト+固定部) |
|---|---|---|
| LAN IIH(15 / 16) | 27 | 8 + Circuit type 1 + Source ID 6 + Holding Time 2 + PDU Length 2 + Priority 1 + LAN ID 7 |
| Point-to-Point IIH(17) | 20 | 8 + Circuit type 1 + Source ID 6 + Holding Time 2 + PDU Length 2 + Local Circuit ID 1 |
| LSP(18 / 20) | 27 | 8 + PDU Length 2 + Remaining Lifetime 2 + LSP ID 8 + Sequence Number 4 + Checksum 2 + Type block 1 |
| CSNP(24 / 25) | 33 | 8 + PDU Length 2 + Source ID 7 + Start LSP ID 8 + End LSP ID 8 |
| PSNP(26 / 27) | 17 | 8 + PDU Length 2 + Source ID 7 |
TLVという仕組み
共通ヘッダーとパケット種別ごとの固定部の後ろには、TLV(Type-Length-Value)が並びます。
| 要素 | 長さ | 内容 |
|---|---|---|
| Type | 1バイト | そのTLVが何を表すかを示す番号 |
| Length | 1バイト | Valueの長さ(バイト) |
| Value | 可変長 | 中身 |
Lengthが1バイトなので、1つのTLVが運べるValueは最大255バイトです。それより多くの情報を載せる場合は、同じTypeのTLVを繰り返します。ISO/IEC 10589:2002は各PDUの説明で「受信したPDUの中に認識できないCODEがあれば無視する」と定めており、LSPについてはさらに「無視したうえでそのまま変更せずに中継する」としています(9.8)。知らないTLVがあってもフラッディングが壊れないのはこのためです。
ISO/IEC 10589:2002はこの並びをVARIABLE LENGTH FIELDS(可変長フィールド)と呼び、先頭1バイトを「Type」ではなくCODEと表記します(9.5〜9.13)。規格の本文には「TLV」も「CLV」も出てきませんが、IETFやベンダーの資料では「TLV」が定着しているため、本記事もTLVで統一します。
この設計により、IS-ISは新しい情報を運びたくなったらTLVを追加するだけで済みます。ヘッダーのフォーマットを変える必要がないため、IPv6対応(RFC 5308)やMPLSトラフィックエンジニアリング、セグメントルーティングといった拡張が、いずれもTLVの追加だけで実現されてきました。主要なTLVの一覧はIS-ISの主要TLVで解説します。
実際、本記事のキャプチャに出てくるTLVのうち規格本体が定義しているのは一部だけです。ISO/IEC 10589:2002が定義するCODEは1〜10と14で、それ以外はすべてIETFが後から足したものです。
| TLV | 名称 | 出典 |
|---|---|---|
| 1 | Area Addresses | ISO/IEC 10589:2002 |
| 6 | IS Neighbours(6バイトMACアドレス) | ISO/IEC 10589:2002。LAN IIHにしか現れない |
| 8 | Padding | ISO/IEC 10589:2002 |
| 9 | LSP Entries | ISO/IEC 10589:2002。CSNPとPSNPが使う |
| 14 | originatingLSPBufferSize | ISO/IEC 10589:2002 |
| 129 | Protocols Supported | RFC 1195 |
| 132 | IP Interface Address | RFC 1195 |
| 137 | Dynamic Hostname | RFC 5301 |
| 211 | Restart Signaling | RFC 5306 |
| 240 | Point-to-Point Adjacency State | RFC 5303 |
実機での検証
検証環境
9種類すべてのパケットを観測するため、ブロードキャストリンクとポイントツーポイントリンクの両方を含む構成にしました。LANでしか流れないパケット(PDU Type 15・16・24)があるため、どちらか片方だけの構成では9種類が揃いません。
| ルータ | NET | is-type | 接続 |
|---|---|---|---|
| R1 | 49.0001.0010.0100.1001.00 | level-1 | LANのみ |
| R2 | 49.0001.0020.0200.2002.00 | (既定=level-1-2) | LANのみ |
| R3 | 49.0001.0030.0300.3003.00 | (既定=level-1-2) | LAN + R4へのP2P |
| R4 | 49.0002.0040.0400.4004.00 | (既定=level-1-2) | R3へのP2Pのみ |
R1・R2・R3は同じエリア49.0001のブロードキャストセグメント(10.1.0.0/24)に接続し、R3とR4の間だけをpoint-to-pointにしています。R4は別エリア49.0002なので、R3–R4間はレベル2の隣接になります。
LAN側のインタフェースにはpoint-to-pointを書きません。これがこの検証の肝で、既定のブロードキャスト動作にすることでDISが選出され、LAN IIHとCSNPが流れるようになります。
RP/0/RP0/CPU0:R3#show isis neighbors
Tue Sep 8 14:42:19.720 UTC
IS-IS 1 neighbors:
System Id Interface SNPA State Holdtime Type IETF-NSF
R1 Gi0/0/0/0 5254.0026.ffa1 Up 26 L1 Capable
R2 Gi0/0/0/0 5254.004c.38a4 Up 22 L1L2 Capable
R4 Gi0/0/0/1 *PtoP* Up 29 L2 Capable
Total neighbor count: 3同じGi0/0/0/0の上に3本ではなく2本の隣接が並んでいるのは、R1がレベル1のみ、R2がレベル1-2だからです。SNPA欄に注目すると、LAN側の2本には相手のMACアドレスが入り、P2P側は*PtoP*と表示されます。ブロードキャストリンクでは相手を特定するのにMACアドレス(SNPA=Subnetwork Point of Attachment)が要るのに対し、ポイントツーポイントでは相手が1台しかいないため不要、という違いがそのまま出ています。
show isis interface briefを見ると、この違いがもう1段はっきりします。
RP/0/RP0/CPU0:R3#show isis interface brief
Tue Sep 8 14:42:19.560 UTC
IS-IS 1 Interfaces
Interface All Adjs Adj Topos Adv Topos CLNS MTU Prio
OK L1 L2 Run/Cfg Run/Cfg L1 L2
----------------- --- --------- --------- --------- ---- ---- --------
Lo0 Yes - - 0/0 1/1 No - - -
Gi0/0/0/0 Yes 2* 1* 1/1 1/1 Up 1497 64 64
Gi0/0/0/1 Yes 0 1 1/1 1/1 Up 1497 - -LAN側のGi0/0/0/0にはPrioが64と入り、P2P側のGi0/0/0/1は-です。優先度はDISを選ぶためのものなので、DISが存在しないポイントツーポイントリンクには値がありません。隣接数に付いている*は、このルータがそのレベルのDISであることを示します。R3はレベル1・レベル2の両方でDISになりました。
この64という既定値は、ISO/IEC 10589:2002の管理情報定義にあるl1IntermediateSystemPriority / l2IntermediateSystemPriorityの既定値と一致します。DISの選出規則(同規格8.4.5)は「優先度がもっとも高いIS、同点ならMACアドレスが数値としてもっとも大きいほう」で、実際に3台のMACアドレス(R1 5254.0026.ffa1、R2 5254.004c.38a4、R3 5254.0084.f661)のうち最大のR3がDISになっています。DISの選出と疑似ノードの詳細はDISと疑似ノードで解説します。本記事ではLAN IIHにPriorityとLAN IDというフィールドがあることまでを扱います。
検証のSTEP
| STEP | 操作 |
|---|---|
| 0 | 初期状態 |
| 1 | 4台同時にprocess restart isis(LAN・P2Pの両方をキャプチャ) |
| 2 | R1だけprocess restart isis(LANをキャプチャ) |
| 3 | LAN側の3台にhello-padding disableを投入 |
| 4 | hello-paddingを元に戻す(最終状態) |
キャプチャはLANセグメント(R3–SW間)とR3–R4リンクの2か所で取得しました。
| キャプチャ | STEP | 観測できたパケット |
|---|---|---|
isis-packet-lan.pcap | 1 | LAN L1 IIH(15)、LAN L2 IIH(16)、L1 LSP(18)、L2 LSP(20)、L1 CSNP(24)、L2 CSNP(25) |
isis-packet-p2p.pcap | 1 | P2P IIH(17)、L2 LSP(20)、L2 CSNP(25)、L2 PSNP(27) |
isis-packet-lan-resync.pcap | 2 | L1 PSNP(26)ほか |
isis-packet-padding.pcap | 3 | パディングの有無でIIHの長さが変わる様子 |
STEP 1で8種類が取れましたが、L1 PSNP(26)だけが出ませんでした。4台を同時に再起動したためLSDBがフラッディングだけで揃ってしまい、「足りないLSPを要求する」場面が生まれなかったためです。そこでSTEP 2ではR1だけを再起動し、他の3台が動いたままの状態でR1にLSDBを取り直させました。これでDISが定期送信するCSNPに対してR1が要求を返し、L1 PSNPを観測できています。
観測できたPDU種別は、次のコマンドで機械的に確認できます。
$ for f in isis-packet-lan.pcap isis-packet-p2p.pcap isis-packet-lan-resync.pcap; do
> tshark -r $f -n -V 2>/dev/null | grep -oE "PDU Type: [A-Za-z0-9 -]+ \([0-9]+\)"
> done | sort | uniq -c
40 PDU Type: L1 CSNP (24)
214 PDU Type: L1 HELLO (15)
30 PDU Type: L1 LSP (18)
1 PDU Type: L1 PSNP (26)
41 PDU Type: L2 CSNP (25)
161 PDU Type: L2 HELLO (16)
36 PDU Type: L2 LSP (20)
13 PDU Type: L2 PSNP (27)
45 PDU Type: P2P HELLO (17)9種類すべてが並びました。以降、それぞれの中身を見ていきます。
IIH(PDU Type 15 / 16 / 17)
IIH(IS-IS Hello)は隣接の確立と維持に使うパケットで、リンク種別とレベルで3種類に分かれます。
| パケット | PDU Type | 使われる場面 |
|---|---|---|
| LAN Level 1 IIH | 15 | ブロードキャストリンクのレベル1 |
| LAN Level 2 IIH | 16 | ブロードキャストリンクのレベル2 |
| Point-to-Point IIH | 17 | ポイントツーポイントリンク(レベルは中のCircuit typeで示す) |
ブロードキャストリンクではレベルごとに別のパケットを使い、ポイントツーポイントでは1種類のパケットの中でレベルを示す、という違いがあります。
LAN Level 1 IIH(PDU Type 15)
R1(level-1)がLANへ送ったIIHです。宛先MACが01:80:c2:00:00:14(AllL1ISs)になっています。
ISO 10589 ISIS InTRA Domain Routeing Information Exchange Protocol
Intradomain Routing Protocol Discriminator: ISIS (0x83)
Length Indicator: 27
Version/Protocol ID Extension: 1
ID Length: 0
000. .... = Reserved: 0x0
...0 1111 = PDU Type: L1 HELLO (15)
Version: 1
Reserved: 0
Maximum Area Addresses: 0
ISIS HELLO
.... ..01 = Circuit type: Level 1 only (0x1)
0000 00.. = Reserved: 0x00
SystemID {Sender of PDU}: 0010.0100.1001
Holding timer: 30
PDU length: 1497
.100 0000 = Priority: 64
0... .... = Reserved: 0
SystemID {Designated IS}: 0030.0300.3003.01
Protocols Supported (t=129, l=1)
Type: 129
Length: 1
NLPID: IP (0xcc)
Area address(es) (t=1, l=4)
Type: 1
Length: 4
Area address (3): 49.0001
IP Interface address(es) (t=132, l=4)
Type: 132
Length: 4
IPv4 interface address: 10.1.0.1
IS Neighbor(s) (t=6, l=12)
Type: 6
Length: 12
IS Neighbor: 52:54:00:4c:38:a4
IS Neighbor: 52:54:00:84:f6:61
Padding (t=8, l=255)
Type: 8
Length: 255共通ヘッダーの8バイトが、共通ヘッダーのフォーマットの表そのままに並んでいます。ID Length: 0とMaximum Area Addresses: 0はどちらも「既定値」の意味で、0個ではありません。PDU Typeが...0 1111と5ビットで展開され、上位3ビットが000. .... = Reservedとして別に表示されている点にも注目してください。
共通ヘッダーの後ろに続く固定部は、ISO/IEC 10589:2002の9.5で次のように定義されています。
| フィールド | 長さ | この出力での値 | 内容 |
|---|---|---|---|
| Reserved/Circuit Type | 1バイト | 0x1 | 下位2ビットが送信元の扱えるレベル。1=レベル1のみ、2=レベル2のみ、3=レベル1とレベル2の両方。0は予約値で、指定されていたらPDU全体を破棄する。上位6ビットは予約 |
| Source ID | ID Lengthバイト(既定6) | 0010.0100.1001 | 送信元ルータのSystem ID |
| Holding Time | 2バイト | 30 | この秒数だけIIHが届かなければ隣接を落とす |
| PDU Length | 2バイト | 1497 | ヘッダーを含むPDU全体の長さ(バイト) |
| Reserved/Priority | 1バイト | 64 | 下位7ビットがLANレベル1 DISになるための優先度。値が大きいほうが優先。ビット8は予約 |
| LAN ID | ID Length + 1バイト | 0030.0300.3003.01 | DISのSystem IDと、DISが割り当てる1バイトの番号 |
R1はis-type level-1なのでCircuit typeがLevel 1 only (0x1)になっています。ISO/IEC 10589:2002の注記55が「LAN Level 1 IIHのCircuit Typeは1か3でなければならない」と定めているとおりの値です。
LAN IDに入っているのはR1自身ではなくR3のSystem IDです(0030.0300.3003.01)。ISO/IEC 10589:2002の9.5は、LAN IDを「DISのSystem IDに、DISが割り当てた1バイトを付けたもの。DISのIIHからコピーする」と定めています。DISでないR1は、R3が送ってきたLAN IDをそのまま載せ返しているわけです。末尾の.01がDISの付けた番号で、この値がshow isis databaseに現れる疑似ノードLSPR3.01-00の正体でもあります。
もう1つLAN IIHに固有なのが、TLV 6(IS Neighbours)です。ここにはR1が「このLAN上で見えている」IS-ISルータのMACアドレスが並びます(R2の52:54:00:4c:38:a4とR3の52:54:00:84:f6:61)。相手が自分を見えていることをこのTLVで確かめるのが、ブロードキャストリンクにおける双方向性の確認方法です。ポイントツーポイントのIIHにこのTLVは現れません。
LAN Level 2 IIH(PDU Type 16)
同じLANにR2(level-1-2)が送ったレベル2のIIHです。宛先MACは01:80:c2:00:00:15(AllL2ISs)になります。
ISO 10589 ISIS InTRA Domain Routeing Information Exchange Protocol
Intradomain Routing Protocol Discriminator: ISIS (0x83)
Length Indicator: 27
Version/Protocol ID Extension: 1
ID Length: 0
000. .... = Reserved: 0x0
...1 0000 = PDU Type: L2 HELLO (16)
Version: 1
Reserved: 0
Maximum Area Addresses: 0
ISIS HELLO
.... ..11 = Circuit type: Level 1 and 2 (0x3)
0000 00.. = Reserved: 0x00
SystemID {Sender of PDU}: 0020.0200.2002
Holding timer: 30
PDU length: 1497
.100 0000 = Priority: 64
0... .... = Reserved: 0
SystemID {Designated IS}: 0030.0300.3003.01フィールドの構成はLAN Level 1 IIH(15)とまったく同じで、ISO/IEC 10589:2002も9.6で9.5と同じ図を再掲しています。違うのはPDU Typeの番号と宛先MACアドレス、そしてPriorityとLAN IDが指すのがレベル2のDISであることだけです。Length Indicatorも同じ27になっています。
R2はlevel-1-2なのでCircuit typeがLevel 1 and 2 (0x3)です。R1の0x1と見比べると、is-typeの設定がそのままこのビットになっていることが分かります。
なおレベル1とレベル2でDISは別々に選ばれますが、この検証ではどちらもR3が選ばれたため、LAN IDはレベル1のIIHと同じ0030.0300.3003.01になっています。
Point-to-Point IIH(PDU Type 17)
R3がR4へ送ったIIHです。宛先MACは09:00:2b:00:00:05です。
ISO 10589 ISIS InTRA Domain Routeing Information Exchange Protocol
Intradomain Routing Protocol Discriminator: ISIS (0x83)
Length Indicator: 20
Version/Protocol ID Extension: 1
ID Length: 0
000. .... = Reserved: 0x0
...1 0001 = PDU Type: P2P HELLO (17)
Version: 1
Reserved: 0
Maximum Area Addresses: 0
ISIS HELLO
.... ..11 = Circuit type: Level 1 and 2 (0x3)
0000 00.. = Reserved: 0x00
SystemID {Sender of PDU}: 0030.0300.3003
Holding timer: 30
PDU length: 1497
Local circuit ID: 0
Point-to-point Adjacency State (t=240, l=15)
Type: 240
Length: 15
Adjacency State: Up (0)
Extended Local circuit ID: 0x00000005
Neighbor SystemID: 0040.0400.4004
Neighbor Extended Local circuit ID: 0x00000004ISO/IEC 10589:2002の9.7が定義する固定部は次のとおりで、LAN IIHとは最後の1フィールドだけが違います。
| フィールド | 長さ | LAN IIH(15 / 16) | Point-to-Point IIH(17) |
|---|---|---|---|
| Reserved/Circuit Type | 1バイト | あり | あり |
| Source ID | ID Lengthバイト | あり | あり |
| Holding Time | 2バイト | あり | あり |
| PDU Length | 2バイト | あり | あり |
| Reserved/Priority | 1バイト | あり | なし |
| LAN ID | ID Length + 1バイト | あり | なし |
| Local Circuit ID | 1バイト | なし | あり。このルータが回線を作ったときに割り当てた1バイトの識別子 |
Length IndicatorがLAN IIHの27に対してP2P IIHは20で、差の7バイトがちょうどPriority(1バイト)とLAN ID(7バイト)を足してLocal Circuit ID(1バイト)を引いた値です。ポイントツーポイントリンクにはDISが要らないため、DISのための2つのフィールドが丸ごと無くなっています。DISが存在するかどうかが、そのままヘッダーの形の違いになっているわけです。
Circuit typeは0x3(レベル1と2の両方)ですが、実際にはR3とR4はエリアが違うためレベル2の隣接しか成立しません。Circuit typeは「自分が扱えるレベル」を宣言するもので、成立するレベルはエリアIDとの組み合わせで決まります(レベル1とレベル2を参照してください)。
キャプチャに現れるTLV 240(Point-to-Point Adjacency State)はISO/IEC 10589には無いTLVです。同規格のポイントツーポイント隣接は2ウェイハンドシェイクで、相手からIIHが届けば隣接を上げてしまい、「相手が自分を認識しているか」までは確かめません。これを3ウェイにする拡張がRFC 5303で、TLV 240はそこで定義されたものです。Neighbor SystemID: 0040.0400.4004が「私はあなた(R4)のIIHを受け取っています」を意味し、R4はこれを見て初めて隣接をUpにします。
ブロードキャストリンクでは、この役割をTLV 6(IS Neighbours)のMACアドレス一覧が果たします。リンク種別によって双方向性の確認方法が違う、というのがIIHを3種類に分けている理由のひとつです。
LSP(PDU Type 18 / 20)
LSPは自身のリンク状態を配布するパケットで、レベル1が18、レベル2が20です。
Level 1 LSP(PDU Type 18)
R1が自分のレベル1 LSPを送ったところです。
ISO 10589 ISIS Link State Protocol Data Unit
PDU length: 90
Remaining lifetime: 1200
LSP-ID: 0010.0100.1001.00-00
Sequence number: 0x00000003
Checksum: 0x2ad2 [correct]
[Checksum Status: Good]
Type block(0x01): Partition Repair:0, Attached bits:0, Overload bit:0, IS type:1
0... .... = Partition Repair: Not supported
.000 0... = Attachment: 0
.0.. .... = Error metric: Not set
..0. .... = Expense metric: Not set
...0 .... = Delay metric: Not set
0... .... = Default metric: Not set
.... .0.. = Overload bit: Not set
.... ..01 = Type of Intermediate System: Level 1 (1)
Area address(es) (t=1, l=4)
Type: 1
Length: 4
Area address (3): 49.0001
Originating neighbor buffer size (t=14, l=2)
Type: 14
Length: 2
Neighbor originating buffer size: 1492
Protocols supported (t=129, l=1)
Type: 129
Length: 1
NLPID: IP (0xcc)
IP Interface address(es) (t=132, l=4)
Type: 132
Length: 4
IPv4 interface address: 1.1.1.1
Hostname (t=137, l=2)
Type: 137
Length: 2
Hostname: R1
IP Internal reachability (t=128, l=24)
Type: 128
Length: 24
IPv4 prefix: 1.1.1.1/32
..00 0000 = Default Metric: 0共通ヘッダーの後ろは、ISO/IEC 10589:2002の9.8で次のように定義されています。
| フィールド | 長さ | この出力での値 | 内容 |
|---|---|---|---|
| PDU Length | 2バイト | 90 | ヘッダーを含むPDU全体の長さ |
| Remaining Lifetime | 2バイト | 1200 | このLSPが期限切れとみなされるまでの秒数 |
| LSP ID | ID Length + 2バイト | 0010.0100.1001.00-00 | Source ID(6バイト)+Pseudonode ID(1バイト)+LSP Number(1バイト) |
| Sequence Number | 4バイト | 0x00000003 | LSPのシーケンス番号 |
| Checksum | 2バイト | 0x2ad2 | Source IDからLSPの末尾までの内容に対するチェックサム |
| P / ATT / LSPDBOL / IS Type | 1バイト | 0x01 | 下の表のとおり4つの情報が1バイトに詰め込まれている |
LSP IDの3つの部分がそのままshow isis databaseのLSPID欄の表記になります。0010.0100.1001.00-00のうち、.00がPseudonode ID、-00がLSP Numberです。Pseudonode IDが00以外のLSPは疑似ノードのもので、この検証ではDISのR3が出す0030.0300.3003.01-00がそれにあたります。
最後の1バイトは、show isis databaseのATT/P/OL欄に出る値の実体です。
| ビット | 名称 | この出力での値 | 意味 |
|---|---|---|---|
| ビット8 | P | 0 | セットされていれば、このルータが分割修復(Partition Repair)のオプション機能に対応している |
| ビット7〜4 | ATT | 0000 | 4ビットあり、メトリックの種類ごとに1ビット割り当てられている。ビット4がDefault、ビット5がDelay、ビット6がExpense、ビット7がError。セットされていれば、そのメトリックで他エリアに到達できることを示す |
| ビット3 | LSPDBOL | 0 | 1ならLSDBがオーバーロード状態。このビットが立ったLSPの発信元は、他のISへの経路計算で経由地として使われない |
| ビット1〜2 | IS Type | 01 | 1=レベル1 IS、3=レベル2 IS。0と2は未使用 |
ATTが4ビットある点は、ATT/P/OLという表示や「ATTビット」という言い方からは読み取れません。上のtshark出力がAttachment: 0の下にError metric / Expense metric / Delay metric / Default metricの4つを展開しているのが、この定義がそのまま現れたものです。現在のIPネットワークではDefaultメトリックしか使われないため実質1ビットで、showが表示するATTもビット4のDefaultメトリック用のものです。
R1はlevel-1なのでIS typeがLevel 1 (1)、他エリアへの出口を持たないのでATTはすべて0です。レベル1-2のR2・R3のレベル1 LSPではATTが立ちます(レベル1とレベル2を参照してください)。
TLVにはOriginating neighbor buffer size (t=14)が入っています。これはISO/IEC 10589:2002が定義するCODE 14(originatingLSPBufferSize)で、値の1492は同規格の表2にあるアーキテクチャ定数RecieveLSPBufferSize=1492と一致します。
Level 2 LSP(PDU Type 20)
R3が送ったレベル2のLSPです。
ISO 10589 ISIS Link State Protocol Data Unit
PDU length: 137
Remaining lifetime: 1200
LSP-ID: 0030.0300.3003.00-00
Sequence number: 0x00000006
Checksum: 0xb0ed [correct]
[Checksum Status: Good]
Type block(0x03): Partition Repair:0, Attached bits:0, Overload bit:0, IS type:3
0... .... = Partition Repair: Not supported
.000 0... = Attachment: 0
.0.. .... = Error metric: Not set
..0. .... = Expense metric: Not set
...0 .... = Delay metric: Not set
0... .... = Default metric: Not set
.... .0.. = Overload bit: Not set
.... ..11 = Type of Intermediate System: Level 2 (3)
Area address(es) (t=1, l=4)
Type: 1
Length: 4
Area address (3): 49.0001
Hostname (t=137, l=2)
Type: 137
Length: 2
Hostname: R3
IP Internal reachability (t=128, l=60)
Type: 128
Length: 60
IPv4 prefix: 1.1.1.1/32
..00 1010 = Default Metric: 10ヘッダーのフォーマットはレベル1 LSPと同じです(ISO/IEC 10589:2002の9.9)。違うのはPDU Typeが20であることと、IS typeがLevel 2 (3)になっていることです。R3はlevel-1-2なので、同じルータがレベル1 LSP(IS type = 1)とレベル2 LSP(IS type = 3)を別々に出していることになります。
ATTがすべて0なのは、レベル2 LSPではATTを使わないためです。ATTは「レベル1のエリアから見て、このルータが他エリアへの出口である」ことを伝えるビットなので、レベル1のLSPにしか意味がありません。
CSNP(PDU Type 24 / 25)
CSNPは、自分のLSDBに入っているLSPの一覧を相手に見せるパケットです。
Level 1 CSNP(PDU Type 24)
DISであるR3が、LANへ定期的に送っているレベル1のCSNPです。
ISO 10589 ISIS InTRA Domain Routeing Information Exchange Protocol
Intradomain Routing Protocol Discriminator: ISIS (0x83)
Length Indicator: 33
Version/Protocol ID Extension: 1
ID Length: 0
000. .... = Reserved: 0x0
...1 1000 = PDU Type: L1 CSNP (24)
Version: 1
Reserved: 0
Maximum Area Addresses: 0
ISO 10589 ISIS Complete Sequence Numbers Protocol Data Unit
PDU length: 99
Source-ID: 0030.0300.3003
Source-ID-Circuit: 00
Start LSP-ID: 0000.0000.0000.00-00
End LSP-ID: ffff.ffff.ffff.ff-ff
LSP entries (t=9, l=64)
Type: 9
Length: 64
LSP Entry
LSP Sequence Number: 0x00000005
Remaining Lifetime: 1159
LSP checksum: 0x26d4
LSP-ID: 0010.0100.1001.00-00
LSP Entry
LSP Sequence Number: 0x00000006
Remaining Lifetime: 1197
LSP checksum: 0xae16
LSP-ID: 0020.0200.2002.00-00
LSP Entry
LSP Sequence Number: 0x00000007
Remaining Lifetime: 1197
LSP checksum: 0xf7f7
LSP-ID: 0030.0300.3003.00-00
LSP Entry
LSP Sequence Number: 0x00000005
Remaining Lifetime: 1158
LSP checksum: 0x0417
LSP-ID: 0030.0300.3003.01-00CSNPの固定部は、ISO/IEC 10589:2002の9.10で次のように定義されています。
| フィールド | 長さ | この出力での値 | 内容 |
|---|---|---|---|
| PDU Length | 2バイト | 99 | ヘッダーを含むPDU全体の長さ |
| Source ID | ID Length + 1バイト | 0030.0300.3003 + 00 | このSNPを出したルータのSystem ID(末尾の1バイトは00) |
| Start LSP ID | ID Length + 2バイト | 0000.0000.0000.00-00 | このCSNPが対象とする範囲の最初のLSP ID |
| End LSP ID | ID Length + 2バイト | ffff.ffff.ffff.ff-ff | このCSNPが対象とする範囲の最後のLSP ID |
Start LSP-IDが0000...、End LSP-IDがffff...で、取りうるLSP IDの全範囲を対象にしています。これが「Complete(完全)」の意味です。ISO/IEC 10589:2002の7.3.15は、1つのCSNPに入りきらないときは複数のCSNPに分けてよいが、それらの範囲は連続していて、取りうるLSP IDの全域を覆わなければならないとしています。そのうえで「範囲に含まれるはずのLSP IDがCSNPに載っていないことは、そのLSPについてまったく情報を持っていないことを意味する」と定めており、だからこそ受け取った側は「相手に無いLSP」を検出できます。
中身の一覧はTLV 9(LSP Entries)で運ばれ、1エントリはRemaining Lifetime(2バイト)・LSP ID(8バイト)・LSP Sequence Number(4バイト)・Checksum(2バイト)の16バイトです。4エントリ×16バイト=64バイトで、Length: 64と一致します。
エントリの並び順にも注目してください。0010.0100.1001.00-00 → 0020.0200.2002.00-00 → 0030.0300.3003.00-00 → 0030.0300.3003.01-00とLSP IDの昇順になっています。ISO/IEC 10589:2002がそう定めているためで、受信側が差分を効率よく突き合わせられるようにするためです。
4つ目の0030.0300.3003.01-00が疑似ノードLSPです。Pseudonode IDが01になっており、DISであるR3がこのLANを1つのノードとして表現するために出しているものです。ブロードキャストリンクがあるとLSDBにこの種類のLSPが増えます(詳細はDISと疑似ノードで解説します)。
Level 2 CSNP(PDU Type 25)
こちらはポイントツーポイントリンクで観測したレベル2のCSNPです。
ISO 10589 ISIS Complete Sequence Numbers Protocol Data Unit
PDU length: 51
Source-ID: 0030.0300.3003
Source-ID-Circuit: 00
Start LSP-ID: 0000.0000.0000.00-00
End LSP-ID: ffff.ffff.ffff.ff-ff
LSP entries (t=9, l=16)
Type: 9
Length: 16
LSP Entry
LSP Sequence Number: 0x00000002
Remaining Lifetime: 1200フォーマットはレベル1 CSNPと同じです。違うのは送られる頻度でした。
| リンク種別 | CSNPの送信 | 本記事のキャプチャでの観測数 |
|---|---|---|
| ブロードキャスト | DISが定期的にマルチキャストする | 169秒で19回(約10秒間隔) |
| ポイントツーポイント | 隣接の確立時など必要なときだけ | 164秒で2回 |
ISO/IEC 10589:2002の7.3.15は「LANレベル1のDISはレベル1のCSNPの完全なセットをAllL1ISsへ、レベル2のDISはレベル2のCSNPをAllL2ISsへ、定期的にマルチキャストする」と定めています。送信間隔の既定値は同規格の管理パラメータcompleteSNPInterval=10秒で、観測した約10秒間隔と一致します。
ブロードキャストリンクではDISが「これがLSDBの全体だ」と言い続けることで同期を保ち、ポイントツーポイントリンクでは相手が1台しかいないので必要なときだけ交換する、という設計の違いです。
PSNP(PDU Type 26 / 27)
PSNPは、足りないLSPの要求と、受け取ったLSPの確認応答の両方に使われます。この2つの顔を、実際のキャプチャで並べて見ます。
Level 1 PSNP(PDU Type 26)— 要求としてのPSNP
STEP 2でR1だけを再起動したときに観測したものです。空のLSDBで起動したR1が、DISの送ってきたCSNPを見て「持っていないLSP」を要求しています。
ISO 10589 ISIS InTRA Domain Routeing Information Exchange Protocol
Intradomain Routing Protocol Discriminator: ISIS (0x83)
Length Indicator: 17
Version/Protocol ID Extension: 1
ID Length: 0
000. .... = Reserved: 0x0
...1 1010 = PDU Type: L1 PSNP (26)
Version: 1
Reserved: 0
Maximum Area Addresses: 0
ISO 10589 ISIS Partial Sequence Numbers Protocol Data Unit
PDU length: 51
Source-ID: 0010.0100.1001
Source-ID-Circuit: 00
LSP entries (t=9, l=32)
Type: 9
Length: 32
LSP Entry
LSP Sequence Number: 0x00000000
Remaining Lifetime: 925
LSP checksum: 0x0000
LSP-ID: 0020.0200.2002.00-00
LSP Entry
LSP Sequence Number: 0x00000000
Remaining Lifetime: 926
LSP checksum: 0x0000
LSP-ID: 0030.0300.3003.00-00LSP Sequence NumberとLSP checksumがどちらも0になっている点が決定的です。これは「このLSP IDについて、私は何も持っていない」という意味で、受け取ったR2とR3は自分のLSPを送り返します。要求としてのPSNPの姿です。
Level 2 PSNP(PDU Type 27)— 確認応答としてのPSNP
同じPSNPでも、こちらはポイントツーポイントリンクでR3がR4のLSPを受け取ったことを知らせているものです。
ISO 10589 ISIS Partial Sequence Numbers Protocol Data Unit
PDU length: 35
Source-ID: 0030.0300.3003
Source-ID-Circuit: 00
LSP entries (t=9, l=16)
Type: 9
Length: 16
LSP Entry
LSP Sequence Number: 0x00000001
Remaining Lifetime: 1200
LSP checksum: 0x6e56
LSP-ID: 0040.0400.4004.00-00今度はLSP Sequence Number: 0x00000001とLSP checksum: 0x6e56に実際の値が入っています。「あなたが送ってきたこのシーケンス番号・このチェックサムのLSPを、確かに受け取りました」という確認応答です。
同じPDU Type、同じTLV 9でありながら、載っている値が0かどうかで意味が変わるわけです。これがIS-ISで「PSNPはOSPFのLSRとLSAckの両方を兼ねる」と言われる理由です。
CSNPとPSNPのヘッダーの違い
PSNPの固定部(ISO/IEC 10589:2002 9.12)は、CSNPから範囲指定の2フィールドを取り除いただけの形です。
| フィールド | CSNP(24 / 25) | PSNP(26 / 27) |
|---|---|---|
| PDU Length | あり | あり |
| Source ID | あり | あり |
| Start LSP ID | あり | なし |
| End LSP ID | あり | なし |
| TLV 9(LSP Entries) | あり | あり |
Length Indicatorの値 | 33 | 17 |
差の16バイトがStart LSP IDとEnd LSP ID(8バイト×2)です。範囲を示すフィールドが無いことが、そのまま「部分的(Partial)」の意味になっています。CSNPは「この範囲について自分が持っているのはこれで全部」と宣言するので、載っていないLSP IDは「持っていない」ことを意味します。対してPSNPは範囲を宣言しないため、そこに並んでいるLSPについてだけ述べていることになります。同じTLV 9を使いながらCSNPとPSNPで意味が変わるのは、この1点の違いによるものです。
IIHのパディング
IIHには、フレームを大きく埋めるパディング(TLV 8)が付きます。リンクの両端でMTUが食い違っている場合に隣接を成立させないための仕組みで、OSPFがDBDのMTUフィールドで行っているチェックに相当します。
ISO/IEC 10589:2002の規定は具体的で、8.2.3(ポイントツーポイント)と8.4.2(ブロードキャスト)が、IIHをmaxsize − 1バイト以上になるまでパディングすると定めています。maxsizeは次の値の最大値です。
| 値 | 内容 |
|---|---|
dataLinkBlocksize | その回線で送れるブロックの大きさ(=実質的にMTU) |
originatingL1LSPBufferSize | 自分が出すレベル1 LSPの最大サイズ。既定値はRecieveLSPBufferSize=1492 |
originatingL2LSPBufferSize | 同じくレベル2 LSPの最大サイズ(ポイントツーポイントのみ) |
「maxsizeちょうど」ではなく「maxsize − 1以上」なのは、同規格が注記しているとおり、可能ならばmaxsizeまで埋めるが、PDU長がすでにmaxsize − 1ならパディングの余地が無く、その必要も無いためです(TLVはCODEとLENGTHで最低2バイトを要するので、残り1バイトには何も入れられません)。
両端で同時に無効にすれば隣接は落ちません。パディングはMTUの一致を確かめるための仕組みであって、隣接の成立条件そのものではないためです。落ちるのは片側だけで無効にしてMTUが食い違っている場合で、その動作は隣接関係の確立と状態遷移で解説しています。
STEP 3では、LAN側の3台すべてにhello-padding disableを投入して前後を比べました。
router isis 1
interface GigabitEthernet0/0/0/0
hello-padding disableIOS XRのhello-paddingには4つの選択肢があります。
RP/0/RP0/CPU0:R1(config-isis-if)#hello-padding ?
adaptive Enable hello-padding till neighbor confirms adjacency up
always Always enable hello-padding
disable Disable hello-padding
sometimes Enable hello-padding during adjacency formation only投入前のIIHは、フレーム長1514バイト(PDU長1497バイト)でした。
Frame 1: 1514 bytes on wire (12112 bits), 1514 bytes captured (12112 bits)
PDU length: 1497
Padding (t=8, l=255)
Type: 8
Length: 255このパケットにはPadding (t=8)が6個入っていました。l=255が5個とl=149が1個で、TLVヘッダー2バイトずつを加えると(255+2)×5 + (149+2) = 1436バイトです。
投入後は同じIIHが78バイトまで縮みます。
Frame 1: 78 bytes on wire (624 bits), 78 bytes captured (624 bits)
ISIS HELLO
.... ..01 = Circuit type: Level 1 only (0x1)
SystemID {Sender of PDU}: 0010.0100.1001
Holding timer: 30
PDU length: 61
.100 0000 = Priority: 64
SystemID {Designated IS}: 0030.0300.3003.01
Protocols Supported (t=129, l=1)
Restart Signaling (t=211, l=3)
Area address(es) (t=1, l=4)
IP Interface address(es) (t=132, l=4)
IS Neighbor(s) (t=6, l=12)PDU長が1497バイトから61バイトになりました。差の1436バイトがちょうど上で数えたパディングの量と一致します。Padding (t=8)が消えただけで、残りのTLVは同じです。
キャプチャ全体でIIHのフレーム長を数えると、設定投入の前後で分布がはっきり分かれます。
| IIHのフレーム長 | パケット数 | 状態 |
|---|---|---|
| 1514バイト | 32 | パディングあり(STEP 3の設定投入前) |
| 78バイト | 80 | パディングなしのレベル1 IIH |
| 72バイト | 66 | パディングなしのレベル2 IIH |
レベル1のIIHが6バイト長いのは、TLV 6(IS Neighbours)にLAN上の隣接ルータのMACアドレスが載るためです。この検証ではレベル1の隣接が2つ、レベル2の隣接が1つあり、その差の1つ分(6バイト)がそのまま出ています。
3台すべてで同時に無効化したため、前半で述べたとおり隣接は落ちていません。パディングを止めると帯域は節約できます(1514バイト×3台が72〜78バイトになる)が、リンクの両端でMTUが食い違っていても隣接が成立してしまうというトレードオフがあります。IIHは通るのにLSPだけが落ちる、という発見しにくい故障につながるため、片側だけで無効にするのは避けるべきです。
検証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 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は、LAN側の3台(R1・R2・R3)のGi0/0/0/0にpoint-to-pointを書かず、R3–R4間のGi0/0/0/1とGi0/0/0/0にだけpoint-to-pointを書いたものです。hello-padding disableはSTEP 4で外してあります。
STEP 0:初期状態
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
STEP 1:4台同時にprocess restart isis
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
STEP 2:R1だけprocess restart isis
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
STEP 3:LAN側の3台にhello-padding disableを投入
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
STEP 4:hello-paddingを元に戻す(最終状態)
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| R3 | show | log | run |
| R4 | show | log | run |
キャプチャーファイルは次の4本です。
LANセグメントのキャプチャー(isis-packet-lan.pcap) をダウンロード
R3–R4リンクのキャプチャー(isis-packet-p2p.pcap) をダウンロード
R1のみ再起動時(STEP 2)のキャプチャー(isis-packet-lan-resync.pcap) をダウンロード
パディング無効化時(STEP 3)のキャプチャー(isis-packet-padding.pcap) をダウンロード
参考
| 標準 | タイトル | 概要 |
|---|---|---|
| ISO/IEC 10589:2002(第2版) | Intermediate System to Intermediate System intra-domain routeing information exchange protocol | IS-IS本体の仕様。本記事が参照したのは、PDUの種類を列挙する9.4、各PDUのフォーマットを定義する9.5〜9.13、一般的な符号化規則の9.1、アーキテクチャ定数の表2と表9、パディングを規定する8.2.3 / 8.4.2、DISの選出を規定する8.4.5、CSNPの範囲を規定する7.3.15、管理パラメータの既定値を定める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 | RFC 1142をHistoricへ再分類した文書。参照すべきはISO/IEC 10589:2002 第2版であることを述べている。 |
| RFC 1195 | Use of OSI IS-IS for Routing in TCP/IP and Dual Environments | IPの経路を運ぶためのTLV(128 / 129 / 132など)を追加した拡張。 |
| RFC 5301 | Dynamic Hostname Exchange Mechanism for IS-IS | System IDにホスト名を対応づけるTLV 137。 |
| RFC 5303 | Three-Way Handshake for IS-IS Point-to-Point Adjacencies | ポイントツーポイントIIHに載るTLV 240を定義。ISO/IEC 10589のポイントツーポイント隣接は2ウェイであり、このTLVは規格本体には無い。 |
| RFC 5306 | Restart Signaling for IS-IS | グレースフルリスタート用のTLV 211。 |
| RFC 5308 | Routing IPv6 with IS-IS | IPv6の経路を運ぶためのTLV。TLVの追加だけで拡張できる例。 |
| ISO/TR 9577 | Protocol identification in the network layer | 共通ヘッダー先頭の0x83(ネットワーク層プロトコル識別子)の割り当て元。原典は参照していません(ISO/IEC 10589:2002の表2の記載によります)。 |