目錄

前言
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>。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