目录

前言
EtherChannel 的好处
Static On Mode
Port Aggregation Protocol (PAgP)
Link Aggregation Control Protocol (LACP)
EtherChannel 与 STP Cost
Load Balancing 平衡负载
Load Balancing 的技巧

前言

EtherChannel 有很多别名,什麽 Port Channel、Link Aggregation、Teaming,其实全部都指同一种技术,就是把两个或以上的 Physical Ethernet Port (包括: Ethernet、Fast Ethernet、Gigabit Ethernet、10 Gigabit Ethernet 等等) 合併成一个 Logical Port 去使用。设定方法有叁种:分别是 Static (On Mode),PAgP (Port Aggregation Protocol) 和 LACP (Link Aggregation Control Protocol)。其中 PAgP 是 Cisco 专有,只有 Cisco 产品上可以使用。

EtherChannel 的好处

EtherChannel 的好处有两个:

提高 Bandwidth (频宽)

假设把 4 个 100Mb Port 组合起来变成 1 个 400Mb Port,频宽当然提高了!但这只能说是有限度地提高,为什麽这样说呢?由於把 Port 设定成 EtherChannel 後,当有 Traffic 要通过这条 EtherChannel,Switch 就会用它的方法 (方法可以设定,稍後再说) 去把 Traffic 平均分配 (Load Balance) 到 EtherChannel 内不同的 Port,不过需留意的是,Switch 处理 Load Balance 的方法是 Flow Base 的,即是说同一条 Traffic Flow 是会被放在同一个 Port 送出去。所以,就算 4 个 100 Mb Port 加起来有 400 Mb,可是同一条 Flow 最多仍然只有 100Mb 频宽。

Redundancy (冗馀)

意思十分简单,如 2 个 Port 组合在一起成为 EtherChannel,就算死掉 1个,虽然频宽下降了但仍能维持有限度服务,同一时间断掉 2个的话就要怪自己人品不好了,然而你也可以选择把最多 8 个 Port 组合成 1 个 EtherChannel 去弥补人品的问题。

Static On Mode

设定 EtherChannel 最简单的方法就是用 Static On Mode,硬性把 Port 放进同一个 Group。习惯上我们会在 Network Diagram 把属於同一 Group 的 Port 圈起来表示,如下图:

etherchannel

在设定前可先看一下 show spanning-tree。由於 SW1 是 Root Switch,SW2 选择把 Et0/1 设定 Blocking State 去避免 Loop,於是这条 Link 的 Bandwidth 就浪费了。(不熟悉 Spanning Tree 的读者可以到以下这篇看看:Spanning Tree Protocol (STP) )

SW1#show spanning-tree

VLAN0001
  Spanning tree enabled protocol ieee
  Root ID    Priority    32769
             Address     aabb.cc00.0100
             This bridge is the root
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    32769  (priority 32768 sys-id-ext 1)
             Address     aabb.cc00.0100
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time 15

Interface           Role Sts Cost      Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Et0/0               Desg FWD 100       128.1    Shr
Et0/1               Desg FWD 100       128.2    Shr
SW2#show spanning-tree

VLAN0001
  Spanning tree enabled protocol ieee
  Root ID    Priority    32769
             Address     aabb.cc00.0100
             Cost        100
             Port        1 (Ethernet0/0)
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    32769  (priority 32768 sys-id-ext 1)
             Address     aabb.cc00.0200
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time 15

Interface           Role Sts Cost      Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Et0/0               Root FWD 100       128.1    Shr
Et0/1               Altn BLK 100       128.2    Shr

要设定 Static On Mode,请先把其中一只 Switch 的 Port Shutdown,因为在设定时会造成 Loop。

SW2(config)#interface range ethernet 0/0 - 1
SW2(config-if-range)#shutdown

然後,两边都用 channel-group 1 mode on 把 Port 放进同一个 Group 中,1 这个数字叫做 Channel Group Number,可设定 1-256,两只 Switch 的 Channel Group Number 不用相同,不过为方便管理,通常会设一样。

SW1(config)#interface range ethernet 0/0 - 1
SW1(config-if-range)#channel-group 1 mode on
Creating a port-channel interface Port-channel 1

SW1(config-if-range)#
SW2(config)#interface range ethernet 0/0 - 1
SW2(config-if-range)#channel-group 1 mode on
Creating a port-channel interface Port-channel 1

SW2(config-if-range)#

然後可以 no shutdown 刚才的 Port 了。

SW2(config)#interface range ethernet 0/0 - 1
SW2(config-if-range)#no shutdown

我们可以在两只 switch 分别用 show etherchannel summary 去检查一下 etherchannel 是否运作中。

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, no aggregation due to minimum links not met
        m - not in use, port not aggregated due to minimum links not met
        u - unsuitable for bundling
        d - default port

        w - waiting to be aggregated
Number of channel-groups in use: 1
Number of aggregators:           1

Group  Port-channel  Protocol    Ports
------+-------------+-----------+-----------------------------------------------
1      Po1(SU)          -        Et0/0(P)       Et0/1(P)

在最底的表格中看到此 Switch 只有一个 Group 就是 Group 1,这个 Group 现时有两个 Port 分别是 Et0/0 和 Et0/1,两个 Port 的状态都是 P,即 bundled in port-channel,也就是说两个 Port 都已经成功被放进 EtherChannel 了,相反如果见到 I (stand-alone) 的话就是失败了。

我们也可以看看 show spanning-tree,可见 Et0/0 和 Et0/1 只经被隐藏起来,取而代之的是 Po1 (Port Channel 1),由於现时逻辑上只有 1 条 Link 把两只 Switch 相连,因此没有 Port 需要被 Block 去防止 Loop。

SW1#show spanning-tree

VLAN0001
  Spanning tree enabled protocol ieee
  Root ID    Priority    32769
             Address     aabb.cc00.0100
             This bridge is the root
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    32769  (priority 32768 sys-id-ext 1)
             Address     aabb.cc00.0100
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time 15

Interface           Role Sts Cost      Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Po1                 Desg FWD 56        128.514  Shr
SW2#show spanning-tree

VLAN0001
  Spanning tree enabled protocol ieee
  Root ID    Priority    32769
             Address     aabb.cc00.0100
             Cost        56
             Port        514 (Port-channel1)
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    32769  (priority 32768 sys-id-ext 1)
             Address     aabb.cc00.0200
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time 15

Interface           Role Sts Cost      Prio.Nbr Type
------------------- ---- --- --------- -------- --------------------------------
Po1                 Root FWD 56        128.514  Shr

最後看看 show interface port-channel 1,可见 BW 是 20000 Kbit 了 (两个 Ethernet Port 的总和)。

SW1#show interfaces port-channel 1
Port-channel1 is up, line protocol is up (connected)
  Hardware is EtherChannel, address is aabb.cc00.0110 (bia aabb.cc00.0110)
  MTU 1500 bytes, BW 20000 Kbit, DLY 100 usec,
     reliability 255/255, txload 1/255, rxload 1/255

用 Static On Mode 去设定 EtherChannel 非常简单,却有一定风险,因为 Static On Mode 是会假设对方也有设 Static On,中间是没有 Protocol 沟通的。所以如果 Ethernet 的两端一边有设 Static On,但另一端没有设的话,Spanning Tree 混乱造成两个 Port 都会 Forwarding 产生 Loop。这也是刚才实验中提到,要先把两边 Static On Mode 设好才把 Port no shutdown 的原因。由於有 Loop 的风险,所以还是建议用 PAgP 或 LACP 比较好,因为这些 Protocol 有沟通机制,在不能成 EtherChannel 时可自动返回正常的 STP 运算,避免 Loop 发生。

另外要补充的是,不同的 Port 要成为同一组 EtherChannel,速度、Duplex、STP 设定必需相同,如果是 Multilayer Switch,Layer 2 Port 只可和 Layer 2 Port 成 EtherChannel,同样道理,Layer 3 只可跟 Layer 3 在一起。如果大家都是 Access Port,VLAN 必需相同,如果是 Trunk Port,Allowed VLAN 必需相同。其实没什麽需要深究的,总之能设定的东西都要设成一样就是了!

Port Aggregation Protocol (PAgP)

PAgP 是 Cisco 专有,只能在 Cisco Switch 上设定,PAgP 有两个模式,分别是 Desirable 与 Auto,两只使用 PAgP 的 Switch 就像一对等待对方表白的男女,只要有其中一方开口表白就可以走在一起。愿意开口表白的一方叫 Desirable,等待对方表白的一方叫 Auto,所以两只 Switch 只要最少有一方是 Desirable 就可成 EtherChannel。因为 Desirable 一方会主动传送出 PAgP Message,并要求对方回应。但如果双方也设成 Auto,则双方都是被动,就不可能成 EtherChannel 了。当 PAgP 成功建立 EtherChannel 後,PAgP Message 会继续定时传送去维持 EtherChannel。

 DesirableAuto
Desirable
Auto

设定方法亦不难,只要用 channel-group 1 mode desirable 来设 Desirable Mode 和用 channel-group 1 mode auto 来设 Auto Mode 即可。

etherchannel

SW1(config)#interface range ethernet 0/0 - 1
SW1(config-if-range)#channel-group 1 mode desirable
Creating a port-channel interface Port-channel 1

SW1(config-if-range)#
SW2(config)#interface range ethernet 0/0 - 1
SW2(config-if-range)#channel-group 1 mode auto
Creating a port-channel interface Port-channel 1

SW2(config-if-range)#

Link Aggregation Control Protocol (LACP)

至於 LACP 是 IEEE Standard,玩法与 PAgP 大致相同,只不过把两个 Mode 的名称由 Desirable 改成 Active 以及由 Auto 改成 Passive。所以,只要最少有一边是 Active,EtherChannel 就成立。

 ActivePassive
Active
Passive
SW1(config)#interface range ethernet 0/0 - 1
SW1(config-if-range)#channel-group 1 mode active
Creating a port-channel interface Port-channel 1

SW1(config-if-range)#
SW2(config)#interface range ethernet 0/0 - 1
SW2(config-if-range)#channel-group 1 mode passive
Creating a port-channel interface Port-channel 1

SW2(config-if-range)#

不过 LACP 多了一个叫 Hot Standby 的功能,就是除了 8 个 Port 设成 EtherChannel 之外,还可以最多把 8 个 Port 加进去做 Hot Standby Port。Hot Standby Port 的意思是当有 Active Port 因为某些原因 Down 时,Hot Standby Port 可以即时补上,所以,LACP 最多可以容纳 16 port (8 个 Active + 8 个 Hot Standby) 在一个 EtherChannel 之中。至於那个 Port 会被选择成为 Active 则会按 Port Priority 决定,LACP 会先选 Port Priority 较小的做 Active,如 Port Priority 相同则选 Port ID 较小的。请看以下例子:

假设现时有 16 个 Port 在同一个 EtherChannel,由於所有 Port Priority 预设都是 32768,因此系统选择 Port ID 最小的 8 个 Port 成为 Active Port,其他则成为 Hot Standby。

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, no aggregation due to minimum links not met
        m - not in use, port not aggregated due to minimum links not met
        u - unsuitable for bundling
        d - default port

        w - waiting to be aggregated
Number of channel-groups in use: 1
Number of aggregators:           1

Group  Port-channel  Protocol    Ports
------+-------------+-----------+-----------------------------------------------
1      Po1(SU)         LACP      Et0/0(P)       Et0/1(P)       Et0/2(P)
                                 Et0/3(P)       Et1/0(P)       Et1/1(P)
                                 Et1/2(P)       Et1/3(P)       Et2/0(H)
                                 Et2/1(H)       Et2/2(H)       Et2/3(H)
                                 Et3/0(H)       Et3/1(H)       Et3/2(H)

现在尝试把一些 Port 的 LACP Port Priority 变小,Active Port 亦随之改变。留意两只 Switch 相对的 Port 的状态必需相同 (我这边是 Active Port,对方也应该是 Active Port),否则会造成不相容而出现 Secondary Aggregator 的问题。

SW1(config)#int range ethernet 2/0-1, ethernet 3/2-3
SW1(config-if-range)#lacp port-priority 1000
SW1(config-if-range)#end
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, no aggregation due to minimum links not met
        m - not in use, port not aggregated due to minimum links not met
        u - unsuitable for bundling
        d - default port

        w - waiting to be aggregated
Number of channel-groups in use: 1
Number of aggregators:           1

Group  Port-channel  Protocol    Ports
------+-------------+-----------+-----------------------------------------------
1      Po1(SU)         LACP      Et0/0(P)       Et0/1(P)       Et0/2(P)
                                 Et0/3(P)       Et1/0(H)       Et1/1(H)
                                 Et1/2(H)       Et1/3(H)       Et2/0(P)
                                 Et2/1(P)       Et2/2(H)       Et2/3(H)
                                 Et3/0(H)       Et3/1(H)       Et3/2(P)
                                 Et3/3(P)

EtherChannel 与 STP Cost

由於 Bandwidth 的改变,STP Cost 亦会随之而改变。以下为各 Bandwidth 相对之 STP Cost。

SpeedSTP Cost
10 Mbps 100
20 Mbps 56
30 Mbps 47
40 Mbps 41
50 Mbps 35
60 Mbps 33
70 Mbps 30
80 Mbps 23
100 Mbps 19
200 Mbps 12
300 Mbps 9
400 Mbps 8
500 Mbps 7
600 Mbps 6
700 Mbps 5
800 Mbps 5
1 Gbps 4
2 Gbps 3
10 Gbps 2
20 Gbps 1
40 Gbps 1

Load Balancing 平衡负载

既然 EtherChannel 里有多於一个 Port 可以到达目的地,究竟 Switch 会把 Traffic 放上那一个 Port 呢?首先,我们看看怎样设定 Load Balancing,在 Configuration Mode 用指令 port-channel load-balance 。Method 是平衡负载的方法,越高阶的型号会提供越多的选项。现在我们先简单试试 src-ip 这个方法,即是说 Switch 将会跟据 Packet 的 Source IP Address 去选择用 EtherChannel 的哪一个 Port 把 Packet 送出去。

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

SW1(config)#port-channel load-balance src-ip

根据网上文献,Switch 会检查 Packet Source IP 的最後 3 Bits 去计算一个叫 Port ID 值 (这又和我们刚才提到的 Port ID 不同)。请看以下的一些例子:

192.168.1.11 ➡️ 00001011 ➡️ 只取最尾 3 Bits: 011 ➡️ 再变回十进数,Port ID 结果是 3
192.168.1.46 ➡️ 00101110 ➡️ 只取最尾 3 Bits: 110 ➡️ 再变回十进数,Port ID 结果是 6
172.16.20.97 ➡️ 01100001 ➡️ 只取最尾 3 Bits: 001 ➡️ 再变回十进数,Port ID 结果是 1
10.198.45.22 ➡️ 00010110 ➡️ 只取最尾 3 Bits: 110 ➡️ 再变回十进数,Port ID 结果是 6

Port ID 结果会是 0 至 7 其中一个值,那麽,Port ID 是代表那一个 Port 呢?抱歉!Cisco 并没有告诉我们!😲 不过,最起码我们可以预计到,Source Address 是 192.168.1.46 和 10.198.45.22 的 Packet 应该会被放到同一个 Port 传送出去。如果 Load Balance 选用 src-dst-ip 或 src-dst-mac 等有 XOR 的选项的话,请看以下计算例子:

Source IP Address: 192.168.1.30 ➡️ 00011110 ➡️ 只取最尾 3 Bits: 110
Destination IP Address: 192.168.1.68 ➡️ 01000100 ➡️ 只取最尾 3 Bits: 100
然後把结果 XOR: 110 XOR 100 ➡️ 010 ➡️ 再变回十进数,Port ID 结果是 2

Switch 会预先把 Port ID 分配给 EtherChannel 内的 Port,这个分配会尽量公平,例如:EtherChannel 由两 Port 组成, 就把 Port ID 0, 2, 4, 6 (50%) 分配到第一个 Port,把馀下的 1, 3, 5, 7 (50%) 放在另一个 Port。这样 Packet 就可以按刚才算到的 Port ID 结果送到正确的 Port 上。然而,公平并非必然,例如:EtherChannel 是由 3 Port 组成,Switch 就唯有把 0, 3, 6 (37.5%) 分配到 Port 1、1, 4, 7 (37.5%) 分配到 Port 2,馀下的 2, 5 (25%) 分配到 Port 3。关於 Traffic 分配请看下表。

Port
数量
Traffic 分配到各 Port 的百分比
12345678
1 100% X X X X X X X
2 50% 50% X X X X X X
3 37.5% 37.5% 25% X X X X X
4 25% 25% 25% 25% X X X X
5 25% 25% 25% 12.5% 12.5% X X X
6 25% 25% 12.5% 12.5% 12.5% 12.5% X X
7 25% 12.5% 12.5% 12.5% 12.5% 12.5% 12.5% X
8 12.5% 12.5% 12.5% 12.5% 12.5% 12.5% 12.5% 12.5%

由此可见,只有由 2, 4 或 8 Port 组成的 EtherChannel 才能把 Traffic 真真正正平均分配到各个 Port 之上,其他组合都会出现 Traffic 不平衡的现象,设计 EtherChannel 的网路时需要留意。

Load Balancing 的技巧

那麽,究竟哪一个 Load Balancing 方法最好呢?这没有一定答案,要看 EtherChannel 的 Traffic 种类。举个例子,如果 Traffic 中大部份都是 User 到一台 File Server 下载档案的话,接近 User 一方的 Switch 使用 dst-ip 是错误的,因为 Traffic Flow 全部都是去找同一个 destination IP (File Server),设成 dst-ip 会计算出相同的 Port ID 结果,导致 Traffic 无法平均分配。相反,接近 File Server 一方的 Switch 亦不应使用 src-ip,原因相同。无论如何,网络管理人应时刻留意 EtherChannel 上的 Traffic 使用量,以免因为 Traffic 分配不均引致 EtherChannel 未能完全发挥效果。

Coming Soon......

Silent Mode and Non-silent Mode