ネットワークタイプ(broadcast / point-to-point)
IS-ISでイーサネットのインタフェースを設定するとき、router isis配下にpoint-to-pointと書く場合と書かない場合があります。この1語で、DISの選出も疑似ノードも定期的なデータベース同期も、まとめて有無が変わります。
結論を先に言うと、point-to-pointと書いたイーサネットは、ISO/IEC 10589:2002には存在しない動かし方です。規格が知っているネットワークタイプは2つだけで、そこに「2台しかいないLANはポイントツーポイントとして扱ってよい」と後から整理を加えたのがRFC 5309です。
規格が知っているネットワークタイプは2つだけ
ISO/IEC 10589:2002の3.6.8と3.6.9が定義しているのは、次の2つです。
| 名称 | 定義 | 手順を定める節 |
|---|---|---|
| broadcast subnetwork | 任意の数のESとISを収容し、加えて1つのSN_UNITDATA要求に応じて1つのSNPDUをその部分集合へ送信できるサブネットワーク(3.6.8) | 8.4 |
| general topology subnetwork | 任意の数のESとISを収容するが、ブロードキャストサブネットワークのような多重宛先の伝送機能を持たないサブネットワーク(3.6.9) | 8.2 |
同規格の8の冒頭も「サブネットワーク独立機能が認識する回線の種類はブロードキャストと一般トポロジの2つだけである」と明記しています。
「ポイントツーポイントのイーサネット」という区分はどこにもありません。イーサネットは定義上まぎれもなくブロードキャストサブネットワークであり、規格に従うなら8.4の手順、つまりDISの選出と疑似ノードの世界に入ります。
RFC 5309:2台しかいないLANをP2Pとして扱う
では実務で当たり前に使われているpoint-to-pointは何かというと、RFC 5309「Point-to-Point Operation over LAN in Link State Routing Protocols」(2008年、Informational)が整理したものです。
同RFCの言い分は単純で、LANセグメントにルータが2台しかいないなら、ブロードキャストとして扱う理由がないというものです。ポイントツーポイント回線のほうが素直に動く理由として、次の3つを挙げています。
- 代表ルータ(DIS)が関与しない
- 疑似ノードのLSPがリンクステートデータベースに現れない
- IS-ISについては、定期的なデータベース同期も無い
重要なのは、RFC 5309が新しいTLVもコードポイントも定義していないことです。プロトコルの拡張ではなく、既存のポイントツーポイントの手順をLAN媒体の上で使うという、運用と設定の取り決めにすぎません。
だからこそ、この動かし方では宛先MACに09:00:2B:00:00:05というISO 9542(ES-IS)のアドレスが流用されます。規格が想定していない動かし方なので、IS-IS自身のマルチキャストアドレス(01:80:C2:00:00:14 / :15)が割り当てられていないのです(IS-ISが使うマルチキャストアドレスはIS-ISパケットの種類とヘッダーフォーマットで解説しています)。
何が変わるのか
同じ2台が同じケーブルでつながっていても、この設定ひとつで動作が変わります。
| 項目 | broadcast(既定) | point-to-point |
|---|---|---|
| 使うIIH | LAN Level 1 / Level 2(PDU Type 15 / 16) | Point-to-Point(PDU Type 17) |
| 宛先MAC | 01:80:C2:00:00:14 / 01:80:C2:00:00:15 | 09:00:2B:00:00:05 |
| IIHの本数 | レベルごとに別々に送る | 1種類で両レベルを兼ねる |
| DISの選出 | ある | ない |
| 疑似ノードLSP | ある | ない |
| 定期CSNP | DISが送る | ない |
| 双方向の確認 | TLV 6(IS Neighbours) | TLV 240(3ウェイ、RFC 5303) |
本記事で確かめたいのは、これらが「まとめて付いてくるか、まとめて消えるか」という点です。個々の仕組みを詳しく知りたい場合は、IIHのフォーマットはIS-ISパケットの種類とヘッダーフォーマット、双方向確認は隣接関係の確立と状態遷移、DISと疑似ノードはDISと疑似ノードで解説しています。
実機での検証
検証環境
2台だけをイーサネット(10.1.0.0/24)に接続しました。RFC 5309が対象にしている状況そのものです。両台とも同じエリア49.0001でlevel-1-2、変えるのはLAN側のpoint-to-pointの有無だけです。
| ルータ | NET | LAN IP |
|---|---|---|
| R1 | 49.0001.0010.0100.1001.00 | 10.1.0.1 |
| R2 | 49.0001.0020.0200.2002.00 | 10.1.0.2 |
検証のSTEP
| STEP | 操作 | 狙い |
|---|---|---|
| 0 | 両側 broadcast(既定) | DIS・疑似ノード・定期CSNPがある状態を計測 |
| 1 | R2だけpoint-to-pointにする | 片側だけ変えたときに何が起きるか |
| 2 | 両側 point-to-point | 3つがまとめて消えることの確認と、トラフィックの比較 |
| 3 | 両側 broadcast に戻す(最終状態) | 初期状態と同じ |
既定はブロードキャスト(STEP 0)
Circuit Type: level-1-2
Media Type: LAN
Level-1
Adjacency Count: 1
LAN ID: R2.01
Priority (Local/DIS): 64/64
Next LAN IIH in: 3 s
Level-2
Adjacency Count: 1
LAN ID: R2.01
Priority (Local/DIS): 64/64
Next LAN IIH in: 3 sMedia Type: LANです。設定に何も書かなくてもイーサネットはブロードキャストとして扱われます。そしてLAN IDとPriority (Local/DIS)がレベルごとに現れ、DIS(ここではR2)が選ばれています。Next LAN IIH inもレベルごとに別々です。
IS-IS 1 (Level-1) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
R1.00-00 * 0x00000005 0x1506 1105 /* 0/0/0
R2.00-00 0x00000005 0x955a 1107 /1200 0/0/0
R2.01-00 0x00000002 0xac86 1107 /1200 0/0/0
Total Level-1 LSP count: 3 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 * 0x00000007 0x7603 1109 /* 0/0/0
R2.00-00 0x00000007 0xfb56 1111 /1200 0/0/0
R2.01-00 0x00000002 0xac86 1107 /1200 0/0/0
Total Level-2 LSP count: 3 Local Level-2 LSP count: 1ルータは2台なのにLSPは3つあります。3つ目のR2.01-00がDISの作る疑似ノードLSPです。
片側だけ変えるとどうなるか(STEP 1)
R2だけをpoint-to-pointにします。現場で起きやすい設定ミスです。
router isis 1
interface GigabitEthernet0/0/0/0
point-to-pointRP/0/RP0/CPU0:R1#show isis neighbors
Wed Sep 9 08:07:39.035 UTC
IS-IS 1 neighbors:
System Id Interface SNPA State Holdtime Type IETF-NSF隣接が消えました。R2側も同じく空です。
IS-ISで隣接が張れなくなる原因にはMTUの不一致もありますが、そちらでは大きいMTU側がInitのまま残ります(隣接関係の確立と状態遷移で解説しています)。ネットワークタイプの不一致では両側とも相手が見えません。理由は各ルータが教えてくれます。
Circuit Type: level-1-2
Media Type: LAN
Circuit Number: 1
Last IIH Received: 08:05:25 (00:02:39 ago), 1497 octets
Last PDU Rejected: 08:07:56 (8.72 sec ago), 1497 octets, P2P IIH, P2P IIH on LAN Interface
Last IIH Sent: 08:08:04 (0.28 sec ago), 1497 octets Media Type: P2P
Circuit Number: 0
Extended Circuit Number: 0
Last IIH Received: 08:05:23 (00:02:59 ago), 1497 octets
Last PDU Rejected: 08:08:21 (2.19 sec ago), 1497 octets, L1 LAN IIH, LAN IIH on P2P Interface
Last IIH Sent: 08:08:23 (0.01 sec ago), 1497 octets理由が対称的です。
| ルータ | Media Type | 拒否した理由 |
|---|---|---|
| R1 | LAN | P2P IIH on LAN Interface(LANのインタフェースにP2PのIIHが来た) |
| R2 | P2P | LAN IIH on P2P Interface(P2PのインタフェースにLANのIIHが来た) |
Last IIH Receivedの時刻がどちらも設定変更前で止まっていることも、それ以降1つも受理していないことを示しています。
キャプチャを見ると、両者が延々と噛み合わないIIHを送り合っているのが分かります。
$ tshark -r isis-nwtype-mismatch.pcap -n -Y "isis.type == 15 || isis.type == 16 || isis.type == 17" \
-T fields -e eth.src -e eth.dst -e isis.type | sort | uniq -c
26 52:54:00:1f:66:bf 01:80:c2:00:00:14 15
26 52:54:00:1f:66:bf 01:80:c2:00:00:15 16
5 52:54:00:4b:d0:88 01:80:c2:00:00:14 15
5 52:54:00:4b:d0:88 01:80:c2:00:00:15 16
23 52:54:00:4b:d0:88 09:00:2b:00:00:05 17| 列 | 内容 |
|---|---|
| 1列目 | パケット数(uniq -c) |
| 2列目 | 送信元MAC。52:54:00:1f:66:bfがR1、52:54:00:4b:d0:88がR2 |
| 3列目 | 宛先MAC |
| 4列目 | PDU Type |
R2の15 / 16が5本ずつあるのは設定変更前の分です。それ以降はR1が15と16を01:80:c2:00:00:14 / :15へ、R2が17を09:00:2b:00:00:05へ送り続けています。PDUの種別も宛先MACも噛み合っていないため、どちらのIIHも相手に届きません。
MTU不一致との違いはここです。MTUが食い違っただけなら小さい側のIIHは相手に届くので、片側だけがInitで残ります。ネットワークタイプの不一致ではそもそも相手のIIHを1つも受理しないため、両側とも完全に見えなくなります。
ネットワークタイプ不一致時(STEP 1)のキャプチャー(isis-nwtype-mismatch.pcap) をダウンロード両側を point-to-point にする(STEP 2)
R1もpoint-to-pointにします。
RP/0/RP0/CPU0:R1#show isis neighbors
Wed Sep 9 08:11:03.517 UTC
IS-IS 1 neighbors:
System Id Interface SNPA State Holdtime Type IETF-NSF
R2 Gi0/0/0/0 *PtoP* Up 24 L1L2 Capable
Total neighbor count: 1隣接が復活し、SNPAが*PtoP*になりました。インタフェースの表示も大きく変わります。
Circuit Type: level-1-2
Media Type: P2P
Extended Circuit Number: 3
Level-1
Adjacency Count: 1
Level-2
Adjacency Count: 1STEP 0にあったLAN ID・Priority (Local/DIS)・Next LAN IIH inがまるごと消えています。代わりにExtended Circuit Numberが現れました。DISが存在しないので、DISのための表示項目そのものが無くなるわけです。
IS-IS 1 (Level-1) Link State Database
LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
R1.00-00 * 0x00000009 0xcc4b 1100 /* 0/0/0
R2.00-00 0x00000008 0x3cd3 1099 /1199 0/0/0
Total Level-1 LSP count: 2 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 * 0x0000000d 0x1e56 1100 /* 0/0/0
R2.00-00 0x0000000b 0xfa76 1101 /1200 0/0/0
Total Level-2 LSP count: 2 Local Level-2 LSP count: 1疑似ノードLSPR2.01-00が消え、LSPが各レベル3つから2つに減りました。ルータの台数とLSPの数が一致した状態です。
トラフィックはどれだけ減るか
同じ約130秒の定常状態を、両方の設定で取って並べました。
| PDU | broadcast(130秒) | point-to-point(132秒) |
|---|---|---|
| LAN Level 1 IIH(15) | 61 | — |
| LAN Level 2 IIH(16) | 60 | — |
| Point-to-Point IIH(17) | — | 30 |
| Level 1 CSNP(24) | 15 | 0 |
| Level 2 CSNP(25) | 15 | 0 |
| 合計 | 151 | 30 |
| pcapのサイズ | 188 KB | 46 KB |
同じ2台・同じリンクで、プロトコルのパケット数が5分の1になりました。
IIHが121本から30本に減っているのは、broadcastがレベルごとに別のIIHを送るのに対し、point-to-pointは1種類のIIHがCircuit typeで両レベルを兼ねるためです。CSNPは完全にゼロになりました。RFC 5309が「IS-ISについては定期的なデータベース同期も無い」と述べているとおりです。
show isis traceでも、切り替えた瞬間を最後にDISの選出処理が止まっています。
Sep 9 08:09:22.593 isis/1/det ... isis_dis_run_election:739 DIS_ELECTION_RESULT_NO_DIS L1 Gi0/0/0/0
Sep 9 08:09:22.593 isis/1/det ... isis_dis_run_election:719 DIS_RUN_ELECTION L2 Gi0/0/0/0
Sep 9 08:09:22.593 isis/1/det ... isis_dis_run_election:739 DIS_ELECTION_RESULT_NO_DIS L2 Gi0/0/0/0どちらを選ぶか
LANに2台しかいないならpoint-to-pointにするのが基本です。DISの選出も疑似ノードLSPも定期CSNPも、2台の間では何の役にも立たない負荷にすぎません。上の実測がその効果を示しています。
ただし両端に必ず入れることが絶対条件です。STEP 1で見たとおり、片側だけでは隣接そのものが成立しません。しかもLast PDU Rejectedを見ないと理由が分からないので、設定漏れは発見が遅れがちです。
3台以上が同じセグメントにいる場合はpoint-to-pointにしてはいけません。RFC 5309が対象としているのは明確に「2台の場合」です。
STEP 3で両側を broadcast に戻し、初期状態と同じになりました。
検証Configおよびshow結果
各STEPで2台から、次の3種類をルータごとに分けて取得しています。検証Configはこの..._run.txtです(最終状態はSTEP 3のもの)。
| ファイル | 内容 |
|---|---|
..._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) |
最終状態のConfigは、両台ともpoint-to-pointを書いていない(既定のbroadcast)状態です。
STEP 0:両側 broadcast(既定)
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
STEP 1:R2だけpoint-to-pointにする
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
STEP 2:両側point-to-point
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
STEP 3:両側 broadcast に戻す(最終状態)
| ルータ | show出力 | syslog | running-config |
|---|---|---|---|
| R1 | show | log | run |
| R2 | show | log | run |
| キャプチャーファイルは次の3本です。 |
broadcastの定常状態(STEP 0)のキャプチャー(isis-nwtype-broadcast.pcap) をダウンロード
ネットワークタイプ不一致時(STEP 1)のキャプチャー(isis-nwtype-mismatch.pcap) をダウンロード
point-to-pointの定常状態(STEP 2)のキャプチャー(isis-nwtype-p2p.pcap) をダウンロード
参考
| 標準 | タイトル | 概要 |
|---|---|---|
| ISO/IEC 10589:2002(第2版) | Intermediate System to Intermediate System intra-domain routeing information exchange protocol | IS-IS本体の仕様。本記事が参照したのは、ネットワークタイプを定義する3.6.8 / 3.6.9、認識する回線種別が2つだけであることを述べる8の冒頭、ポイントツーポイントの手順を定める8.2、ブロードキャストの手順を定める8.4。 |
| RFC 5309 | Point-to-Point Operation over LAN in Link State Routing Protocols | 2台しかいないLANをポイントツーポイントとして扱う考え方を整理した文書(Informational)。新しいTLVもコードポイントも定義していない。 |
| 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 5303 | Three-Way Handshake for IS-IS Point-to-Point Adjacencies | ポイントツーポイントIIHに載るTLV 240を定義。 |
| RFC 1195 | Use of OSI IS-IS for Routing in TCP/IP and Dual Environments | IPの経路を運ぶための拡張。 |