Etherchannel on Cisco IOS Catalyst Switch

In this tutorial we‟ll take a look at EtherChannel which is also known as link aggregation. EtherChannel is a technology that lets you bundle multiple physical links into a single logical link. We”ll take a look at how it works and what the advantages of EtherChannel are. Let’s start with an example of a small network:

Etherchannel Example Topology

Take a look at the picture above. I have two switches and two computers connected to each switch.  We use Gigabit Ethernet interfaces everywhere.

Now imagine that H1 sends 800 Mbit of traffic destined to H3 and H2 sends 600 Mbit of traffic destined to H4. The link between the switches will be a bottleneck. We require 800 + 600 = 1400 Mbit but we only have a 1000 Mbit link.

There are two solutions to this problem:

  • Replace the link in between the switches with something that has a higher bandwidth, perhaps a 10-Gigabit link.
  • Add multiple links and bundle them into an EtherChannel.

Since this tutorial is about EtherChannel, we’ll take a look at adding multiple links. Here’s an example:

In this tutorial we‟ll take a look at EtherChannel which is also known as link aggregation. EtherChannel is a technology that lets you bundle multiple physical links into a single logical link. We"ll take a look at how it works and what the advantages of EtherChannel are. Let's start with an example

Etherchannel Example Topology Two Links

In the picture above I have added a couple of extra links. The problem with this setup is that we have a loop between the switches so spanning-tree would block one out of two links. EtherChannel solves this problem because it creates a single virtual link out of these physical links:

Etherchannel Example Topology Logical Link

Spanning tree sees this link as one logical link so there are no loops! EtherChannel will do load balancing among the different links that we have and it takes care of redundancy. Once one of the links fails it will keep working and use the links that we have left.

Keep in mind that the physical links remain the limiting factor. A single traffic flow won’t be able to exceed > 1000 Mbit (single Gigabit link). An Etherchannel is the equivalent of adding more lanes to a highway. The bandwidth increases, but the speed limit doesn’t change.

You can assign up to 16 physical interfaces to an EtherChannel but only 8 interfaces will be active at a time.

If you want to configure an EtherChannel then we have three options:

  • PAgP (Cisco proprietary)
  • LACP (IEEE standard)
  • Manual

PAgP and LACP are negotiation protocols that dynamically configure an Etherchannel. PAgP is a Cisco proprietary protocol so you can only use it between Cisco devices. LACP is an IEEE standard which many vendors support.

It’s also possible to configure a static EtherChannel without these protocols doing the negotiation of the link for you.

If you are going to create an EtherChannel you need to make sure that all interfaces have the same configuration:

  • Duplex.
  • Speed.
  • Native and allowed VLANs.
  • Switchport mode (access or trunk).

PAgP and LACP will check if the configuration of the interfaces that you use is the same.

Configuration

Let’s see if we can configure an Etherchannel. We’ll try all three options but start with PAgP.

PAgP

If you want to configure PAgP there are two options you can choose from. The interface can be configured as:

  • Desirable: The interface will actively ask the other side to become an EtherChannel.
  • Auto: The interface will wait passively for the other side to ask to become an EtherChannel.

Here’s a quick overview with the two PAgP configuration options and whether an EtherChannel will form or not:

Desirable Auto
Desirable Yes Yes
Auto Yes No

Let me show you an example of how to configure PAgP between two switches. I’ll use SW1 and SW2 for this demonstration:

Sw1 Sw2 Two Gigabit Interfaces

SW1 and SW2 each have two Gigabit interfaces which we’ll bundle these into a single logical link.

Here are our options:

SW1(config)#interface GigabitEthernet 0/1
SW1(config-if)#channel-group 1 mode ?
  active     Enable LACP unconditionally
  auto       Enable PAgP only if a PAgP device is detected
  desirable  Enable PAgP unconditionally
  on         Enable EtherChannel only
  passive    Enable LACP only if a LACP device is detected

We use the channel-group command on the interface-level. You can pick any number you like, I’ll go for 1. We need to decide whether we use auto or desirable mode. I’ll configure SW1 to use desirable mode:

SW1(config)#interface range GigabitEthernet 0/1 - 2
SW1(config-if)#channel-group 1 mode desirable

I configure SW1 for PAgP desirable mode. It will actively ask SW2 to become an EtherChannel this way. We can configure SW2 in either auto or desirable mode. I’ll use auto mode:

SW2(config)#interface range GigabitEthernet 0/1 - 2
SW2(config-if)#channel-group 1 mode auto 

With auto mode, SW2 will only respond to incoming PAgP requests. After a few seconds, you’ll see the following message on both switches:

SW1 %LINK-3-UPDOWN: Interface Port-channel1, changed state to up

The switch automatically creates a new port-channel interface:

SW1#show interfaces port-channel 1
Port-channel1 is up, line protocol is up (connected)
  Hardware is EtherChannel, address is fa16.3e15.5fb2 (bia fa16.3e15.5fb2)
  MTU 1500 bytes, BW 2000000 Kbit/sec, DLY 10 usec, 
     reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation ARPA, loopback not set
  Keepalive set (10 sec)
  ARP type: ARPA, ARP Timeout 04:00:00
  Last input 00:03:04, output never, output hang never
  Last clearing of "show interface" counters never
  Input queue: 0/2000/0/0 (size/max/drops/flushes); Total output drops: 0
  Queueing strategy: fifo
  Output queue: 0/40 (size/max)
  5 minute input rate 0 bits/sec, 0 packets/sec
  5 minute output rate 0 bits/sec, 0 packets/sec
     12 packets input, 973 bytes, 0 no buffer
     Received 0 broadcasts (0 multicasts)
     0 runts, 0 giants, 0 throttles 
     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored
     0 input packets with dribble condition detected
     240 packets output, 17496 bytes, 0 underruns
     0 output errors, 0 collisions, 0 interface resets
     0 unknown protocol drops
     0 babbles, 0 late collision, 0 deferred
     0 lost carrier, 0 no carrier
     0 output buffer failures, 0 output buffers swapped out

At the moment, there’s nothing configured under the port-channel interface:

SW1#show run interface Port-channel 1

interface Port-channel1
end

Our two physical interfaces that belong to this EtherChannel only have the channel-group command:

SW1#show run interface GigabitEthernet 0/1

interface GigabitEthernet0/1
 channel-group 1 mode desirable
end
SW1#show run interface GigabitEthernet 0/2

interface GigabitEthernet0/2
 channel-group 1 mode desirable
end

If you want to make any changes like configuring the EtherChannel as a trunk, you need to do this under the port-channel interface. For example:

SW1(config)#interface Port-channel 1
SW1(config-if)#switchport trunk encapsulation dot1q 
SW1(config-if)#switchport mode trunk

When you do this, the switch automatically adds the commands to the physical interfaces as well:

SW1#show run interface GigabitEthernet 0/1

interface GigabitEthernet0/1
 switchport trunk encapsulation dot1q
 switchport mode trunk
 channel-group 1 mode desirable
end
SW1#show run interface GigabitEthernet 0/2

interface GigabitEthernet0/2
 switchport trunk encapsulation dot1q
 switchport mode trunk
 channel-group 1 mode desirable
end

You shouldn’t make any changes to the physical interfaces that belong to the EtherChannel. Always use the port-channel interface.

Let’s continue and take a closer look at the status of the EtherChannel with some show commands. Here’s the first one:

SW1#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
Number of aggregators:           1

Group  Port-channel  Protocol    Ports
------+-------------+-----------+-----------------------------------------------
1      Po1(SU)         PAgP      Gi0/1(P)   Gi0/2(P)

The show etherchannel summary command gives a nice clean overview with all your EtherChannels. It tells us whether the EtherChannel is up and which protocol we use. Here’s another show command:

SW1#show etherchannel 1 port-channel 
		Port-channels in the group: 
		---------------------------

Port-channel: Po1
------------

Age of the Port-channel   = 0d:00h:10m:16s
Logical slot/port   = 2/1          Number of ports = 2
GC                  = 0x00010001      HotStandBy port = null
Port state          = Port-channel Ag-Inuse 
Protocol            =   PAgP
Port security       = Disabled

Ports in the Port-channel: 

Index   Load   Port     EC state        No of bits
------+------+------+------------------+-----------
  0     00     gi0/1   Desirable-Sl       0
  0     00     gi0/2   Desirable-Sl       0

Time since last port bundled:    0d:00h:00m:07s    Gi0/1
Time since last port Un-bundled: 0d:00h:04m:08s    Gi0/2

The show etherchannel command gives you an overview of our EtherChannel. You can see the protocol and interfaces we use, and it tells us whether the logical interface is up.

Here’s the last show command you can use:

SW1#show interfaces GigabitEthernet 0/1 etherchannel 
Port state    = Up Mstr In-Bndl 
Channel group = 1           Mode = Desirable-Sl    Gcchange = 0
Port-channel  = Po1         GC   = 0x00010001      Pseudo port-channel = Po1
Port index    = 0           Load = 0x00            Protocol =   PAgP

Flags:  S - Device is sending Slow hello.  C - Device is in Consistent state.
        A - Device is in Auto mode.        P - Device learns on physical port.
        d - PAgP is down.
Timers: H - Hello timer is running.        Q - Quit timer is running.
        S - Switching timer is running.    I - Interface timer is running.

Local information:
                                Hello    Partner  PAgP     Learning  Group
Port      Flags State   Timers  Interval Count   Priority   Method  Ifindex
Gi0/1     SC	U6/S7   H	30s	 1        128        Any      5001

Partner's information:

          Partner              Partner          Partner         Partner Group
Port      Name                 Device ID        Port       Age  Flags   Cap.
Gi0/1     SW2              0019.569d.5700	Gi0/1      19s SAC	10001 

Age of the port in the current state: 0d:00h:02m:37s

The third method to verify your EtherChannel is to use the show interfaces command. In my example, I am looking at the information of the GigabitEthernet 0/1 interface. Besides information on our local switch, you can also see the interface of our neighbor switch.

Configurations

Want to take a look for yourself? Here you will find the final PAgP configuration of each device.

SW1

hostname SW1
!
interface GigabitEthernet0/1
 switchport trunk encapsulation dot1q
 switchport mode trunk
 channel-group 1 mode desirable 
!
interface GigabitEthernet0/2
 switchport trunk encapsulation dot1q
 switchport mode trunk
 channel-group 1 mode desirable 
!
interface port-channel 1
 switchport trunk encapsulation dot1q 
 switchport mode trunk
!
end

SW2

hostname SW2
!
interface GigabitEthernet0/1
 channel-group 1 mode auto 
!
interface GigabitEthernet0/2
 channel-group 1 mode auto
!
interface port-channel 1
!
end

LACP

LACP is similar to PAgP but uses different terminology:

  • Active: The interface will actively ask the other side to become an EtherChannel.
  • Passive: The interface waits passively for the other side to ask to become an EtherChannel.

At least one switch should use active mode. When both switches use passive mode, nothing will happen.

Active Passive
Active Yes Yes
Passive Yes No

I’ll use the same topology we used for PAgP:

Sw1 Sw2 Two Gigabit Interfaces

We’ll configure SW1 to use active mode:

SW1(config-if)#interface range GigabitEthernet 0/1 - 2
SW1(config-if)#channel-group 1 mode active 

And SW2 will use passive mode:

SW2(config)#interface range GigabitEthernet 0/1 - 2
SW2(config-if)#channel-group 1 mode passive

Let’s verify our work. We can use the same show commands we use for PAgP:

SW1#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      N - not in use, no aggregation
        f - failed to allocate aggregator

        M - not in use, minimum links not met
        m - not in use, port not aggregated due to minimum links not met
        u - unsuitable for bundling
        w - waiting to be aggregated
        d - default port

        A - formed by Auto LAG


Number of channel-groups in use: 1
Number of aggregators:           1

Group  Port-channel  Protocol    Ports
------+-------------+-----------+-----------------------------------------------
1      Po1(SU)         LACP      Gi0/1(P)    Gi0/2(P)

Let’s try the show etherchannel command:

SW1#show etherchannel 1 port-channel
                Port-channels in the group: 
                ---------------------------

Port-channel: Po1    (Primary Aggregator)

------------

Age of the Port-channel   = 0d:00h:01m:43s
Logical slot/port   = 16/0          Number of ports = 2
HotStandBy port = null 
Port state          = Port-channel Ag-Inuse 
Protocol            =   LACP
Port security       = Disabled
Load share deferral = Disabled   

Ports in the Port-channel: 

Index   Load   Port     EC state        No of bits
------+------+------+------------------+-----------
  0     00     Gi0/1    Active             0
  0     00     Gi0/2    Active             0

Time since last port bundled:    0d:00h:01m:04s    Gi0/2

And last but not least, let’s try show interfaces:

SW1#show interfaces GigabitEthernet 0/1 etherchannel
Port state    = Up Mstr Assoc In-Bndl 
Channel group = 1           Mode = Active          Gcchange = -
Port-channel  = Po1         GC   =   -             Pseudo port-channel = Po1
Port index    = 0           Load = 0x00            Protocol =   LACP

Flags:  S - Device is sending Slow LACPDUs   F - Device is sending fast LACPDUs.
        A - Device is in active mode.        P - Device is in passive mode.

Local information:
                            LACP port     Admin     Oper    Port        Port
Port      Flags   State     Priority      Key       Key     Number      State
Gi0/1     SA      bndl      32768         0x1       0x1     0x2         0x3D  

Partner's information:

                  LACP port                        Admin  Oper   Port    Port
Port      Flags   Priority  Dev ID          Age    key    Key    Number  State
Gi0/1     SP      32768     5e00.0001.8000  18s    0x0    0x1    0x2     0x3C  

Age of the port in the current state: 0d:00h:01m:37s

As you can see the protocol is now LACP, we have a Port-channel 1 interface with two member physical interfaces.

Configurations

Want to take a look for yourself? Here you will find the final LACP configuration of each device.

SW1

hostname SW1
!
interface GigabitEthernet0/1
 channel-group 1 mode active 
!
interface GigabitEthernet0/2
 channel-group 1 mode active 
!
interface port-channel 1
!
end

SW2

hostname SW2
!
interface GigabitEthernet0/1
 channel-group 1 mode passive 
!
interface GigabitEthernet0/2
 channel-group 1 mode passive
!
interface port-channel 1
!
end

Manual

Instead of PAgP or LACP, we can also manually enable the Etherchannel. I’ll use the same topology to demonstrate this:

Sw1 Sw2 Two Gigabit Interfaces

Here’s the configuration:

SW1(config)#interface range GigabitEthernet 0/1 - 2
SW1(config-if-range)#channel-group 1 mode on
SW2(config)#interface range GigabitEthernet 0/1 - 2
SW2(config-if-range)#channel-group 1 mode on

That’s all there is to it. Let’s try our show commands. We’ll start with an overview:

SW1#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      N - not in use, no aggregation
        f - failed to allocate aggregator

        M - not in use, minimum links not met
        m - not in use, port not aggregated due to minimum links not met
        u - unsuitable for bundling
        w - waiting to be aggregated
        d - default port

        A - formed by Auto LAG


Number of channel-groups in use: 1
Number of aggregators:           1

Group  Port-channel  Protocol    Ports
------+-------------+-----------+-----------------------------------------------
1      Po1(SU)          -        Gi0/1(P)    Gi0/2(P)

In the output above, you can see we don’t use any protocol. Let’s take a closer look at the Port-channel interface:

SW1#show etherchannel 1 port-channel
                Port-channels in the group: 
                ---------------------------

Port-channel: Po1
------------

Age of the Port-channel   = 0d:00h:06m:54s
Logical slot/port   = 16/0          Number of ports = 2
GC                  = 0x00000000      HotStandBy port = null
Port state          = Port-channel Ag-Inuse 
Protocol            =    -
Port security       = Disabled
Load share deferral = Disabled   

Ports in the Port-channel: 

Index   Load   Port     EC state        No of bits
------+------+------+------------------+-----------
  0     00     Gi0/1    On                 0
  0     00     Gi0/2    On                 0

Time since last port bundled:    0d:00h:01m:21s    Gi0/2
Time since last port Un-bundled: 0d:00h:04m:05s    Gi0/2

And we can check one of the two physical interfaces and see the Etherchannel information:

SW1#show interfaces GigabitEthernet 0/1 etherchannel
Port state    = Up Mstr In-Bndl 
Channel group = 1           Mode = On              Gcchange = -
Port-channel  = Po1         GC   =   -             Pseudo port-channel = Po1
Port index    = 0           Load = 0x00            Protocol =    -

Age of the port in the current state: 0d:00h:01m:41s

That’s all we have.

Configurations

Want to take a look for yourself? Here you will find the final manual configuration of each device.

SW1

hostname SW1
!
interface GigabitEthernet0/1
 channel-group 1 mode on 
!
interface GigabitEthernet0/2
 channel-group 1 mode on 
!
interface port-channel 1
!
end

SW2

hostname SW2
!
interface GigabitEthernet0/1
 channel-group 1 mode on 
!
interface GigabitEthernet0/2
 channel-group 1 mode on
!
interface port-channel 1
!
end

Load Balancing

The last thing I want to show you about EtherChannel is load-balancing. Take a look at the following output:

SW1#show EtherChannel load-balance 
EtherChannel Load-Balancing Configuration:
        src-mac

EtherChannel Load-Balancing Addresses Used Per-Protocol:
Non-IP: Source MAC address
  IPv4: Source MAC address
  IPv6: Source MAC address

Use the show etherchannel load-balance command to see what the default configuration is. As you can see, this switch load balances based on the source MAC address. If you want, you can change this behavior with the port-channel load-balance command:

SW1(config)#port-channel load-balance ?
  dst-ip       Dst IP Addr
  dst-mac      Dst Mac Addr
  src-dst-ip   Src XOR Dst IP Addr
  src-dst-mac  Src XOR Dst Mac Addr
  src-ip       Src IP Addr
  src-mac      Src Mac Addr

There are plenty of options to choose from, including combinations of source and/or destination MAC or IP addresses.

Why should you care about load balancing? Take a look at the picture below:

Etherchannel Load Balancing Scenario

We have SW1 and four computers. On the right side, we have SW2 and a router. The default load-balancing mechanism is source MAC address. This means that ALL traffic from one MAC address will be sent down one and the same physical interface, for example:

  • MAC address AAA will be sent using SW1’s gi0/1 interface.
  • MAC address BBB will be sent using SW1’s gi0/2 interface.
  • MAC address CCC will be sent using SW1’s gi0/1 interface.
  • MAC address DDD will be sent using SW1’s gi0/2 interface.

Since we have multiple computers this is fine, both physical links on SW1 will be used for our EtherChannel so depending on how much traffic the computers send it will be close to a 1:1 ratio.

It’s a different story for SW2 since we only have one router with MAC address EEE. It will pick one of the physical interfaces so ALL traffic from the router will be sent down interface GigabitEthernet 0/1 or 0/2. One of the physical links won’t be used at all.

If this is the case, it might be better to change your load balancing algorithm. For example, on SW2 we could do this:

SW2(config)#port-channel load-balance dst-mac

If we switch the load balancing to destination MAC address on SW2 then traffic from our router to the computers will be load-balanced amongst the different physical interfaces because we have multiple computers with different destination MAC addresses.

Configurations

Want to take a look for yourself? Here you will find the final load-balancing configuration of each device.

SW1

hostname SW1
!
interface GigabitEthernet0/1
 channel-group 1 mode active 
!
interface GigabitEthernet0/2
 channel-group 1 mode active
!
interface port-channel 1
 switchport trunk encapsulation dot1q 
 switchport mode trunk
!
end

SW2

hostname SW2
!
interface GigabitEthernet0/1
 channel-group 1 mode passive
!
interface GigabitEthernet0/2
 channel-group 1 mode passive
!
interface port-channel 1
 switchport trunk encapsulation dot1q 
 switchport mode trunk
!
port-channel load-balance dst-mac
!
end

That’s all I have on EtherChannels for now, hopefully, this has been helpful to you! If you have any questions feel free to leave a comment.

Conclusion

You have now learned what an EtherChannels are and how to configure them:

  • An EtherChannel is a logical interface that bundles multiple physical interfaces.
  • Spanning-tree sees an Etherchannel as a single interface so it won’t block redundant physical links.
  • There are three options to configure an EtherChannel:
    • PAgP: A Cisco proprietary protocol.
    • LACP: An IEEE standard.
    • Manual: Bundle multiple physical interfaces without any protocol.
  • EtherChannels support multiple load-balancing options. Make sure you select a load-balancing algorithm that matches your traffic patterns.

I hope you enjoyed this lesson. If you have any questions, please leave a comment.

 

Tags: , , , ,


Forum Replies

  1. Hi, Rene. Thanks for info. What if you add note about pagp silent/non-silent submode? Thanks.

  2. Hi Hans,

    The default is src mac based load balancing.

    From SW1’s perspective this is a great choice as each computer has a different MAC address. Traffic from the computers will be load balanced when it is sent from SW1 to SW2.

    From SW2 to SW1, it’s another story. The MAC address of the router remains the same so using src mac based load balancing is not a good idea. All traffic will be sent using the same physical interface. It’s better to change it to dst mac address load balancing since the destination MAC address will be one of the four computers.

    The same

    ... Continue reading in our forum

  3. Thank you very much Laz for this intuitive explanation

  4. Hello Laz,

    Thank you very much.

  5. Hello Laz.

    Thank you very much!

123 more replies! Ask a question or join the discussion by visiting our Community Forum