Projects
Writings
Notes
Log
Glossary
Contact

LLDP Field Notes

March 21, 2026

Practical Layer 2 neighbor discovery, TLV decoding, and real-world troubleshooting.

Introduction

LLDP (IEEE 802.1AB) is a Layer 2 discovery protocol that advertises periodic structured metadata about itself to locally connected peers (neighbors). It's a vendor-neutral alternative to CDP.

CDP vs LLDP

CDP → richer (Cisco-specific), more consistent
LLDP → standard, but more fragmented (vendor TLVs)

A neighbor is: “The last device that sent me an LLDP frame on this interface.”

No sessions, no trust model and no state machine; LLDP neighbors are observational — not relational.

WARNING

LLDP is unauthenticated and blindly trusted by most devices.

Any device on the wire can advertise arbitrary identity, capabilities, or management addresses.

Takeaway

LLDP = structured byte stream (everything else is parsing/interpretation).

Core Behaviour & Properties

In real networks, LLDP is primarily used for troubleshooting, physical mapping, and endpoint discovery.

Devices generate LLDP frames in the Control Plane, transmit them on the Data Plane, and process received frames back in the control plane.

This means that depending on how a device is configured, frames can be visible in captures (SPAN/NIC) but not present in a device's LLDP LLDP Neighbor Table.

//
LLDP is not discovery — it is advertisement. Discovery is just the side effect.

The local table which holds the neighbor entries can be inspected on modern switches with typical commands like:

IOS-XE
show lldp neighbors
show lldp neighbors detail

LLDP operates strictly at Layer 2. Frames are Link-Local, single-hop, and never forwarded by switches.

They are always sent to the destination LLDP Multicast MAC: 01:80:C2:00:00:0E.


LLDP includes a TTL field, but unlike IP, it does not represent hop count.

It defines the lifetime (in seconds) of the advertised information in the receiver’s neighbor table.

When the countdown reaches zero, the entry is considered stale and removed from the receiver’s local table.

  • No refresh → entry removed
  • Default TTL: 120 seconds
  • Default transmit: 30 seconds
//
Default TTL is typically 4× the transmit interval. This creates tolerance for packet loss without immediate neighbor flapping.

Frame Structure & TLV Model

An LLDP packet is carried directly inside an Ethernet frame:

  • Destination MAC: 01:80:C2:00:00:0E
  • Source MAC: sending interface MAC
  • EtherType: 0x88CC

The LLDP frame consists entirely of TLVs.

A TLV is a dynamic and flexible datastructure

  • T = Type (type of payload)
  • L = Length (how long the payload is)
  • V = Value (the actual payload)

Some TLV's are mandatory while others are optional and of those optional TLV' LLDP doesn't have a fixed packet layout like an OSPF Hello header - it is simply a variable-length TLV stream where even the mandatory TLVs have variable lengths.

Everything is encoded this way, which makes LLDP highly flexible — but also means parsing becomes non-trivial, especially when vendor-specific TLVs are involved.

//
LLDP is effectively a self-describing protocol — there is no schema outside of TLVs.

TLV Encoding

Each TLV can be broken into two distinct elements - Header and Payload

Total header size: 2 bytes

Total payload size: 1 to 511 bytes

LLDP Packet Layout

LLDP TLV Reference (Field-Oriented)

TypeReqTLVWhat it Actually Tells YouExampleWhy You Care in Practice
0End of LLDPDUTerminates the TLV stream0x0000Parser stops here — missing = malformed frame
1Chassis IDDevice identity (MAC, hostname, or local ID)00:11:22:33:44:55Identify which box you're connected to
2Port IDRemote interface identifierGi1/0/24Identify which port on that device
3TTLLifetime of this advertisement (seconds)120Controls neighbor aging / flapping behavior
4Port DescriptionHuman-readable port label"Uplink to Core"Detect mispatching / labeling errors
5System NameHostnameSW-CORE-01Fast device identification
6System DescriptionOS / platform / versionCisco IOS-XE 17.xFingerprint device type & software
7System CapabilitiesDevice roles (bridge, router, AP, phone, etc.)Bridge, RouterKnow what the device is
8Management AddressReachable management IP10.10.10.1Direct SSH / API target
127Organizationally SpecificVendor extensions (OUI-based TLVs)LLDP-MED, Cisco extensionsPhones, PoE, VLAN, voice configs, etc.

The mandatory TLVs must appear first (and in correct order!), but their values are variable-length, so LLDP is parsed sequentially, not by fixed field offsets.

TAKEAWAY

0–3 define the protocol skeleton. Everything else is optional — and where vendors differentiate.

If you don’t understand TLV Type 127, you don’t fully understand LLDP in production networks.

Unknown TLVs are skipped using the Length field, which allows devices to safely ignore extensions they do not understand.

LLDP TLVs in Wireshark / tshark

TypeReqTLVWireshark / TShark FieldWhat It Means in Practice
1Chassis IDlldp.chassis.idRemote device identity (MAC/hostname)
2Port IDlldp.port.idRemote interface (Gi1/0/24, Eth1, etc.)
3TTLlldp.ttlEntry lifetime (seconds)
4Port Descriptionlldp.port.descrHuman label (often misleading)
5System Namelldp.system.nameHostname
6System Descriptionlldp.system.descOS / platform / version
7System Capabilitieslldp.system.capabilitiesDevice type (bridge/router/AP/phone)
8Management Addresslldp.mgn.addrManagement IP (sometimes multiple)
127Org-Specific (IEEE 802.1)lldp.ieee.*VLAN, priority, DCB
127Org-Specific (IEEE 802.3)lldp.ieee.802_3.*PoE, link aggregation
127Org-Specific (LLDP-MED)lldp.med.*Phones, voice VLAN, location
//
Field names can vary slightly between Wireshark versions and vendors.
//
Use `tshark -G fields | findstr lldp` to enumerate all available LLDP fields.
WARNING

Seeing a TLV in Wireshark does not guarantee the device accepted it.

Capture = data plane

Neighbor table = control plane

If it's in the packet but not in show lldp neighbors detail, the device dropped or ignored it.

Monitoring LLDPs

If you have Wireshark installed you can also set the filter to lldp or if you want to use the CLI navigate to the Wireshark folder and type tshark.exe -D to identify your active network interface and follow:

powershell
tshark.exe -i 8 -Y "lldp" -T fields `
-e frame.time `
-e lldp.tlv.system.name `
-e lldp.port.id `
-e lldp.mgn.addr.ip4

PowerShell LLDP Watcher (tshark)

LLDP
Packet Capture
tshark
PowerShell
Troubleshooting

Live LLDP frame capture → parse → structured neighbor view

Failure Patterns

SymptomMeaningRoot Cause
No neighborsNothing receivedLLDP disabled, VLAN mismatch
One-way neighborAsymmetricTransmit/receive disabled one side
Flapping entriesTTL expiryUnstable link / packet loss / storm control
Missing fieldsPartial TLVsVendor differences

Deterministic Troubleshooting

Follow this order:

  1. Interface up?
  2. LLDP enabled globally?
  3. LLDP enabled on interface?
  4. Frames seen?
  5. Neighbor stable?

Common Gotchas

  1. VLAN / Trunk Issues

LLDP is transmitted untagged by default, meaning: wrong Native VLAN → LLDP disappears along with neighbor visibility.

  1. Security Features
  • Port-security
  • Storm-control
  • 802.1X

These can silently drop LLDP frames depending on configuration.

  1. Virtualization / Hypervisors
  • vSwitches may filter LLDP
  • Containers often don’t pass it
  1. NIC / Driver Behavior
  • Sleep/wake → LLDP bursts
  • Bad drivers → missing frames
  • Low-end NIC → dropping LLDP frames
  1. Control Plane Policing (CoPP)

LLDP is processed by the control plane and may be rate-limited.

  • High CPU → LLDP drops
  • CoPP policies → LLDP throttled

Result: Frames visible in capture, but missing from neighbor table.

Mental Compression

If you remember nothing else:

  • LLDP is direct-neighbor broadcast identity
  • TLVs are the payload and the entire protocol
  • Neighbors are just cached observations
  • There is no convergence (or sessions) - just a unidirectional byte-stream
  • EtherType 0x88CC → always LLDP

All LLDP issues reduce to:

  1. Not sent
  2. Not received
  3. Not parsed
  4. Expired

Resources

Cisco IOS-XE 17.9 LLDP Configuration Guide

Terminology

Dart
Java
Python
Pytest
LaTeX
JavaScript
Jest
TypeScript
React
Gatsby
HTML
Markdown
CSS
Sass
Bootstrap
Tailwind CSS
Django
Flask
Flutter
SQLite

© 2025–2026 manjana/blue-hexagon

Connect with me on GitHub or LinkedIn

PostgreSQL
Nginx
Postman
Terraform
Vim
Git
Github
Heroku
Docker
GitHub Actions
Linux
DigitalOcean
JetBrains
PyCharm
Bash
VMWare
Cisco
Ansible
Paloalto