EtherChannel and LACP: bundling links without breaking spanning tree
Two switches connected by four parallel cables should be a bandwidth win. Without EtherChannel, it's a spanning tree problem: STP sees four redundant paths between the same two bridges and blocks all but one, leaving three cables idle.
EtherChannel solves this by bundling the physical links into one logical interface. Spanning tree runs its math once, on the bundle, instead of once per cable — so all four links forward, and traffic load-balances across them by a hash of source/destination address, port, or a mix.
Static vs. negotiated bundles
You can build a channel two ways:
- Static (
channel-group mode on) — no negotiation, both sides just agree the ports are bundled. Simple, but a misconfigured single link can silently join the bundle in a broken state. - LACP (
active/passive) — the switches negotiate membership continuously. A port that doesn't match the bundle's configuration (speed, duplex, VLAN trunking, etc.) gets excluded automatically instead of quietly breaking things.
Prefer LACP almost everywhere. The negotiation overhead is trivial and the protection against a "successfully" bundled mismatched port is worth it.
Why the hash matters more than people think
Load balancing across bundle members is deterministic, not round-robin — the switch hashes some combination of source/destination MAC or IP (and sometimes L4 port) to pick a member link for a given flow. That means a single high-volume flow (one big file transfer between two hosts) always rides the same physical link, no matter how many members the bundle has. If your traffic pattern is a small number of very large flows, adding more links to the bundle won't help that flow — only concurrent flows benefit. Choosing a hash that includes L4 port information usually spreads traffic more evenly than a MAC-only hash.
The one-sided bundle mistake
If one side is configured as a channel and the other isn't, you don't get a clean failure — you get a bridging loop, because the non-bundled side treats each link as independent and spanning tree on that side can't reconcile what the bundled side is doing. Always verify channel state on both ends before trusting the link.