EtherChannel, CDP and LLDP: bundling links and finding your neighbours
How several cables become one logical link that spanning tree will not block, why the load balancing is per conversation rather than per packet, LACP against PAgP, and the two protocols that tell you what is plugged into each port.
On this page
Two switches, one gigabit link, and a complaint that the uplink is saturated. The obvious fix is a second cable, and the obvious fix does not work: spanning tree blocks it, and you end up with exactly the bandwidth you started with plus a spare. EtherChannel is the answer — several physical links presented to everything above as one interface — and it comes with a load-balancing rule that surprises people the first time they measure it. The second half of this article is about the two protocols that answer the equally practical question of what is on the other end of a cable.
The map
Read this first when short on time. Every branch is a section below.
Why a second cable does nothing
Add a second link between two switches and spanning tree does its job: it sees a loop, and it blocks one of the two ports. You have gained resilience — if the active link fails the blocked one takes over after a convergence delay — and you have gained no bandwidth at all.
EtherChannel changes the terms. Two to eight physical links are bundled into one logical interface, called a port-channel. Spanning tree, the MAC address table, VLAN configuration and every routing protocol see a single interface. There is no loop to detect, so nothing blocks, and every member link carries traffic.
The failover behaviour is the underrated half. When a member link dies, the port-channel stays up with one less member. Spanning tree does not reconverge, the MAC table is not flushed, and no host notices anything beyond a momentary reduction in capacity. Compare that with a blocked-port failover, which triggers a topology change and a burst of flooding across the network.
How the traffic is actually split
Here is the part that catches everyone. A four-gigabit port-channel is not a four-gigabit pipe. Traffic is distributed per conversation, not per packet, and a single conversation is pinned to one member link for its whole life.
The reason is TCP. Sending consecutive packets of one flow down different links means they arrive out of order, because the links have slightly different queues and latencies. A TCP receiver seeing out-of-order segments sends duplicate acknowledgements, and three of those trigger a fast retransmit — so per-packet balancing would make a bundle actively slower than a single link.
Instead the switch computes a hash over selected header fields and uses the result to pick a member. The same source and destination always hash to the same value, so a flow always takes the same path and order is preserved.
| Method | Hashes on | Good when |
|---|---|---|
src-mac | Source MAC | Many clients sending to one server |
dst-mac | Destination MAC | One server sending to many clients |
src-dst-mac | Both MACs, XORed | General layer 2 traffic |
src-dst-ip | Both IP addresses | Traffic crossing a router, where MACs are all the same |
src-dst-port | Both TCP or UDP ports | Few hosts, many connections between them |
Switch(config)# port-channel load-balance src-dst-ip
Switch# show etherchannel load-balanceChoosing correctly means asking which field actually varies in the traffic crossing this link. The classic mistake is a bundle between a switch and a router balanced on MAC addresses: every frame going to the router has the router's MAC as its destination and the same set of sources, so the hash produces one value and one link carries everything.
A single large transfer — a nightly backup, a file copy between two servers — is one conversation and will never exceed the speed of one member link. Two gigabit links bundled do not give a 2 Gbps backup window. If that matters, the answer is a faster link, not more links.
One more constraint: the number of members should ideally be a power of two. The hash output is divided across the members, so with three links the distribution is 3:3:2 rather than even. Two, four or eight members balance cleanly.
Negotiation: LACP, PAgP, or nothing
Both ends have to agree that these ports form a bundle. Three ways to arrange it.
| Protocol | Modes | Standard | Notes |
|---|---|---|---|
| None (static) | on | — | Forced. No negotiation, no verification, no protection against a miscabled bundle. |
| PAgP | desirable, auto | Cisco proprietary | Works only between Cisco devices. |
| LACP | active, passive | IEEE 802.3ad | Works with any vendor, and with servers and hypervisors. |
The mode combinations that form a channel are worth knowing exactly, because a mismatch is a common exam question and a common real fault:
| Side A | Side B | Result |
|---|---|---|
| active | active | Channel forms |
| active | passive | Channel forms |
| passive | passive | No channel — nobody starts the conversation |
| desirable | desirable or auto | Channel forms |
| auto | auto | No channel |
| on | on | Channel forms, unverified |
| on | active or desirable | No channel, and a likely loop while one side forwards independently |
The pattern is simple: at least one side must be willing to start (active or desirable), and the two ends must speak the same protocol. Mixing on with a negotiating mode is the dangerous case, because the static side bundles regardless while the other side treats the links as independent — which is a loop that spanning tree may or may not catch in time.
Use LACP active on both ends unless there is a specific reason not to. It is standard, it detects miswiring, and it removes a member whose partner stops responding.
Building one
All member ports must have identical configuration: same speed, same duplex, same switching mode, same allowed VLAN list, same native VLAN. Anything that differs suspends the offending port.
! configure the members — the port-channel interface is created automatically
SwitchA(config)# interface range GigabitEthernet1/0/23 - 24
SwitchA(config-if-range)# switchport mode trunk
SwitchA(config-if-range)# switchport trunk allowed vlan 10,20,99
SwitchA(config-if-range)# switchport trunk native vlan 999
SwitchA(config-if-range)# channel-group 1 mode active
SwitchA(config-if-range)# exit
! now configure the logical interface — settings here apply to all members
SwitchA(config)# interface Port-channel1
SwitchA(config-if)# switchport mode trunk
SwitchA(config-if)# switchport trunk allowed vlan 10,20,99
SwitchA(config-if)# description Uplink bundle to SwitchBThe order matters. Configure the physical ports identically first, then create the channel, then make further changes on the Port-channel interface where they propagate to every member. Changing a member individually after the bundle exists is what produces a suspended port.
A layer 3 EtherChannel works the same way with one extra step: take the ports out of switching before bundling, then address the logical interface.
SwitchA(config)# interface range GigabitEthernet1/0/1 - 2
SwitchA(config-if-range)# no switchport
SwitchA(config-if-range)# channel-group 2 mode active
SwitchA(config-if-range)# exit
SwitchA(config)# interface Port-channel2
SwitchA(config-if)# no switchport
SwitchA(config-if)# ip address 10.255.0.1 255.255.255.252Reading the result
SwitchA# show etherchannel summary
Flags: D - down P - bundled in port-channel
I - stand-alone s - suspended
R - Layer3 S - Layer2
U - in use f - failed to allocate aggregator
Group Port-channel Protocol Ports
------+-------------+-----------+-----------------------------
1 Po1(SU) LACP Gi1/0/23(P) Gi1/0/24(P)
2 Po2(RU) LACP Gi1/0/1(P) Gi1/0/2(P)| Flag | Meaning |
|---|---|
SU | Layer 2 channel, in use — what you want |
RU | Layer 3 channel, in use |
SD | Layer 2 channel, down — no members bundled |
(P) | This port is bundled and forwarding |
(I) | Stand-alone: the port is up but not part of the bundle, usually a negotiation mismatch |
(s) | Suspended: configuration differs from the other members or the far end |
Almost every EtherChannel fault is one of three things: mismatched negotiation modes, a configuration difference between members, or a difference between the two switches' idea of what the trunk carries. show etherchannel summary plus show interfaces trunk on both ends resolves nearly all of them.
- Server NIC teaming uses the same standard from the other side: Linux calls it bonding mode 802.3ad, VMware calls it LACP on a distributed switch, and the switch configuration is identical to a switch-to-switch bundle.
- Multi-chassis EtherChannel — Cisco's VSS and StackWise, or vPC on Nexus — lets the two ends of a bundle be two different physical switches, so a server survives losing a whole switch rather than just a cable.
- Campus uplinks are almost always bundles now, because the failover behaviour alone justifies it even where the bandwidth is not needed.
CDP: what is on the other end of this cable
Cisco Discovery Protocol is a layer 2 protocol in which every Cisco device announces itself out every interface, once a minute. Neighbours cache what they hear for 180 seconds. It requires no configuration and no IP addressing, which is what makes it useful.
Switch# show cdp neighbors detail
Device ID: DIST-SW1.example.local
Entry address(es):
IP address: 10.0.99.2
Platform: cisco WS-C9300-24T, Capabilities: Switch IGMP
Interface: GigabitEthernet1/0/24, Port ID (outgoing port): GigabitEthernet1/0/1
Holdtime : 143 sec
Version :
Cisco IOS Software, Catalyst L3 Switch Software
Native VLAN: 99
Duplex: fullThat single command answers questions that would otherwise need a site visit: what the neighbour is called, what model it is, which of its ports this cable lands in, its management address, its IOS version, and its native VLAN. Walk a network with show cdp neighbors and you can draw an accurate topology diagram of an undocumented site in an afternoon.
It has two other jobs worth knowing. IP phones learn their voice VLAN and their power requirements over CDP, which is why a phone plugged into a port with a voice VLAN configured simply works. And CDP is what generates the native VLAN mismatch and duplex mismatch warnings in the log — the protocol compares what it advertises with what it hears and complains about the difference.
CDP advertises model, software version and management address to anything on the wire, with no authentication. That is a gift to anyone who plugs into a socket in a lobby. Standard practice is to leave CDP on internal switch-to-switch links and phone ports, and disable it on ports facing users, guests, or another organisation.
Switch(config)# no cdp run ! globally off
Switch(config-if)# no cdp enable ! off on this port only
Switch# show cdp ! is it running, and how oftenLLDP: the same idea, standardised
Link Layer Discovery Protocol is IEEE 802.1AB, and it does what CDP does between devices of different manufacturers. On Cisco equipment it is off by default and has to be enabled explicitly — in both directions, since transmit and receive are separate settings.
Switch(config)# lldp run
Switch(config-if)# lldp transmit
Switch(config-if)# lldp receive
Switch# show lldp neighbors detail| CDP | LLDP | |
|---|---|---|
| Standard | Cisco proprietary | IEEE 802.1AB |
| Default on Cisco | Enabled | Disabled |
| Advertisement interval | 60 seconds | 30 seconds |
| Hold time | 180 seconds | 120 seconds |
| Works with other vendors | No | Yes |
| Voice extension | Built in | LLDP-MED |
LLDP-MED is the extension for endpoints — phones, cameras, access points. It carries the voice VLAN, quality-of-service markings and detailed Power over Ethernet requirements, letting a switch grant a device exactly the wattage it asks for rather than reserving a worst-case allocation. In a mixed-vendor deployment it is what makes a non-Cisco phone work on a Cisco switch without manual configuration.
The security consideration is identical to CDP's: it announces device details to anyone listening, so it belongs on trusted ports and not on ports facing people you have not met.
- Network documentation tools such as NetBox, LibreNMS and SolarWinds build topology maps by walking CDP and LLDP tables across every device, which is why keeping them enabled internally has real operational value.
- Data centre provisioning uses LLDP to verify cabling before configuration: if the server reports it is connected to the wrong leaf switch port, the build stops rather than proceeding on a wrong assumption.
- Wireless access points use LLDP-MED to request the exact power they need, which lets a switch with a limited power budget support more devices than a fixed allocation would.
- EtherChannel
- Cisco's name for link aggregation: two to eight physical links presented as one logical interface.
- Port-channel
- The logical interface an EtherChannel creates. Configuration applied here propagates to all members.
- LACP
- Link Aggregation Control Protocol, IEEE 802.3ad. The vendor-neutral way to negotiate a bundle.
- Suspended port
- A member whose configuration differs from the rest of the bundle or from the far end, so it is excluded rather than allowed to forward independently.
- LLDP-MED
- The media endpoint extension to LLDP, carrying voice VLAN, quality of service and power negotiation for phones and access points.
Recap
- A second link between switches adds no bandwidth, because spanning tree blocks it.
- EtherChannel bundles up to eight links into one logical port-channel that spanning tree sees as a single port.
- Losing a member does not trigger reconvergence or flush MAC tables — the channel simply has less capacity.
- Traffic is balanced per conversation, using a hash of selected header fields, never per packet.
- Per-packet balancing would reorder segments and trigger TCP fast retransmit, making the bundle slower.
- A single flow never exceeds one member link's speed, so bundling does not speed up one big transfer.
- Choose the hash field that actually varies: IP addresses for routed traffic, MACs only within a VLAN.
- LACP is the standard and works with any vendor; PAgP is Cisco-only;
onforces a bundle with no verification. - Active with active or passive forms a channel; passive with passive does not;
onwith a negotiating mode risks a loop. - All members must match in speed, duplex, mode, allowed VLANs and native VLAN, or they are suspended.
- CDP is Cisco-only, on by default, and answers what is plugged into every port — including the phone's voice VLAN.
- LLDP is the standard equivalent, off by default on Cisco, with LLDP-MED handling phones and access points; both should be disabled on untrusted ports.
Questions
Say the answer out loud before opening it.
Why does adding a second link between two switches not increase bandwidth?
Because spanning tree sees a loop and blocks one of the two ports, leaving the original capacity plus an idle standby.
- The blocked port only becomes useful after the active link fails.
- That failover also triggers a topology change and a burst of flooding.
- EtherChannel removes the loop by presenting both links as one interface, so nothing blocks.
The bundle's failover is also cleaner: losing a member changes capacity but not topology, so spanning tree never reconverges.
How does EtherChannel distribute traffic across its members?
By hashing selected header fields and mapping the result to a member, so each conversation is pinned to one link.
- The hash can use source MAC, destination MAC, both, IP addresses, or transport ports.
- The same source and destination always produce the same result, preserving packet order.
- Load is only even if the chosen fields actually vary across the traffic.
Members ideally number a power of two, because the hash space is divided across them and three members give a 3:3:2 split.
Why is per-packet load balancing not used?
Because member links have slightly different queueing delays, so packets of one flow would arrive out of order.
- A TCP receiver seeing out-of-order segments sends duplicate acknowledgements.
- Three duplicates trigger fast retransmit, so the sender retransmits data that was never lost.
- The result is a bundle that performs worse than a single link.
This is the same reason equal-cost multipath routing hashes per flow rather than per packet, even though at layer 3 there is no bundle involved.
Two gigabit links are bundled and a backup job still runs at 1 Gbps. Why?
Because a backup is one conversation between two hosts, and one conversation always uses one member link.
- The hash produces a single value for that source and destination pair.
- No load-balancing method splits a single flow across members.
- The fix is a faster link, or splitting the job into parallel streams between different addresses.
Some applications work around this deliberately by opening several connections from different source ports and using a port-based hash, which does then spread across members.
Which LACP mode combinations form a channel?
Active with active, and active with passive. Passive with passive does not.
- Active sends LACP packets and actively tries to form the bundle.
- Passive responds but never initiates, so two passive ends wait forever.
- The PAgP equivalents are desirable and auto, with the same pattern.
Active on both ends is the usual recommendation because it converges faster and neither end depends on the other to start.
What is wrong with setting one end to "on" and the other to "active"?
No channel forms, and the static end bundles the links anyway while the other end treats them as independent — which is a loop.
- Mode
ondoes not send or expect any negotiation packets. - The active end never receives an answer, so it leaves its ports as individual links.
- Spanning tree may or may not block them in time, depending on timing and configuration.
This is exactly why static mode is discouraged: it removes the verification that would have caught the mismatch before any traffic flowed.
What must match across all member ports of an EtherChannel?
Speed, duplex, switching mode, allowed VLAN list, native VLAN, and whether the port is layer 2 or layer 3.
- A mismatch suspends the offending port rather than bringing down the whole bundle.
- The configuration must also match the corresponding ports on the far switch.
- Changes should be made on the port-channel interface so they propagate to all members.
Configuring the physical ports identically before creating the channel, and afterwards only touching the logical interface, avoids essentially all of these faults.
How do you read "show etherchannel summary"?
The flags after the port-channel name give its state, and the flags after each member give that member's status.
SUis a layer 2 channel in use,RUa layer 3 channel in use,SDa channel that is down.(P)means the port is bundled,(I)means stand-alone,(s)means suspended.- Stand-alone usually means a negotiation mismatch; suspended usually means a configuration difference.
Reading both ends matters, because a port can be bundled locally while the far end has suspended its partner, which produces very confusing traffic behaviour.
How does a layer 3 EtherChannel differ from a layer 2 one?
The member ports are taken out of switching with no switchport before bundling, and the IP address goes on the port-channel interface.
- The bundle then behaves as a single routed interface with the combined bandwidth.
- It carries no VLANs, so allowed lists and native VLANs are irrelevant.
- It is the normal way to join layer 3 switches in a routed campus core.
Because it is routed, spanning tree is not involved at all, which removes an entire category of failure from the core of the network.
What does CDP tell you, and how quickly?
The neighbour's device name, platform, capabilities, management address, the port at its end, its software version and its native VLAN — advertised every 60 seconds and held for 180.
show cdp neighbors detailgives all of it for every port at once.- It works with no IP addressing and no configuration.
- It also detects and logs native VLAN and duplex mismatches.
Walking a site with this one command is the fastest way to build an accurate topology diagram of a network nobody documented.
Why would you disable CDP on some ports?
Because it advertises device model, software version and management address to anyone connected, with no authentication.
- A socket in a lobby or meeting room hands that information to any visitor.
- Software version in particular tells an attacker which vulnerabilities apply.
no cdp enabledisables it per port;no cdp rundisables it globally.
The usual balance is to keep it on switch-to-switch links and phone ports, where it does real work, and turn it off everywhere facing users or other organisations.
What is the difference between CDP and LLDP?
CDP is Cisco proprietary and enabled by default; LLDP is the IEEE 802.1AB standard, works between vendors, and is disabled by default on Cisco devices.
- LLDP advertises every 30 seconds with a 120-second hold time, against CDP's 60 and 180.
- LLDP transmit and receive are configured separately, so both must be enabled.
- LLDP-MED is the extension covering voice VLAN, quality of service and power for endpoints.
In a mixed-vendor network LLDP is the only one that sees the whole topology, which is why monitoring tools ask for it to be enabled everywhere.
How does an IP phone learn which VLAN to use?
From the switch, over CDP or LLDP-MED, once a voice VLAN is configured on the port.
- The switch advertises the voice VLAN ID and the phone begins tagging its traffic with it.
- The PC behind the phone keeps sending untagged frames, which land in the access VLAN.
- LLDP-MED also negotiates the exact Power over Ethernet allocation the phone needs.
This is why disabling both discovery protocols on a phone port breaks the phone even though the VLAN configuration is correct — the phone never learns what to tag with.
What is multi-chassis EtherChannel and why does it matter?
A bundle whose two ends terminate on two different physical switches that present themselves as one, so a device survives losing an entire switch.
- Cisco implements it as VSS or StackWise on Catalyst and vPC on Nexus.
- The attached device runs an ordinary LACP bundle and needs no special support.
- It removes the need for spanning tree to block a redundant uplink to a second switch.
It is the mechanism that made fully active-active campus and data centre designs practical, because before it, redundancy to two switches always meant a blocked link.
A bundle between a switch and a router is unbalanced, with all traffic on one link. What would you change?
The load-balancing method, from a MAC-based hash to one based on IP addresses or transport ports.
- Every frame heading to the router has the router's MAC as its destination, so a MAC hash produces almost no variation.
port-channel load-balance src-dst-ipuses the addresses that do vary.- If only a few hosts are involved, a port-based hash spreads their individual connections.
The load-balance setting is global on most platforms rather than per channel, so changing it affects every bundle on the switch and is worth checking before applying.