🐷

[Wireshark / CCNA 実技] Cisco 独自プロトコル CDP について

2024/08/11に公開

はじめに

この記事では、Cisco 機器の隣接機器検出プロトコルである CDP について調査した結果をまとめています。また、実際に Wireshark で CDP パケットのキャプチャーをして観察した結果についてもまとめています。

技術概要

CDP

CDP (Cisco Discovery Protocol) は、隣接する Cisco 機器を検出することができる Cisco 独自のプロトコルです。CDP はデータリンク層で動作するプロコトルであるため、インターフェースがデータリンク層でリンクアップしていれば、IP アドレスを持っていない機器であっても動作します。ただし、CDP は「Cisco 独自」のプロトコルであり、標準のプロトコルではなく隣接する Cisco 機器同士でしか活用できません。つまり、ある Cisco 機器に他社製の機器が繋がっていると CDP では隣接機器として検出することはできません。

画像

CDP メッセージは SNAP (Subnetwork Access Protocol) でカプセル化して物理層に渡しています。

SNAP

イーサネットのフレームフォーマットには、DIX 仕様と IEEE802.3 仕様の2種類があります。2つのフォーマットの違いは、ヘッダーの最後の部分だけです。

DIX 仕様にはタイプフィールドがあり、イーサネットの上位層プロトコルを識別するために用いられます。802.3 仕様は、タイプフィールドはなく単純に長さを表すフィールドを持っています。DIX 仕様のタイプフィールドは、1500 (16進数で 0x05DC) より大きい値を使います。802.3 仕様のフレームはデータ部分の最大長が 1500 バイトであるため、長さフィールドは 1500 より小さい値になります。そのため、タイプフィールドを見れば、どちらの仕様のフレームなのかを識別できるようになっています。

タイプフィールドは上位層で使用するプロコトルを識別するためのものですが、当時の上位層プロトコルは IPX が主流であり、他のプロトコルが出回っていなかったので、802.3 仕様のようなフォーマットでも問題ありませんでした。しかし、さまざまな上位層プロコトル (IP, ARP 等) が登場したことによって、それらに対応するために 802.3 仕様も現在はタイプフィールドも持つようになりました。

802.3 仕様では、上位層プロトコルのタイプを識別するために、LLC ヘッダーと SNAP フィールドを付加しています。CDP メッセージは、802.3 仕様のフォーマットに SNAP でカプセル化して作成されます。

Wireshark

構成

今回作成した実機の環境は、下図の通りです。ルータが繋がっているスイッチの Fa0/1 ポートに流れるパケットを Fa0/24 にコピーして、この先に繋がっている別 PC で Wireshark を動かして待機しています。

スイッチに設定している SPAN の詳細は下記の通りです。

Alice-SW01#show monitor session 1
Session 1
---------
Type                   : Local Session
Source Ports           : 
    Both               : Fa0/1
Destination Ports      : Fa0/24
    Encapsulation      : Native
          Ingress      : Disabled

CDP パケット

実際に取得できた CDP パケットは以下の通りです。ルータ (Alice) の Fas0 からパケットが送られてきています。

パケットの中身を見てみます (下画像) 。802.3 Ethernet ヘッダーの送付先 MAC アドレスには、CDP で使用されるマルチキャストアドレス (01:00:0c:cc:cc:cc) が入っています。LLC ヘッダーには、SNAP フィールドを使用することを表す値 (0xaa) が DSAP と SSAP に入っています。

Wireshark (下画像) にて、Organization CodePID と書かれている部分が SNAP フィールドです。PID を見ると、これが CDP のパケットであることがわかります。そして、残りのデータ部分に CDP パケットの内容が入っています。

CDP パケットには、ホスト名やソフトウェアバージョン、モデル名、IP アドレス、接続しているインターフェース名などが含まれています。

CDP で得られた隣接機器情報は、CLI から確認できます。

Alice-SW01>show cdp neighbors 
Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
                  S - Switch, H - Host, I - IGMP, r - Repeater, P - Phone, 
                  D - Remote, C - CVTA, M - Two-port Mac Relay 

Device ID        Local Intrfce     Holdtme    Capability  Platform  Port ID
Alice            Fas 0/1           138             R S I  892       Fas 0

おわりに

今回は、CDP メッセージについて調査した結果をまとめました。隣接機器情報を集めているだけなんですが、イーサネットのフォーマットの話が出てきて非常に難しく感じました。現在は DIX 仕様がとても多く使用されているそうですが、なぜ CDP は 802.3 仕様になっているのか?なにか理由があるのか?この辺りを考えると、なぞは深まるばかりです。

この部分については、いつか別の記事にしたいと思います。

Discussion