ひさしぶりの復活は CDP から
- 2015/04/01
- 19:33
突然の襲来となったネットワークブートキャンプにより、途中だった 「パケットフィルタリング」 のメモが放置プレイになりました。 ブログの放置プレイは僕の十八番ではございますが、その並外れた放置プレイによって、なんと僕自身が 「このブログのログインパスワードを忘れる」 という、出来そこない極まりない状況に陥ってしまいました。
自由人な僕でも、さすがにそれではイクナイと思いましたので、今回パケットフィルタリングの記事をいったん中断しまして、もっと簡単に書ける記事をメモすることにしました。 口直しとしまして、今回は "CDP" というプロトコルをメモさせていただきます。
はじめに
CDP は "Cisco Descovery Protocol" の略でございます。
この名称から分かるように、あの Cisco 製品で使われるプロトコルです。
そうです、ヤマハルータ Love なワタクシでしたが、ネットワークブートキャンプを機に Cisco 製品を扱うことになりました。 とは申しましても、実際に私が業務で触れているのは、相変わらずヤマハルータです。 じゃぁなぜ Cisco ルータを触っているのか? それには以下のような理由があります。
仕事中、ヤマハルータでネットワークを構築していると、自分の知らないプロトコルや技術と出会うことが頻繁にあります。 インフラまわりのプロになりたい僕は、それらの技術を理解するためにさまざまな 「検証」 をします。 その結果をメモすることが本ブログの目的なのですが、今までこれらの 「検証」 には、業務で使い慣れたヤマハルータを使っていました。
ですがインフラまわりのプロを目指すには、ネットワーク技術を知るのはもちろんのこと、やっぱりネットワーク機器のデファクトスタンダードとされている Cisco 製品には大きな魅力を感じてしまいます。
――あ、それなら 「検証」 には Cisco 製品を使えばいいんじゃね!?
という、「ドイツ語と数学の勉強を別々にやるの面倒くさくて、ドイツ語で書かれた数学の教科書で勉強した」 のようなコピペで有名な、動物研究家の天才ムツゴロウさんをマネして、現在は以下のような試みに挑戦しております。
ヤマハルータ → 業務用
シスコルータ → ネットワーク技術勉強用
ここでミソなのは Cisco ルータが 「CCNA 勉強用」 ではなく、あくまで 「ネットワーク勉強用」 なところ。
タイトルには "CCNA" という Cisco 認定資格の文字がありますが、これはあくまで 「CDP は CCNA 試験で扱っている範囲である」 という意味であり、決して 「CCNA 勉強用」 ではありません。 僕は飽きっぽい性格なので 「CCNA 合格を目指す!!」 という形ある具体的な目標を作ってしまうと、どうしても飽きてしまい、途中で投げ出してしまうのです。
ですので 「ネットワークの本質を理解する」 という長期的であり、かつ非具体的な遠い目標を定めつつ、あくまでその過程で CCNA あたりを合格できればいいなぁ……なんて思っております。 けれども、そもそも飽きっぽい自分がそのような長期的な理解の継続ができるのか不安ではありますが。。 ま、それは失敗したら失敗したときに考える、ということでw
ともかく、そのような理由から Cisco ルータを扱うことになりましたw (^ω^*)
では、長ったらしいチラ裏メモはここまでにして、以下から CDP についてメモを残して行きます。
CDP
Cisco ルータを使っているとき、一番はじめに 「なんだこれ?」 と思ったプロトコルが CDP でした。
前述もしましたが CDP は Cisco Descovery Protocol の略ですが、Discovery Protocol という名称から 「何かを探し出すプロトコル」 というイメージが読み取れます。 その言葉通り、これは Cisco 製品に接続されたネイバー (隣接ノード) を探し出し、その機器から設定情報などを確認するプロトコルのようです。
なお Neighbor とは 「隣接したノード」 のことを意味しますが、これは ICMPv6 をメモしたときにも "Neighbor Discovery" という技術にて触れましたので、英語がまったく苦手な 「英検28級」 のワタクシが理解できる数少ない英単語でございます。 …28級は、僕が28歳だから、なんていうくだらない理由はオイトイテ。。

↑図1: CDP は隣接する Cisco 機器同士が設定情報を交換する
※図1には書き忘れましたが、右のルータが RouterB でございます。
「ネイバーの情報を確認する」 と聞いたとき (SNMP みたいなものかな?) と思いましたが、遠からず近からずなご様子。 SNMP は L7 で動作しますが CDP は L2 で動作する ことから、検出できるネイバーの範囲が絞られそうです。 そもそも Neighbor という表現を用いている時点で L2 動作なのでしょうね。
CDP が L2 動作ということは、CDP データのことを 「CDP フレーム」 と呼ぶのが正解なのでしょうか。 ということで、今回のメモは CDP データの内容を解析するときは 「CDP メッセージ」 と呼び、CDP データが物理的に転送されるときは 「CDP フレーム」 といった呼び方をします。 ややこしいかもしれませんが、細かいところから意識していくことが何事にも大切。 でも細かすぎると人から 嫌われる 可能性があるため、人と接するときは程々に。。 OTL
では、さっそく動作させてみましょう。
今回、検証に使った Cisco ルータは "Cisco C1812J" というルータです。 Cisco 練習用にはモッテコイなルータのようで、オークションで4台8000円で購入しました。
いつぞやにメモした "GNS3" というエミュレータがありましたが、アレは僕には合いませんでした。 いや、合わないワケではないのでしょうけど、エミュレータはなんかこう……ノリが楽しくないです。 やっぱり初心者は LAN ケーブルをカチカチ挿して、冷たい筐体が温かくなるプロセスを肌で感じることが大切 な気がします。 スーパーファミコンのカセットの基盤を 「ペロッ」 と舐めて 「舌は苦いけどソフトは動いたぜ!!www」 ってノリが楽しいわけで、エミュレータで SNES をプレイできるようじゃ、それこそ "味" がなくモチベーションがまったく上がりません(あくまで入門者の僕としては)。
ということで皆さま、Cisco を勉強しようと GNS3 をインストールしたはいいが、なかなかモチベーションが上がらないときは、実機をオヌヌメいたします。 言葉には表しにくい、変なモチベーションが上がってきますわよw (///)
――なんて余談は置いといて、以下のような環境を構築しました。

↑図2: ドがつくほどのデフォルト設定
RouterA : 10.1.1.1/30
RouterB : 10.1.1.2/30
2台のルータの FastEthernet 0 ポートを LAN ケーブルで直結させた状態です。 IP アドレスは前述の通りで、それ以外はデフォルトの状態です。 この状態から [ p# show cdp neighbors ] コマンドを実行しますと、さっそくネイバーの情報が確認できました。

↑図3: [ p# show cdp neighbors ] コマンド実行結果
図3 に表示された項目を以下に書き記します。
これらの情報を照らし合わせると、RouterB の型番は Cisco 1812-J であり、このルータは 「ルータ・スイッチ・IGMP プロトコル」 に対応しており、CDP メッセージを破棄するまで (ホールドタイム) あと 156 秒であり、この CDP を送受信しているインターフェースは FastEthernet 1 ポートである――というイメージでしょうか。
「で、あり」 という言葉を連呼しており、かつ IGMP をまだ理解していない僕なので、色々なところで自信がありませんが、それでも大体の内容は上記の内容だけでも分かりますね。
また、CDP メッセージの内容を 「詳細」 に確認したい場合は [ p# show cdp neighbor detail ] コマンドを使います。 いわずもがな detail は 「詳細」 という意味ですので、ネイバーが送信する CDP メッセージの詳細を表示してくれます。

↑図4: [ p# show cdp neighbors detail ] コマンド実行結果
図4 に表示された項目を以下に書き記します。 以下、図3 の重複は除外しています。
説明欄に (?) マークが付加されている項目は、僕がまだよく分かってない項目でございます。
(VTP ってなんだ? Management "Domain" って書いてあるから、ドメイン名のコトかな?) なんて期待しながら [ g# ip domain name ] コマンドからドメイン名を変更しましたが、これがまったく認識せず。 調べたところ、VTP は "VLAN Trunk Protocol" という VLAN 関連の技術のようです。 いやはや、まだまだ知識が足りないようで (///)
また、図4 には "Version: 2" という項目がありますが、CDP にはバージョンが存在します。 デフォルトでは v2 が対応しているようですね。
この CDP メッセージの "Version" と、ルータがメッセージと持ち続ける時間 "Hold Time" と、メッセージを送信する頻度 "Timer" は [ p# show cdp ] コマンドを実行することで確認できました。

↑図5: [ p# show cdp ] コマンド. CDP 設定値
…とっても今さらですけども、以下はコマンドを記述する際の説明です。
本メモではコマンド名を記述するときに 「 英字# コマンド内容 」 といった方式で書いております。
下線 がコマンド内容を意味していることは、なんとなく予想がつくと思います。 一方 英字# につきましては、Cisco に馴染みのある方ならお分かりかもしれませんが、これは 「モード」 の頭文字を意味しています。 本当はこんな面倒な記述は不要なのですけど、モードの概念が体に叩き込まれるまでは、しばらくこの方式を採用していきます。
[ p# show running-config ]
↑特権モード (Privileged) で実行
[ g# enable password 0 abc ]
↑グローバルコンフィギュレーションモード (Global) で実行
[ i# ip address 10.1.1.1 255.0.0.0 ]
↑インターフェースモード (Interface) で実行
ところで CDPv1 と CDPv2 は、一体なにが違うのか?
そこで CDPv2 メッセージの中身と、CDPv1 を有効化 (厳密には CDPv2 を無効化) する [ p# no cdp advertise-v2 ] コマンドを実行した CDPv1 メッセージを [ p# show cdp neighbors detail ] コマンドから比較し合ったところ、CDPv1 には CDPv2 に比べて、以下の情報が足りませんでした。
・VTP Management
・Duplex
これら以外の情報がないものかと、いつものように Wireshark で CDP フレームを受信した上で解読を試みましたが、こちでも上記の2項目が確認できませんでした。 もっと細かな部分まで突き詰めれば差異を確認できるかもしれませんが、今のところは 「CDPv1 と v2 の違いは "VTP Management" と "Duplex" を通知するか否か」 程度に理解します。

↑図6: CDPv1 は VTP-md, Duplex の項目が足りない
ちなみにですが、最近 「ポートミラーリング」 というテクを覚えました。
これはスイッチが受信したフレームを 「特定のポートから出力」 することができる機能です。 これを使うことで、宛先アドレスが自分宛ではないフレームをキャプチャし、解読できるようになります。 「テク」 という表現を使うには大げさなほど、ネットワークエンジニア界では常識すぎるパケットキャプチャテクニックですが、これを初めて知ったときは (リピータハブにはそういう使い方があったのか!!!) と驚きました。
今回の CDP フレームをキャプチャしたときも、このポートミラーリング技術を使いました。

↑図7: ポートミラーリングってこんなワザ
Wireshark で解析した CDP フレームにつきまして、先ほどは CDPv1 との違いのみ触れましたが、他にも興味深い情報がたくさん確認できました。 たとえば [ p# show cdp neighbors ] で確認できる Capability を Wireshark で解析すると、以下のような形で Capability フィールドにセットされた値を確認できます。
もし興味がありましたら、ぜひ覗いてみてくださいまし。

↑図8: CDP フレーム解析の一例 (Capabilities)
CDP - Switch 編 (ただの捕捉)
本項は 「Switch 編」 とは書きましたが、CDP は Router / Switch に関係なく Cisco 製品ならば共通的に動作します(たぶん)。
ではなぜ Switch 編なのか、というと。。。
このメモを書いているまさにこの日、業務の関係で職場の倉庫を漁っておりましたところ、偶然なのか必然なのか "WS-C2912-XL" というスイッチが出てきました。 「これは――!」 と、さっそくこのスイッチと C1812J を接続させて CDP フレームを解析してみたところ――。

↑図9: いわゆる取り漏れを発見したわけですよ。。
ポート VLAN しか触ったことがない僕ですが "Native VLAN" は分かります。
Dell 製の L3 スイッチを触ったことがある僕は "Management Address" も辛うじて分かります。
しかし "Protocol Hello: cluster Management" は残念ながら分かりませんでいた。
――といったように、スイッチを触らなければ気づかなかったことがありました。
これらを深く追求するつもりはありませんが、スイッチを触ったからこそ気づけたコノ手柄をスイッチへ祝す気持ちを含めて、本項はこのようなタイトルをつけた次第でございますw (^ω^*)
LLDP
CDP フレームがネイバーに届くときは、マルチキャストアドレス (01:00:0C:CC:CC:CC) がフレームの宛先アドレスとして指定されます。 (へぇ、そうなんだ) と特に何も感じませんでしたが、私の本能が勝手にこのマルチキャストアドレスをネット検索しはじめました。
その結果――

――という情報を発見。
( ゚д゚) ・・・
(つд⊂)ゴシゴシ
(;゚д゚) ・・・
(つд⊂)ゴシゴシゴシ
(;゚Д゚) …!? (ちきしょー、これで CDP メモを終われると思ったのに――!!)
みたいな。
どうやら "LLDP" という、IEEE 802.1 ab 標準化された CDP の類似プロトコルがあるようですね。
タメィゴゥ が先かニワトリが先かは分かりませんが、CDP と LLDP を比べたら LLDP の方が先に世に出回ったのでしょう(たぶん)。 Cisco は 「独自プロトコル」 をたくさん使うことで有名ですが、こういう小さな標準化プロトコルまでをも独自化してしまう姿勢を見ると、さすがネットワーク界のトップだけあると頷けますね。
それでは、以下に LLDP のメモを残します。
LLDP は "Link Layer Descovery Protocol" の略でして、前述もしましたが IEEE 802.1 ab で標準化されています。 動作そのものは CDP とあまり変わりがないようです。 また、標準化されていることから異なるベンダー機器同士の設定情報を CDP と同じ要領で確認できそうですね。
不幸にも Cisco C1812J と WS-C2912-XL は LLDP に対応していませんが、幸運にも僕の職場で使っている DELL Powerconnect (L3 スイッチ) が LLDP に対応しているようなので、この L3 スイッチを使ってさっそく LLDP フレームをキャプチャしました。
その結果が、こちら。

( ゚д゚) ・・・
(つд⊂)ゴシゴシ
(;゚д゚) ・・・
(つд⊂)ゴシゴシゴシ
(;゚Д゚) …!? (――え!! なんで DELL スイッチから CDP フレームが送信されてんの!?)
再び、顔文字出現、みたいな。
なんと、Dell 製の L3 スイッチから CDP フレームが放出されていました。
CDP は Cisco 機器オンリーなプロトコルだとばかり思っていましたが、他ベンダーの NW 機器でも CDP を対応している場合があるようですね。 それに加えて Powerconnect では CDP を "ISDP (Industry Standard Discovery Protocol)" という名称で扱っていました。 Industry Standard は 「業界標準」 と訳せますから、それを CDP にバインドさせた Cisco は 「さすがシスコ…やりおる…」 ですよね、ホント。。
以上のことから、ここで LLDP を追究をやめることにしました。
どうせ LLDP は CDP と動作がさほど変わりませんから、CDP を覚えておけは LLDP をあえて追求する必要はないはずです。 強いて言えば、以下の2点だけ覚えておけば問題ないでしょう。
……と、エラそうなことを言っておきながら、実際には L3 スイッチの LLDP フレームの送信設定が、なかなか思い通りに動作しなかったので、なんかもう全てがイヤになって作業を中断 しただけという、本当はとても情けないオチだったことを暴露して今回のメモを終わろうと思いますw (///)
最後に
冒頭にも書きましたが、久しぶりの更新となりました。
ブログ放置の間は 「ブートキャンプ」 と称して、ネットワーク独習を続けてきました。
このブートキャンプをしたことで、
得ることができた一番の 「収穫」 は何だったか。
それはネットワークの知識!!
…と、言いたいところですが、
本当の一番は 「時間の大切さを学べたこと」 でした。
今までのワタクシは、以下のようなライフスタイルを送っておりました。
起床
↓仕事
↓趣味 (読書、日記、ネットサーフィン、ゲーム)
睡眠
それからブートキャンプ生活を始めたことで、
今のワタクシは、以下のようなライフスタイルを送るようになりました。
起床
↓仕事
↓ブートキャンプ
↓趣味 (読書、日記)
睡眠
日常生活の中にブートキャンプを入れ混ぜたことで、
「ネットサーフィン、ゲーム」 の時間が除外されてしまいました。
でも上記で除外されたのは 「娯楽」 ですから、これはまだ大丈夫な方です。
それより問題なのは 「読書」 の時間が削られつつあるということ。
情けないことに、私は人として 「価値観が狭い人間」 です。
その価値観の狭さを、人との会話や 「読書」 によって辛うじてカバーしてきました。
けど、このブートキャンプを始めたことによって、
読書では、興味ある心理学系の書籍よりも、コンピュータ系の書籍を読む機会が増えつつあり、
さらにはお酒の席での会話でも、趣味の話より仕事やコンピュータ系の話題が増えつつある。
こういう傾向が決して悪いわけじゃなく、むしろ社会人としては理想かもしれません。
でも私自身はこういう生き方よりも、もっと人として気持ちのいい生き方を理想としています。
だからといって、ビジネス社会で自分を守るためには、本職の啓発は怠るワケにはいかない。
今まで、このようなことを頭で考えたことはありました。
けれども体で感じたこと、またそういう環境に立たされたことがありませんでした。
そんなことから、ブートキャンプで学んだことは――
時間がもっとほしい!!!
なのでした。
………。
ちなみに上記は僕の 「平日」 の過ごし方です。
一方、「休日」 の過ごし方は――
起床
↓ネットサーフィン + 酒
睡眠
という、熱く語ってきたセリフを すべて台無し にするという。
やっぱりダメ人間要素が強いワタクシなのでしたw (///)
自由人な僕でも、さすがにそれではイクナイと思いましたので、今回パケットフィルタリングの記事をいったん中断しまして、もっと簡単に書ける記事をメモすることにしました。 口直しとしまして、今回は "CDP" というプロトコルをメモさせていただきます。
はじめに
CDP は "Cisco Descovery Protocol" の略でございます。
この名称から分かるように、あの Cisco 製品で使われるプロトコルです。
そうです、ヤマハルータ Love なワタクシでしたが、ネットワークブートキャンプを機に Cisco 製品を扱うことになりました。 とは申しましても、実際に私が業務で触れているのは、相変わらずヤマハルータです。 じゃぁなぜ Cisco ルータを触っているのか? それには以下のような理由があります。
仕事中、ヤマハルータでネットワークを構築していると、自分の知らないプロトコルや技術と出会うことが頻繁にあります。 インフラまわりのプロになりたい僕は、それらの技術を理解するためにさまざまな 「検証」 をします。 その結果をメモすることが本ブログの目的なのですが、今までこれらの 「検証」 には、業務で使い慣れたヤマハルータを使っていました。
ですがインフラまわりのプロを目指すには、ネットワーク技術を知るのはもちろんのこと、やっぱりネットワーク機器のデファクトスタンダードとされている Cisco 製品には大きな魅力を感じてしまいます。
――あ、それなら 「検証」 には Cisco 製品を使えばいいんじゃね!?
という、「ドイツ語と数学の勉強を別々にやるの面倒くさくて、ドイツ語で書かれた数学の教科書で勉強した」 のようなコピペで有名な、動物研究家の天才ムツゴロウさんをマネして、現在は以下のような試みに挑戦しております。
ヤマハルータ → 業務用
シスコルータ → ネットワーク技術勉強用
ここでミソなのは Cisco ルータが 「CCNA 勉強用」 ではなく、あくまで 「ネットワーク勉強用」 なところ。
タイトルには "CCNA" という Cisco 認定資格の文字がありますが、これはあくまで 「CDP は CCNA 試験で扱っている範囲である」 という意味であり、決して 「CCNA 勉強用」 ではありません。 僕は飽きっぽい性格なので 「CCNA 合格を目指す!!」 という形ある具体的な目標を作ってしまうと、どうしても飽きてしまい、途中で投げ出してしまうのです。
ですので 「ネットワークの本質を理解する」 という長期的であり、かつ非具体的な遠い目標を定めつつ、あくまでその過程で CCNA あたりを合格できればいいなぁ……なんて思っております。 けれども、そもそも飽きっぽい自分がそのような長期的な理解の継続ができるのか不安ではありますが。。 ま、それは失敗したら失敗したときに考える、ということでw
ともかく、そのような理由から Cisco ルータを扱うことになりましたw (^ω^*)
では、長ったらしいチラ裏メモはここまでにして、以下から CDP についてメモを残して行きます。
CDP
Cisco ルータを使っているとき、一番はじめに 「なんだこれ?」 と思ったプロトコルが CDP でした。
前述もしましたが CDP は Cisco Descovery Protocol の略ですが、Discovery Protocol という名称から 「何かを探し出すプロトコル」 というイメージが読み取れます。 その言葉通り、これは Cisco 製品に接続されたネイバー (隣接ノード) を探し出し、その機器から設定情報などを確認するプロトコルのようです。
なお Neighbor とは 「隣接したノード」 のことを意味しますが、これは ICMPv6 をメモしたときにも "Neighbor Discovery" という技術にて触れましたので、英語がまったく苦手な 「英検28級」 のワタクシが理解できる数少ない英単語でございます。 …28級は、僕が28歳だから、なんていうくだらない理由はオイトイテ。。

↑図1: CDP は隣接する Cisco 機器同士が設定情報を交換する
※図1には書き忘れましたが、右のルータが RouterB でございます。
「ネイバーの情報を確認する」 と聞いたとき (SNMP みたいなものかな?) と思いましたが、遠からず近からずなご様子。 SNMP は L7 で動作しますが CDP は L2 で動作する ことから、検出できるネイバーの範囲が絞られそうです。 そもそも Neighbor という表現を用いている時点で L2 動作なのでしょうね。
CDP が L2 動作ということは、CDP データのことを 「CDP フレーム」 と呼ぶのが正解なのでしょうか。 ということで、今回のメモは CDP データの内容を解析するときは 「CDP メッセージ」 と呼び、CDP データが物理的に転送されるときは 「CDP フレーム」 といった呼び方をします。 ややこしいかもしれませんが、細かいところから意識していくことが何事にも大切。 でも細かすぎると人から 嫌われる 可能性があるため、人と接するときは程々に。。 OTL
では、さっそく動作させてみましょう。
今回、検証に使った Cisco ルータは "Cisco C1812J" というルータです。 Cisco 練習用にはモッテコイなルータのようで、オークションで4台8000円で購入しました。
いつぞやにメモした "GNS3" というエミュレータがありましたが、アレは僕には合いませんでした。 いや、合わないワケではないのでしょうけど、エミュレータはなんかこう……ノリが楽しくないです。 やっぱり初心者は LAN ケーブルをカチカチ挿して、冷たい筐体が温かくなるプロセスを肌で感じることが大切 な気がします。 スーパーファミコンのカセットの基盤を 「ペロッ」 と舐めて 「舌は苦いけどソフトは動いたぜ!!www」 ってノリが楽しいわけで、エミュレータで SNES をプレイできるようじゃ、それこそ "味" がなくモチベーションがまったく上がりません(あくまで入門者の僕としては)。
ということで皆さま、Cisco を勉強しようと GNS3 をインストールしたはいいが、なかなかモチベーションが上がらないときは、実機をオヌヌメいたします。 言葉には表しにくい、変なモチベーションが上がってきますわよw (///)
――なんて余談は置いといて、以下のような環境を構築しました。

↑図2: ドがつくほどのデフォルト設定
RouterA : 10.1.1.1/30
RouterB : 10.1.1.2/30
2台のルータの FastEthernet 0 ポートを LAN ケーブルで直結させた状態です。 IP アドレスは前述の通りで、それ以外はデフォルトの状態です。 この状態から [ p# show cdp neighbors ] コマンドを実行しますと、さっそくネイバーの情報が確認できました。

↑図3: [ p# show cdp neighbors ] コマンド実行結果
図3 に表示された項目を以下に書き記します。
Device ID | ネイバーのルータ名 |
Local Interface | ネイバーに接続された自インターフェース |
Holdtme | CDP を保持する時間 |
Capability | ネイバーが対応する機能 |
Platform | ネイバーの型番 |
Port ID | ネイバーが接続するインターフェース |
これらの情報を照らし合わせると、RouterB の型番は Cisco 1812-J であり、このルータは 「ルータ・スイッチ・IGMP プロトコル」 に対応しており、CDP メッセージを破棄するまで (ホールドタイム) あと 156 秒であり、この CDP を送受信しているインターフェースは FastEthernet 1 ポートである――というイメージでしょうか。
「で、あり」 という言葉を連呼しており、かつ IGMP をまだ理解していない僕なので、色々なところで自信がありませんが、それでも大体の内容は上記の内容だけでも分かりますね。
また、CDP メッセージの内容を 「詳細」 に確認したい場合は [ p# show cdp neighbor detail ] コマンドを使います。 いわずもがな detail は 「詳細」 という意味ですので、ネイバーが送信する CDP メッセージの詳細を表示してくれます。

↑図4: [ p# show cdp neighbors detail ] コマンド実行結果
図4 に表示された項目を以下に書き記します。 以下、図3 の重複は除外しています。
Entry address | ネイバーの IP アドレス |
Version | ネイバーの IOS バージョン |
advertisement version | CDP のバージョン |
VTP Management Domain | VLAN トランクリンク(?) |
Duplex | 対応する双方向通信方式 |
Power drawn | 電力(消費電力(?) |
説明欄に (?) マークが付加されている項目は、僕がまだよく分かってない項目でございます。
(VTP ってなんだ? Management "Domain" って書いてあるから、ドメイン名のコトかな?) なんて期待しながら [ g# ip domain name ] コマンドからドメイン名を変更しましたが、これがまったく認識せず。 調べたところ、VTP は "VLAN Trunk Protocol" という VLAN 関連の技術のようです。 いやはや、まだまだ知識が足りないようで (///)
また、図4 には "Version: 2" という項目がありますが、CDP にはバージョンが存在します。 デフォルトでは v2 が対応しているようですね。
この CDP メッセージの "Version" と、ルータがメッセージと持ち続ける時間 "Hold Time" と、メッセージを送信する頻度 "Timer" は [ p# show cdp ] コマンドを実行することで確認できました。

↑図5: [ p# show cdp ] コマンド. CDP 設定値
…とっても今さらですけども、以下はコマンドを記述する際の説明です。
本メモではコマンド名を記述するときに 「 英字# コマンド内容 」 といった方式で書いております。
下線 がコマンド内容を意味していることは、なんとなく予想がつくと思います。 一方 英字# につきましては、Cisco に馴染みのある方ならお分かりかもしれませんが、これは 「モード」 の頭文字を意味しています。 本当はこんな面倒な記述は不要なのですけど、モードの概念が体に叩き込まれるまでは、しばらくこの方式を採用していきます。
[ p# show running-config ]
↑特権モード (Privileged) で実行
[ g# enable password 0 abc ]
↑グローバルコンフィギュレーションモード (Global) で実行
[ i# ip address 10.1.1.1 255.0.0.0 ]
↑インターフェースモード (Interface) で実行
ところで CDPv1 と CDPv2 は、一体なにが違うのか?
そこで CDPv2 メッセージの中身と、CDPv1 を有効化 (厳密には CDPv2 を無効化) する [ p# no cdp advertise-v2 ] コマンドを実行した CDPv1 メッセージを [ p# show cdp neighbors detail ] コマンドから比較し合ったところ、CDPv1 には CDPv2 に比べて、以下の情報が足りませんでした。
・VTP Management
・Duplex
これら以外の情報がないものかと、いつものように Wireshark で CDP フレームを受信した上で解読を試みましたが、こちでも上記の2項目が確認できませんでした。 もっと細かな部分まで突き詰めれば差異を確認できるかもしれませんが、今のところは 「CDPv1 と v2 の違いは "VTP Management" と "Duplex" を通知するか否か」 程度に理解します。

↑図6: CDPv1 は VTP-md, Duplex の項目が足りない
ちなみにですが、最近 「ポートミラーリング」 というテクを覚えました。
これはスイッチが受信したフレームを 「特定のポートから出力」 することができる機能です。 これを使うことで、宛先アドレスが自分宛ではないフレームをキャプチャし、解読できるようになります。 「テク」 という表現を使うには大げさなほど、ネットワークエンジニア界では常識すぎるパケットキャプチャテクニックですが、これを初めて知ったときは (リピータハブにはそういう使い方があったのか!!!) と驚きました。
今回の CDP フレームをキャプチャしたときも、このポートミラーリング技術を使いました。

↑図7: ポートミラーリングってこんなワザ
Wireshark で解析した CDP フレームにつきまして、先ほどは CDPv1 との違いのみ触れましたが、他にも興味深い情報がたくさん確認できました。 たとえば [ p# show cdp neighbors ] で確認できる Capability を Wireshark で解析すると、以下のような形で Capability フィールドにセットされた値を確認できます。
もし興味がありましたら、ぜひ覗いてみてくださいまし。

↑図8: CDP フレーム解析の一例 (Capabilities)
CDP - Switch 編 (ただの捕捉)
本項は 「Switch 編」 とは書きましたが、CDP は Router / Switch に関係なく Cisco 製品ならば共通的に動作します(たぶん)。
ではなぜ Switch 編なのか、というと。。。
このメモを書いているまさにこの日、業務の関係で職場の倉庫を漁っておりましたところ、偶然なのか必然なのか "WS-C2912-XL" というスイッチが出てきました。 「これは――!」 と、さっそくこのスイッチと C1812J を接続させて CDP フレームを解析してみたところ――。

↑図9: いわゆる取り漏れを発見したわけですよ。。
ポート VLAN しか触ったことがない僕ですが "Native VLAN" は分かります。
Dell 製の L3 スイッチを触ったことがある僕は "Management Address" も辛うじて分かります。
しかし "Protocol Hello: cluster Management" は残念ながら分かりませんでいた。
――といったように、スイッチを触らなければ気づかなかったことがありました。
これらを深く追求するつもりはありませんが、スイッチを触ったからこそ気づけたコノ手柄をスイッチへ祝す気持ちを含めて、本項はこのようなタイトルをつけた次第でございますw (^ω^*)
LLDP
CDP フレームがネイバーに届くときは、マルチキャストアドレス (01:00:0C:CC:CC:CC) がフレームの宛先アドレスとして指定されます。 (へぇ、そうなんだ) と特に何も感じませんでしたが、私の本能が勝手にこのマルチキャストアドレスをネット検索しはじめました。
その結果――

――という情報を発見。
( ゚д゚) ・・・
(つд⊂)ゴシゴシ
(;゚д゚) ・・・
(つд⊂)ゴシゴシゴシ
(;゚Д゚) …!? (ちきしょー、これで CDP メモを終われると思ったのに――!!)
みたいな。
どうやら "LLDP" という、IEEE 802.1 ab 標準化された CDP の類似プロトコルがあるようですね。
タメィゴゥ が先かニワトリが先かは分かりませんが、CDP と LLDP を比べたら LLDP の方が先に世に出回ったのでしょう(たぶん)。 Cisco は 「独自プロトコル」 をたくさん使うことで有名ですが、こういう小さな標準化プロトコルまでをも独自化してしまう姿勢を見ると、さすがネットワーク界のトップだけあると頷けますね。
それでは、以下に LLDP のメモを残します。
LLDP は "Link Layer Descovery Protocol" の略でして、前述もしましたが IEEE 802.1 ab で標準化されています。 動作そのものは CDP とあまり変わりがないようです。 また、標準化されていることから異なるベンダー機器同士の設定情報を CDP と同じ要領で確認できそうですね。
不幸にも Cisco C1812J と WS-C2912-XL は LLDP に対応していませんが、幸運にも僕の職場で使っている DELL Powerconnect (L3 スイッチ) が LLDP に対応しているようなので、この L3 スイッチを使ってさっそく LLDP フレームをキャプチャしました。
その結果が、こちら。

( ゚д゚) ・・・
(つд⊂)ゴシゴシ
(;゚д゚) ・・・
(つд⊂)ゴシゴシゴシ
(;゚Д゚) …!? (――え!! なんで DELL スイッチから CDP フレームが送信されてんの!?)
再び、顔文字出現、みたいな。
なんと、Dell 製の L3 スイッチから CDP フレームが放出されていました。
CDP は Cisco 機器オンリーなプロトコルだとばかり思っていましたが、他ベンダーの NW 機器でも CDP を対応している場合があるようですね。 それに加えて Powerconnect では CDP を "ISDP (Industry Standard Discovery Protocol)" という名称で扱っていました。 Industry Standard は 「業界標準」 と訳せますから、それを CDP にバインドさせた Cisco は 「さすがシスコ…やりおる…」 ですよね、ホント。。
以上のことから、ここで LLDP を追究をやめることにしました。
どうせ LLDP は CDP と動作がさほど変わりませんから、CDP を覚えておけは LLDP をあえて追求する必要はないはずです。 強いて言えば、以下の2点だけ覚えておけば問題ないでしょう。
CDP | LLDP | |
---|---|---|
規格 | シスコ独自 | IEEE 802.1 ab |
Multicast Address | 01:00:0C:CC:CC:CC | 01:80:C2:00:00:00 01:80:C2:00:00:03 01:80:C2:00:00:0E |
……と、エラそうなことを言っておきながら、実際には L3 スイッチの LLDP フレームの送信設定が、なかなか思い通りに動作しなかったので、なんかもう全てがイヤになって作業を中断 しただけという、本当はとても情けないオチだったことを暴露して今回のメモを終わろうと思いますw (///)
最後に
冒頭にも書きましたが、久しぶりの更新となりました。
ブログ放置の間は 「ブートキャンプ」 と称して、ネットワーク独習を続けてきました。
このブートキャンプをしたことで、
得ることができた一番の 「収穫」 は何だったか。
それはネットワークの知識!!
…と、言いたいところですが、
本当の一番は 「時間の大切さを学べたこと」 でした。
今までのワタクシは、以下のようなライフスタイルを送っておりました。
起床
↓仕事
↓趣味 (読書、日記、ネットサーフィン、ゲーム)
睡眠
それからブートキャンプ生活を始めたことで、
今のワタクシは、以下のようなライフスタイルを送るようになりました。
起床
↓仕事
↓ブートキャンプ
↓趣味 (読書、日記)
睡眠
日常生活の中にブートキャンプを入れ混ぜたことで、
「ネットサーフィン、ゲーム」 の時間が除外されてしまいました。
でも上記で除外されたのは 「娯楽」 ですから、これはまだ大丈夫な方です。
それより問題なのは 「読書」 の時間が削られつつあるということ。
情けないことに、私は人として 「価値観が狭い人間」 です。
その価値観の狭さを、人との会話や 「読書」 によって辛うじてカバーしてきました。
けど、このブートキャンプを始めたことによって、
読書では、興味ある心理学系の書籍よりも、コンピュータ系の書籍を読む機会が増えつつあり、
さらにはお酒の席での会話でも、趣味の話より仕事やコンピュータ系の話題が増えつつある。
こういう傾向が決して悪いわけじゃなく、むしろ社会人としては理想かもしれません。
でも私自身はこういう生き方よりも、もっと人として気持ちのいい生き方を理想としています。
だからといって、ビジネス社会で自分を守るためには、本職の啓発は怠るワケにはいかない。
今まで、このようなことを頭で考えたことはありました。
けれども体で感じたこと、またそういう環境に立たされたことがありませんでした。
そんなことから、ブートキャンプで学んだことは――
時間がもっとほしい!!!
なのでした。
………。
ちなみに上記は僕の 「平日」 の過ごし方です。
一方、「休日」 の過ごし方は――
起床
↓ネットサーフィン + 酒
睡眠
という、熱く語ってきたセリフを すべて台無し にするという。
やっぱりダメ人間要素が強いワタクシなのでしたw (///)
スポンサーサイト