L2 · switching · reviewed

LACP

Link Aggregation Control Protocol

A standard handshake that binds parallel links into one logical port — and refuses to forward on a member the far end has not agreed to.

Presenter modeEmbed this figure

IEEE 802.1AX-2020 §5IEEE 802.3ad-2000 §43

Why it exists

Parallel Ethernet links between two switches are a loop unless something collapses them into one logical port. Spanning tree’s answer is to block; aggregation’s answer is to forward on all of them as one.

Static bundling forwards on a member as soon as the interface is up, with no confirmation the far end agrees. LACP exchanges identity and state first, and refuses members that do not match — which is how it tells a one-way failure or a crossed cable from a working extra link. IEEE 802.1AX-2020 §5

Two cables become one port

Active LACP on both ends exchanges LACPDUs, matches system ID and key, and moves both members into one aggregator. Spanning tree then sees a single logical link.

Two switches have two cables. Without a bundle, spanning tree must block one — parallel links at layer 2 are a loop until something collapses them into one logical port. SW1: Members not bundled. SW2.

SW1Members: not bundledSW2IndividualIndividual
  • Link
  • Blocking
  • Packet in flight
  • Discarded
  • Emphasis
Select a device to read its state. Arrow keys walk the topology.
Text equivalent of this diagram
Devices and links at this step
ElementKindState
SW1switchMembers: not bundled
SW2switch
SW1SW2linkblocking
SW1SW2linkblocking
1 / 4

Two switches have two cables. Without a bundle, spanning tree must block one — parallel links at layer 2 are a loop until something collapses them into one logical port.

What changed

  • Emphasis: Individual
  • SW1: Members → not bundled

How it works

Each end advertises an Actor System identifier, an operational key, port priority, port number, and state flags. It also mirrors what it believes about the partner. Matching Actor and Partner information is what moves a member into the aggregator. IEEE 802.1AX-2020 §5

Activity is a flag: active transmits LACPDUs unsolicited; passive waits to be asked. Two passive ends wait forever. Prefer active on both.

Hashing is a local transmit decision. Each end independently chooses which member to send a flow on. A bundle distributes flows, not packets — one conversation is capped at one member’s speed.

On the wire

Constructed examples, encoded from the field table below them — not captured traffic.

Actor Activity and Synchronization set (state 0x3d), partner still defaulted. This is the first LACPDU on a new member before the far end has answered.

IEEE 802.3 MAC frame
Destination 01:80:C2:00:00:02 (Slow Protocols multicast), EtherType 0x8809. IEEE 802.1AX-2020
Slow Protocols subtype
Subtype 0x01 identifies LACP; Marker is 0x02. IEEE 802.1AX-2020
LACPDU body
Version, then Actor Information and Partner Information TLVs. Collector and Terminator TLVs follow and are not laid out here. IEEE 802.1AX-2020

Configure it

LACP active on both members of a two-link EtherChannel.

Cisco IOS-XE 17.12 · Catalyst 9300, Catalyst 9200draft

  1. interface Port-channel1
     description uplink-bundle
     switchport mode trunk

    The logical interface spanning tree and the rest of the network will see.

  2. interface range GigabitEthernet1/0/1-2
     channel-group 1 mode active

    Active transmits LACPDUs without waiting. Prefer active on both ends; two passives never start, and `mode on` facing LACP is a loop risk.

    Common mistake: Using `mode on` on one end and LACP on the other. The static end forwards before the protocol end agrees.

    IEEE 802.1AX-2020 §5

  3. port-channel load-balance src-dst-ip

    Hash on fields that vary for your traffic. Source-destination MAC alone often pins router-to-router flows onto one member.

    Cisco IOS XE — Configuring EtherChannels §Load balancing

Verify

show etherchannel summary
Po1 with both members (P) and protocol LACP.
show lacp neighbor
Partner System and key matching the far end on each member.
show etherchannel load-balance
The hash fields in use for transmit.

Caveats

  • Member speeds and media should match; mixing can leave a member out or skew the hash.
  • min-links can take the whole Port-channel down when too few members remain — intentional for some designs, surprising for others.

When it breaks

Symptom first, because that is what you have when it happens.

  1. A bundle is configured on both ends but only one member is passing traffic, or the bundle never forms.

    Narrow it down

    1. Check the mode on each end: active, passive, or on.
    2. Confirm both ends are not passive — two passive ends never start.
    3. Look for one end configured statically while the other speaks LACP.

    Cause

    Passive waits to be asked. Two passive ends wait forever. A static bundle facing an LACP bundle is worse: the static end forwards immediately on every member while the other end has not agreed, which is a loop rather than a bundle.

    Fix

    Use active on at least one end, and prefer active on both. Never configure a static bundle facing a protocol one.

    IEEE 802.1AX-2020 §5
  2. Traffic is unevenly distributed across members — one link saturated, the rest nearly idle.

    Narrow it down

    1. Read the hashing policy in use on the transmitting device.
    2. Characterise the traffic: how many distinct flows, and do they vary in the fields being hashed?
    3. Check whether the heavy traffic is a single flow.

    Cause

    A bundle distributes flows, not packets. A hash over source and destination MAC address puts everything between two routers on one member, and a single large transfer is one flow no matter how the hash is configured.

    Fix

    Hash on fields that actually vary — usually including layer 4 ports. Accept that one flow cannot exceed one member; a bundle adds capacity for many conversations, not for one.

  3. A member fails but traffic on the bundle keeps being blackholed.

    Narrow it down

    1. Check whether the failure was detected — a dark fibre with light on one strand keeps the interface up.
    2. Look at whether LACP is still receiving on that member.
    3. Check the configured min-links.

    Cause

    The interface never went down, so the member stayed in the bundle. LACP would have noticed the missing protocol packets, but a static bundle has nothing to notice with.

    Fix

    Run LACP rather than static bundling, and consider micro-BFD on the members where sub-second detection matters.

    IEEE 802.1AX-2020 §5
  4. Members stay individual or show partner information that does not match the neighbour you expect.

    Narrow it down

    1. Compare Actor System and Actor Key on each end of every member.
    2. Trace cables — a crossed member lands on the wrong partner System.
    3. Confirm channel-group numbers and keys are consistent for the intended aggregator.

    Cause

    LACP only bundles when Actor and Partner information agree. A crossed cable or a key mismatch leaves the member out of the aggregator by design.

    Fix

    Fix the cabling or the key. Do not switch the member to static to “make it come up” — that removes the check that caught the mistake.

    IEEE 802.1AX-2020 §5
  5. show etherchannel lists a member as standby and operators treat it as a fault.

    Narrow it down

    1. Check max-bundle and port-priority configuration.
    2. Confirm the member is exchanging LACPDUs and shows a matched partner.
    3. Distinguish hot-standby from independent (mismatch) state.

    Cause

    Under a max-bundle limit, lower-priority members are intentionally standby. That is not the same as a member that never matched Partner Information.

    Fix

    If standby is unintended, raise the member’s port priority or raise max-bundle. If the member is independent, fix the Actor/Partner mismatch instead.

    IEEE 802.1AX-2020 §5

Design notes

A static bundle facing an LACP bundle is a loop risk: the static end forwards immediately while the other end has not agreed. The overhead being avoided is one small frame per second.

PAgP is Cisco-proprietary and is not this protocol. Mixed PAgP/LACP ends do not form a standard bundle. Cisco IOS XE — Configuring EtherChannels §LACP vs PAgP

Misconceptions

A four-member bundle gives one host four times the throughput.
It gives the bundle four times the aggregate capacity across many flows. Any single flow is hashed to one member and is capped at that member’s speed — which is why a bundle is a poor answer to "this one backup job is too slow".
Static bundling is the same thing with less overhead.
A static bundle forwards on a member as soon as the interface is up, with no confirmation the far end agrees. Miscabling that LACP would refuse to bundle becomes a forwarding loop. The overhead being avoided is one small frame per second.
Both ends must use the same hashing policy.
Hashing is a local transmit decision. Each end independently chooses which member to send on, and the two need not match — which also means an imbalance can exist in one direction only.

More walkthroughs

Actor and partner do not agreefailure

Cables are crossed between two port-channels, or keys differ. Each end’s Partner Information fails to match the real neighbour’s Actor Information, so members stay individual — or worse, a static face meets an LACP face.

SW1 expects both members to land on SW2 with the same Actor Key. LACP will only bundle ports whose Actor and Partner information line up. SW1 · key 1: Expects SW2 · key 1. SW2 · key 2. SW3 · unexpected.

SW1 · key 1Expects: SW2 · key 1SW2 · key 2SW3 · unexpected
  • Link
  • Blocking
  • Packet in flight
  • Discarded
  • Emphasis
Select a device to read its state. Arrow keys walk the topology.
Text equivalent of this diagram
Devices and links at this step
ElementKindState
SW1 · key 1switchExpects: SW2 · key 1
SW2 · key 2switch
SW3 · unexpectedswitch
SW1 · key 1SW2 · key 2linkblocking
SW1 · key 1SW3 · unexpectedlinkup
1 / 3

SW1 expects both members to land on SW2 with the same Actor Key. LACP will only bundle ports whose Actor and Partner information line up.

What changed

  • SW1 · key 1: Expects → SW2 · key 1
  • Emphasis on SW1 · key 1 ↔ SW2 · key 2

Active and standby membersdesign-choice

A max-bundle limit or hot-standby policy keeps some members out of distributing. Port priority decides who forwards and who waits — standby is intentional, not a failure.

Three members are configured, but max-bundle is two. LACP still forms the channel; it will not put every physical link into distributing. SW1: max-bundle 2. SW2.

SW1max-bundle: 2SW2Standby
  • Link
  • Blocking
  • Packet in flight
  • Discarded
  • Emphasis
Select a device to read its state. Arrow keys walk the topology.
Text equivalent of this diagram
Devices and links at this step
ElementKindState
SW1switchmax-bundle: 2
SW2switch
SW1SW2linkforwarding
SW1SW2linkforwarding
SW1SW2linkblocking
1 / 3

Three members are configured, but max-bundle is two. LACP still forms the channel; it will not put every physical link into distributing.

What changed

  • SW1: max-bundle → 2
  • Emphasis on SW1 ↔ SW2
  • Emphasis: Standby

Terms

vPC peer-link
The Cisco MLAG link between two peers. It is not a member of the downstream vPC. If it fails while keepalive is alive, the secondary suspends member ports.

Check yourself

  • Both ends of a bundle are configured passive. What happens?
  • A single large file transfer across a four-member bundle runs at one member’s speed. Why?
  • One end is LACP active and the other is static (`mode on`). What is the risk?
  • Must both ends of a bundle use the same hash algorithm?
  • A member’s Partner System does not match the neighbour you cabled toward. What should LACP do?
  • A third member shows as standby while two others are bundling. When is that expected?
  • Why does LACP catch a unidirectional fibre failure that a static bundle misses?
  • What does the Actor System field identify?