Cisco CDP/LLDPの違いと設定手順|近隣機器の確認コマンドと現場テクニック【実機検証】

Cisco Catalyst 9300を中心としたCDP/LLDP混在ネットワーク構成図

「ここのスイッチ、何と繋がってるの?」と客先で聞かれて、ラックの裏に潜って配線を辿った経験、ネットワークエンジニアなら一度はあるはず。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、混在環境は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 の違いを整理する

CDP と LLDP の違いを整理する

そもそもこの2つは何が違うのか。スペックを並べて整理しておきます。

項目CDPLLDP
規格Cisco独自IEEE 802.1AB(標準)
Cisco機器のデフォルト有効無効
対応機器Cisco製品中心(一部サードパーティ対応あり)ほぼ全ベンダー横断
送信間隔(デフォルト)60秒30秒
保持時間(Holdtime)180秒120秒
マルチキャスト宛先01:00:0C:CC:CC:CC01:80:C2:00:00:0E
Native VLAN通知対応(v2)標準では非対応
Voice VLAN / PoEネゴCDPv2で対応(IP Phone定番)LLDP-MEDで対応

図1: 環境別の使いやすさ比較

Cisco同士の閉じた環境(CDP)

95%

Cisco同士の閉じた環境(LLDP)

78%

マルチベンダー混在(CDP)

30%

マルチベンダー混在(LLDP)

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での設定手順

ここからは実機ベース。Catalyst 9300(IOS-XE 17.9.5)で検証しています。

事前確認項目確認コマンド期待される表示
CDPの状態show cdpGlobal CDP enabled
LLDPの状態show lldpLLDP is not enabled
対象ポートの状態show interfaces statusconnected
ポート単位のCDPshow cdp interface Gi1/0/xSending CDP packets every 60 seconds
Step 1: CDPをグローバル&インターフェースで有効化
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  enabled
⚠ よくあるミス

cdp run はグローバル、cdp enable はインターフェース。両方ONになっていないと隣接が見えない。トラブル時はまず show cdp interface でそのポートのCDPが動いているかを確認するのが鉄則。

Step 2: LLDPをグローバル&インターフェースで有効化
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 seconds

lldp run でグローバル有効化したあと、インターフェースごとに lldp transmit / lldp receive を入れる。デフォルトは lldp run の段階で全ポートに送受信が入るけど、特定ポートだけ受信OFFにしたいケースもあるので明示しておくと運用が楽。

Step 3: 隣接情報の取得テスト
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 1
SW1#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 コマンドの読み方

show コマンドの読み方

detail オプションで取れる情報がトラブルシュートに効く
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 IDSystem Name
隣接機器のIPEntry address(es)Management Addresses
対向ポートPort ID (outgoing port)Port id
Native VLANNative VLAN標準では取れない
DuplexDuplexMAC/PHYコンフィグTLV経由(任意)
バージョン情報VersionSystem Description
隣接が出ないときの切り分け

隣接が出ないときの切り分け

「show cdp neighbors で何も出ない」「LLDPだけ表示されない」というあるあるは、原因がだいたいパターン化されてるので順に潰していけば解決する。

症状主な原因対処法
CDP/LLDP両方とも何も出ないグローバル無効・対向もOFFshow 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 のセットで状態を確認するのが原則。

参考: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でスタンドバイ側がアクティブとして見えているケースも疑う価値あり。