I’ve lost count of how many times I’ve seen an EtherChannel bundle “working” — both links up, port-channel status green — while all the traffic quietly rides on just one physical link. The bundle looked healthy on paper, but half the aggregate bandwidth was going completely unused because nobody had thought about the load-balancing hash algorithm. That gap between “the channel is up” and “the channel is actually balanced” is exactly what this guide addresses.
What EtherChannel Load Balancing Actually Decides
EtherChannel (Port Aggregation Protocol/PAgP or Link Aggregation Control Protocol/LACP) bundles multiple physical links into one logical interface for increased bandwidth and redundancy. But bundling links doesn’t automatically mean traffic spreads evenly. The switch uses a hashing algorithm on selected packet header fields to deterministically choose which physical link a given flow takes. Critically, a single flow (e.g., one TCP session) always rides one physical link for its entire lifetime — load balancing works at the flow level, not the packet level, to avoid out-of-order delivery.
This means the quality of your load-balancing method choice directly determines how evenly traffic actually spreads across bundled links.
Available Load-Balancing Methods
Cisco Catalyst switches support several hashing inputs, and the available options depend on the platform:
src-mac/dst-mac/src-dst-mac— hash based on source/destination MAC addresssrc-ip/dst-ip/src-dst-ip— hash based on source/destination IP addresssrc-port/dst-port/src-dst-port— hash based on Layer 4 source/destination portsrc-dst-mixed-ip-port— combines IP and port information (available on newer platforms)
The general rule of thumb: the more variability in the hash inputs, the better the distribution across links. In a network where all traffic passes through one router (same source and destination MAC on every packet), src-dst-mac produces terrible balancing since the hash input barely changes. src-dst-ip or src-dst-port is almost always a better choice in routed/multi-host environments.
Checking Current and Available Methods
Switch# show etherchannel load-balance
EtherChannel Load-Balancing Configuration:
src-dst-ip
EtherChannel Load-Balancing Addresses Used Per-Protocol:
Non-IP: Source XOR Destination MAC address
IPv4: Source XOR Destination IP address
IPv6: Source XOR Destination IP address
See which methods your platform supports:
Switch(config)# port-channel load-balance ?
dst-ip Dst IP Addr
dst-mac Dst Mac Addr
dst-port Dst TCP/UDP Port
src-dst-ip Src XOR Dst IP Addr
src-dst-mac Src XOR Dst Mac Addr
src-dst-port Src XOR Dst TCP/UDP Port
src-ip Src IP Addr
src-mac Src Mac Addr
src-port Src TCP/UDP Port
Step 1: Set the Global Load-Balancing Method
This is a global command affecting all EtherChannels on the switch (on most Catalyst platforms — some newer switches support per-channel-group tuning):
Switch(config)# port-channel load-balance src-dst-ip
For environments with heavy east-west flows between many hosts on both ends (e.g., server-to-server traffic in a data center), a Layer 4-aware method often balances best:
Switch(config)# port-channel load-balance src-dst-port
On platforms supporting extended hashing that combines multiple fields:
Switch(config)# port-channel load-balance src-dst-mixed-ip-port
Step 2: Build the Port-Channel (LACP Example)
Switch(config)# interface range GigabitEthernet1/0/1 - 2
Switch(config-if-range)# channel-group 1 mode active
Switch(config-if-range)# exit
Switch(config)# interface Port-channel1
Switch(config-if)# switchport mode trunk
Switch(config-if)# switchport trunk allowed vlan 10,20,30
mode active enables LACP; use mode passive on the far side if you want it to only respond, or mode active on both ends for a fully active negotiation (recommended for predictability).
Step 3: PAgP Alternative (Legacy, Cisco Proprietary)
Switch(config)# interface range GigabitEthernet1/0/1 - 2
Switch(config-if-range)# channel-group 1 mode desirable
LACP is generally preferred today since it’s an open IEEE 802.3ad/802.1AX standard, interoperable with non-Cisco gear.
Step 4: Verification
Switch# show etherchannel summary
Flags: D - down P - bundled in port-channel
I - stand-alone s - suspended
H - Hot-standby (LACP only)
R - Layer3 S - Layer2
U - in use f - failed to allocate aggregator
M - not in use, minimum links not met
u - unsuitable for bundling
w - waiting to be aggregated
d - default port
Number of channel-groups in use: 1
Group Port-channel Protocol Ports
------+-------------+-----------+-----------------------------------------------
1 Po1(SU) LACP Gi1/0/1(P) Gi1/0/2(P)
SU means the port-channel is a Layer 2 bundle that’s in use — exactly what you want to see.
Confirming Actual Traffic Distribution
The configuration alone doesn’t prove balance is happening — you need to check real interface counters:
Switch# show interfaces GigabitEthernet1/0/1 | include packets
Switch# show interfaces GigabitEthernet1/0/2 | include packets
Compare input/output packet and byte counters between the two member links after some traffic has passed. If one link shows dramatically higher counters than the other over time, the hash inputs aren’t varying enough for your traffic pattern, and it’s time to reconsider the load-balancing method.
You can also test hash outcomes directly on some platforms:
Switch# test etherchannel load-balance interface port-channel 1 ip 10.1.1.10 10.1.1.20
This simulates which physical member a given source/destination IP pair would hash to, which is invaluable for pre-validating a change before deploying it in production.
Real-World Enterprise Scenario: Data Center Uplinks
In a data center with a leaf switch connected to a spine via a 4-member EtherChannel, and hundreds of VMs generating east-west traffic across a handful of common gateway IPs, a src-dst-mac hash would perform poorly (many flows share the same MAC pair since they all traverse the same default gateway hop). Switching to src-dst-ip — or better, src-dst-mixed-ip-port if supported — spreads traffic based on the actual endpoint IP diversity and Layer 4 port entropy, producing far more even utilization across all four uplinks. This is a standard tuning step during data center leaf-spine buildouts and is often validated with real traffic captures before finalizing the hash method.
Security and Design Best Practices
- Always match load-balancing method to your actual traffic pattern — don’t just accept the platform default without checking
- Use LACP over PAgP for standards compliance and interoperability with third-party or multi-vendor equipment
- Configure a minimum links requirement so the channel doesn’t stay “up” in a degraded low-bandwidth state unnoticed:
Switch(config-if)# port-channel min-links 2 - Ensure STP treats the port-channel as a single logical link (this is automatic, but verify with
show spanning-tree interface port-channel1) to avoid unexpected blocking behavior - Keep member link speed/duplex identical — mismatched members can bundle inconsistently or get suspended
Common Configuration Mistakes
- Assuming load balancing is per-packet — it’s per-flow, so a single massive file transfer never splits across multiple links
- Using
src-mac/dst-machashing in a routed topology where all traffic shares the same gateway MAC, producing near-zero distribution benefit - Forgetting the load-balancing command is global on many platforms, inadvertently affecting other existing EtherChannels when tuning for one
- Mismatched channel-group modes between switches (e.g.,
active–activeis fine, butpassive–passivenever negotiates, since neither side initiates) - Not verifying with real counters, assuming the presence of
show etherchannel summaryoutput equals actual traffic balance
Troubleshooting Checklist
show etherchannel summary— confirm all expected ports showP(bundled), nots(suspended) orI(standalone)show etherchannel load-balance— confirm the active hashing method matches your intended design- Compare per-member interface counters over time to validate real distribution
show lacp neighbor— confirm LACP parameters match on both ends- Check for mismatched channel modes, speed/duplex, or trunk-allowed VLANs between member ports
Performance Tuning
- For internet-facing edge links carrying many discrete client flows,
src-dst-iporsrc-dst-portusually gives excellent distribution with minimal tuning - For data centers with heavy virtualization and many overlapping IP/port pairs,
src-dst-mixed-ip-port(where supported) typically yields the most even results - Periodically re-baseline your traffic pattern; a hashing method that worked well for one application mix can become unbalanced as workloads shift over time
- Consider increasing the number of bundle members (up to platform maximum) rather than only tuning the hash, if raw throughput ceiling is the actual bottleneck
FAQs
Does changing the load-balancing method cause an outage? Typically no on modern platforms — existing flows may briefly rehash to a different member link, but the port-channel itself stays up.
Can different EtherChannels on the same switch use different hashing methods? On most Catalyst platforms, port-channel load-balance is a global, switch-wide setting; check your specific platform’s configuration guide, as some newer models support per-port-channel tuning.
Is LACP better than PAgP? Generally yes — LACP is an open IEEE standard and works across multi-vendor environments, while PAgP is Cisco-proprietary and Cisco-to-Cisco only.
How many links can I bundle in one EtherChannel? Most Catalyst platforms support up to 8 active links per port-channel, with additional links available as LACP hot-standby members depending on the platform.
Summary
An EtherChannel that shows “up” in show etherchannel summary isn’t the same as an EtherChannel that’s actually balancing load well. The hashing method you choose — based on MAC, IP, port, or a mix — has to match your real traffic pattern, or you’ll end up with bundled links that behave like one active link and one expensive spare. Always validate with real interface counters or the test etherchannel load-balance command, not just configuration state, and revisit your hash method whenever traffic patterns change significantly.
References
- Cisco: Configuring EtherChannel Load Balancing
- Cisco Catalyst 9000 Series Switches Layer 2 Configuration Guide