「ここのスイッチ、何と繋がってるの?」と客先で聞かれて、ラックの裏に潜って配線を辿った経験、ネットワークエンジニアなら一度はあるはず。CDPかLLDPを動かしておけば、その答えはCLIから3秒で返ってきます。
ただ、CDPはCisco独自プロトコルなので他ベンダー機器とは喋れない。LLDPはIEEE標準だけどCiscoではデフォルト無効、というクセのある組み合わせ。この記事では、Catalyst 9300(IOS-XE 17.9.5)での実機検証をもとに、CDPとLLDPの違い、設定手順、show neighborsの読み方、そして現場でハマりがちなポイントをまとめます。
結論:Cisco同士はCDP、混在環境はLLDPを優先する
細かい違いは後述しますが、現場で迷ったときの判断軸はこれだけ。閉じたCisco環境ならCDPが楽。Juniper、Arista、HPE Arubaなどが混ざる環境ならLLDPを必ず併用する。IP Phoneを使うならCDPの方がVoice VLAN自動学習で詰まりにくい。この3つを覚えておけば9割は事故らないです。
以前、客先のオフィスでJuniper EX2300とCatalyst 9300が混在していて、CDPだけ見て「neighborがいない」と半日悩んだことがあります。lldp run を打った瞬間にズラっと隣接が出てきて、自分の浅さに苦笑い。今では新規構築時、ほぼ反射的に lldp run を入れるクセがついた。
CDP と LLDP の違いを整理する
そもそもこの2つは何が違うのか。スペックを並べて整理しておきます。
| 項目 | CDP | LLDP |
|---|---|---|
| 規格 | Cisco独自 | IEEE 802.1AB(標準) |
| Cisco機器のデフォルト | 有効 | 無効 |
| 対応機器 | Cisco製品中心(一部サードパーティ対応あり) | ほぼ全ベンダー横断 |
| 送信間隔(デフォルト) | 60秒 | 30秒 |
| 保持時間(Holdtime) | 180秒 | 120秒 |
| マルチキャスト宛先 | 01:00:0C:CC:CC:CC | 01:80:C2:00:00:0E |
| Native VLAN通知 | 対応(v2) | 標準では非対応 |
| Voice VLAN / PoEネゴ | CDPv2で対応(IP Phone定番) | LLDP-MEDで対応 |
図1: 環境別の使いやすさ比較
95%
78%
30%
95%
表とグラフだけ見ると「LLDPの方が標準だしいいんじゃん」となりがちだけど、Cisco機器同士に限ればCDPの方が情報量が多い場面もある。Native VLANの不一致やDuplex不整合のような L1/L2 トラブルを潰すとき、CDPv2のNative VLAN/Duplex通知は地味に効きます。
パケットの構造はCDPがSNAP(OUI 00000C)+ TLV、LLDPがEthertype 0x88CC + TLVでけっこう違う。WiresharkでキャプチャするとCDPは「CDP」、LLDPは「LLDP」とプロトコルカラムに出るので識別は簡単。
Catalyst 9300での設定手順
ここからは実機ベース。Catalyst 9300(IOS-XE 17.9.5)で検証しています。
| 事前確認項目 | 確認コマンド | 期待される表示 |
|---|---|---|
| CDPの状態 | show cdp | Global CDP enabled |
| LLDPの状態 | show lldp | LLDP is not enabled |
| 対象ポートの状態 | show interfaces status | connected |
| ポート単位のCDP | show cdp interface Gi1/0/x | Sending CDP packets every 60 seconds |
SW1#configure terminal
SW1(config)#cdp run
SW1(config)#interface GigabitEthernet1/0/1
SW1(config-if)#cdp enable
SW1(config-if)#end
SW1#show cdp
Global CDP information:
Sending CDP packets every 60 seconds
Sending a holdtime value of 180 seconds
Sending CDPv2 advertisements is enabledcdp run はグローバル、cdp enable はインターフェース。両方ONになっていないと隣接が見えない。トラブル時はまず show cdp interface でそのポートのCDPが動いているかを確認するのが鉄則。
SW1(config)#lldp run
SW1(config)#interface GigabitEthernet1/0/24
SW1(config-if)#lldp transmit
SW1(config-if)#lldp receive
SW1(config-if)#end
SW1#show lldp
Global LLDP Information:
Status: ACTIVE
LLDP advertisements are sent every 30 seconds
LLDP hold time advertised is 120 seconds
LLDP interface reinitialisation delay is 2 secondslldp run でグローバル有効化したあと、インターフェースごとに lldp transmit / lldp receive を入れる。デフォルトは lldp run の段階で全ポートに送受信が入るけど、特定ポートだけ受信OFFにしたいケースもあるので明示しておくと運用が楽。
SW1#show cdp neighbors
Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
S - Switch, H - Host, I - IGMP, r - Repeater, P - Phone
Device ID Local Intrfce Holdtme Capability Platform Port ID
R1.example.com Gig 1/0/1 165 R S I ISR4451-X Gig 0/0/0
SW2.example.com Gig 1/0/12 178 S I WS-C2960- Gig 0/1
SEP001122334455 Gig 1/0/2 142 H P IP Phone Port 1SW1#show lldp neighbors
Capability codes:
(R) Router, (B) Bridge, (T) Telephone, (C) DOCSIS Cable Device
(W) WLAN Access Point, (P) Repeater, (S) Station, (O) Other
Device ID Local Intf Hold-time Capability Port ID
R1.example.com Gi1/0/1 120 R Gi0/0/0
SW2.example.com Gi1/0/12 120 B Gi0/1
EX2300-juniper Gi1/0/24 120 B ge-0/0/5
SEP001122334455 Gi1/0/2 180 B,T 1注目ポイントは Gi1/0/24。CDPの方には出てきていないJuniper EX2300が、LLDPでは EX2300-juniper として綺麗に表示されている。これがLLDPを併用しておく実利。
show コマンドの読み方
SW1#show cdp neighbors detail ------------------------- Device ID: R1.example.com Entry address(es): IP address: 10.10.0.1 Platform: cisco ISR4451-X/K9, Capabilities: Router Source-Route-Bridge IGMP Interface: GigabitEthernet1/0/1, Port ID (outgoing port): GigabitEthernet0/0/0 Holdtime : 165 sec Version : Cisco IOS XE Software, Version 17.09.05 advertisement version: 2 Native VLAN: 100 Duplex: full Power Available TLV: Power request id: 0, Power management id: 1, Power available: 0
Native VLAN、Duplex、機器のIPアドレス、IOSバージョン、PoE電力情報。これだけで物理層からL2、軽い構成情報の整合まで一気に追える。たとえばNative VLANの不一致があれば、ここに違う番号が表示されてSyslogに %CDP-4-NATIVE_VLAN_MISMATCH が出るので即気付ける。
| 確認したい情報 | CDP detailでの表示名 | LLDP detailでの表示名 |
|---|---|---|
| 隣接機器のホスト名 | Device ID | System Name |
| 隣接機器のIP | Entry address(es) | Management Addresses |
| 対向ポート | Port ID (outgoing port) | Port id |
| Native VLAN | Native VLAN | 標準では取れない |
| Duplex | Duplex | MAC/PHYコンフィグTLV経由(任意) |
| バージョン情報 | Version | System Description |
隣接が出ないときの切り分け
「show cdp neighbors で何も出ない」「LLDPだけ表示されない」というあるあるは、原因がだいたいパターン化されてるので順に潰していけば解決する。
| 症状 | 主な原因 | 対処法 |
|---|---|---|
| CDP/LLDP両方とも何も出ない | グローバル無効・対向もOFF | show cdp / show lldp 確認、cdp run / lldp run 投入 |
| 特定ポートだけ出ない | no cdp enable がI/Fに残っている | show cdp interface 確認、cdp enable で復旧 |
| 他ベンダー機器が見えない | CDPだけONでLLDP無効 | lldp run でLLDP有効化 |
| 表示が出たり消えたりする | リンクのフラップ、MTU不整合 | show interfaces で input/output errorを確認 |
| Voice VLANが配られない | switchport voice vlan未設定 | switchport voice vlan {id}, mls qos trust device cisco-phone |
| Native VLAN警告がログに出る | 対向と Native VLAN が違う | show cdp neighbors detail で値を比較、揃える |
show cdp neighbors で何も出ないからといって、いきなり機器をリブートしない。再起動でテーブルが空になるだけで根本原因は変わらず、深夜の復旧作業を1段難しくするだけ。まずは show cdp / show lldp / show cdp interface のセットで状態を確認するのが原則。
SW1#show cdp interface GigabitEthernet1/0/24 GigabitEthernet1/0/24 is up, line protocol is up Encapsulation ARPA Sending CDP packets every 60 seconds Holdtime is 180 seconds
「Sending CDP packets every 60 seconds」が見えればそのポートでCDPが動作中。出ていないなら no cdp enable が刺さってる可能性が高いので、コンフィグを grep して確認する。ちなみに、セキュリティポリシーで外向けポートのCDPは止めるのが定石(後述のFAQ参照)。
LLDP-MEDを有効化すると、IP Phone接続時のVoice VLAN通知やPoE電力ネゴが標準プロトコルだけで完結する。lldp tlv-select med-tlv-select 関連を組み合わせて使う。とはいえ、Cisco製IP Phone同士の組み合わせなら、CDPの方が枯れていて事故りにくい印象。
まとめ
CDPはCisco独自で閉じた環境に強く、LLDPはIEEE標準でベンダー横断に強い。実機でも cdp run と lldp run の両方を入れておくと、ほぼ全ての隣接情報が拾える。show cdp neighbors detail で取れるNative VLAN・Duplex・PoE情報は、L1/L2のトラブルシュートでこれまで何度も助けられた現場のお守り。混在環境ではLLDPの併用、IP PhoneがあるならCDPかLLDP-MEDを意識する。これだけ覚えておけば現場で詰まることはまず無いはずです。
よくある質問(FAQ)
Q. CDPはセキュリティ的に止めた方がいいって本当?
外部ネットワーク(インターネット側、業者貸し出し回線)に向くインターフェースでは止めるのが定石です。CDPは平文で機種名・IOSバージョン・IPアドレスをばら撒くので、攻撃者にとってはおいしい情報源。社内のユーザPC接続ポートも no cdp enable しておくと安心。
Q. CDPv1とCDPv2の違いは?
主にTLVの種類が違います。v2ではNative VLAN、Duplex、VTPドメイン、Voice VLAN-Reply、PoE情報などが追加されました。今どきの機器はほぼv2で動くので意識する必要はあまりないけど、たまに古いNetwork Admission ControlやVoIP機器でv1しか喋れないものに遭遇します。
Q. show cdp neighborsの結果をsyslogに残せる?
cdp log adjacency changes をグローバルで入れておくと、隣接が増えた・消えたタイミングでログが出ます。深夜のメンテで「何時何分にスイッチ間が切れたか」を後追いするとき、これがあるか無いかで原因特定スピードが大きく変わる。LLDP側も同様のログ機能があるので、本番系では両方入れておくのがおすすめ。
Q. LLDPでNative VLANは取れない?
標準TLVでは取れません。LLDP-MEDの拡張TLVを使えば一部VLAN情報のやり取りはできるけど、CDPほどの情報量はない。VLAN関連の情報を確実に欲しいシーンではCDPを併用するのが現実解です。
Q. show lldp neighbors に自分自身が表示されることはある?
スタックメンバ間や、ループしているリンクで稀に発生します。基本的には設定ミスや配線ミスのサインなので、出てきたらまずケーブル経路を確認する。あと、StackWise Virtualでスタンドバイ側がアクティブとして見えているケースも疑う価値あり。



