LACP:把四條網路線合體成一座橋
Access、Trunk 之後,當一條幹道不夠用——LACP 如何把多條實體鏈路捆成一個邏輯介面,鏈路數超過硬體上限時又是誰決定誰上場、誰待命
Access port 只服務單一 VLAN、收送 untagged frame;Trunk port 用 IEEE 802.1Q tag 讓多個 VLAN 共用同一條鏈路。LACP(IEEE 802.1AX,前身 802.3ad)把多條實體鏈路捆成一個 Port-Channel 邏輯介面——而「LACP 上承載 access/trunk」的真正涵義是:access/trunk 模式設定在 Port-Channel 這個邏輯介面上,所有實體成員繼承它。LACP 管「有幾條車道」,access/trunk 管「車道上跑哪些 VLAN」,兩者是不同層的事。
在一座叫 SW-A 的交換器大樓裡,每個樓層住著不同的部門:VLAN 10 是業務部,VLAN 20 是工程部。大樓的每個門口都站著一位 Port 警衛。
第一幕:Access Port——只認一個社區的單純警衛
一樓門口的 Access Port 是個單純到近乎固執的警衛。他胸前掛著一塊牌子:「本門專屬 VLAN 10」。
業務部的 PC1 走到門口,遞出一個乾乾淨淨、什麼標籤都沒貼的 Frame(untagged frame)。Access Port 看都不用看第二眼:「你從我這個門進來的,那你就是 VLAN 10 的人。」他在心裡默默把這個 Frame 歸給 VLAN 10,但不在 Frame 上貼任何標籤——因為他的世界裡只有一個 VLAN,貼標籤是多餘的。
電腦、印表機這些終端裝置也喜歡他:它們根本看不懂 VLAN 標籤,跟 Access Port 打交道最輕鬆。
第二幕:Trunk Port——幫每個乘客貼登機證的海關
麻煩來了。業務部的 PC1 要找的同事坐在對面那棟 SW-B 大樓,而兩棟樓之間只有一條跨樓鏈路。這條鏈路得同時運送 VLAN 10 和 VLAN 20 的 Frame——如果混在一起送過去,對面怎麼知道誰是業務部、誰是工程部?
這時站在跨樓鏈路門口的 Trunk Port 開口了:「交給我。我這裡是海關,每個出境的 Frame 都要貼登機證。」
他掏出一張 4 bytes 的 802.1Q tag,插進 Frame 的 Source MAC 後面:前 2 bytes 是 TPID,固定寫 0x8100——這是暗號,告訴對面「這張 Frame 有貼標籤」;後 2 bytes 裡藏著 12 bits 的 VLAN ID,寫著 10 或 20。
「到了對面,SW-B 的 Trunk Port 會撕掉標籤、看一眼 VLAN ID,把你送到正確的樓層。」Trunk Port 補充了一條例外:「喔對,Native VLAN 的乘客不用貼——那是我們兩邊事先講好的默契,沒貼標籤的一律當作 Native VLAN。所以兩邊的 Native VLAN 一定要講好一致,不然乘客會被送錯樓。」
第三幕:一條橋不夠了——LACP 登場
公司越長越大,跨樓那條橋開始塞車。而且更可怕的是:橋只有一條,斷了就全公司失聯。
有人提議:「再拉三條橋不就好了?」
大樓的交通總管 STP 立刻搖頭:「不行。四條橋同時通車會形成迴圈,Broadcast 會在裡面繞到天荒地老。按規矩,我只留一條,其他三條我會 Block 掉。」四條橋,三條閒置——錢白花了。
這時,一位穿著工程師制服、手裡拿著協議書的角色走了進來:LACP。
「你們的問題我見多了。」LACP 說,「不要讓 STP 看到四條橋——讓他只看到一條。我來把四條實體橋捆成一座合體橋,名字叫 Port-Channel 1。」
但 LACP 是個講程序的人,他絕不硬捆。他先站在 SW-A 這頭,每隔一段時間送出一份叫 LACPDU 的協議書到對面:「我是 SW-A,我想把這四條鏈路聚合起來,你同意嗎?」
- 如果 SW-A 設成 active,他會主動送協議書;
- 如果設成 passive,他只會等著,別人送來才回覆。
所以 active 配 active 能成、active 配 passive 也能成,但 passive 配 passive 永遠成不了——兩個都在等對方先開口,就像兩個都不敢先告白的人。
協議書一來一往,LACP 還會核對成員資格:「四條鏈路的速率、雙工要一樣,VLAN 相關設定要一致,有一條不合格就踢出去。」(在 Cisco 的 EtherChannel 上,他最多收 8 條 active 成員,外加 8 條 standby 候補。)他平時每 30 秒寄一次協議書確認對方還活著(slow timer),趕時間的話可以調成每 1 秒一次(fast timer),連續三次沒收到回音就判定對方失聯。
LACP 遞出協議書時,從不自稱「我」,而是稱自己一方為 Actor(送出這份協議書的當事人),對面則是 Partner。協議書裡除了「我想聚合」之外,還夾帶一組身分證——System ID,由 System Priority(數字,預設 32768)加上這台交換器的 MAC Address 組成。兩邊一交換身分證,數字較低的 System Priority(同值再比 MAC)就贏了,成為這座橋的「決策者」。
決策者的權力用在哪?公司後來又拉了兩條新橋,總數變成 6 條,但 SW-A 的硬體規格只吃得下 4 條 active。決策者這時翻開每條實體鏈路自己附上的 Port Priority(數字,預設一樣是 32768):數字最低的 4 條留在 active,優先權相同就比 Port Number,數字小的優先——輸家不是被踢出局,是被降級成 standby,隨時待命,等某條 active 斷線時立刻遞補。
合體橋建成了。STP 總管走過來一看:「咦?現在只有一條 Port-Channel?那沒有迴圈,通行!」四條橋的頻寬全部用上,斷一條,剩下三條無縫接手。
第四幕:合體橋上,誰來決定通行證制度?——「LACP 承載 access/trunk」的真義
新問題來了。SW-B 那頭的海關喊話:「你們這座合體橋,到底是 Access 還是 Trunk?我要知道 Frame 上該不該有標籤!」
四條實體橋面面相覷——該由誰回答?
LACP 拍拍合體橋的橋身:「都不是你們回答。從你們加入 Port-Channel 的那一刻起,你們就沒有自己的身分了。access 還是 trunk,是設定在 Port-Channel 這個邏輯介面上的,你們四個只是繼承它。」
這就是「LACP 上承載 access/trunk」的涵義——兩件事根本在不同的層:
- LACP 負責的層:把幾條實體鏈路捆成一個邏輯介面(車道有幾條、誰是成員、活著沒)。
- access/trunk 負責的層:這個邏輯介面上跑什麼 VLAN、貼不貼 802.1Q 標籤(車道上的通行證制度)。
管理員在 interface port-channel 1 底下敲入 switchport mode trunk、switchport trunk allowed vlan 10,20——這套通行證制度自動下推到四條實體成員身上,一個字都不用對成員個別設定(也不允許)。整個 Port-Channel 對外就像一個超寬的 Trunk Port:STP 把它當一個 port 看,MAC Address Table 學習時也記「這個 MAC 在 Port-Channel 1」,而不是記在某條實體鏈路上。
同理,如果接的是一台伺服器、只需要單一 VLAN,就在 Port-Channel 上設 switchport mode access——它就是一個超寬的 Access Port。
最後 PC1 的 Frame 出發了。海關 Trunk Port(現在的身分是 Port-Channel 1 的通行證制度)幫它貼上 VLAN 10 的標籤,LACP 的調度員按 hash 演算法看了一眼 Frame 的來源與目的(MAC/IP/Port 的組合),指定它走第 2 條實體橋——同一條 flow 的所有 Frame 都會走同一條實體橋,不會一個 Frame 拆成四份走四條(所以單一 flow 的速度上限仍是單條實體鏈路的頻寬,聚合提升的是總容量,不是單流速度)。
Frame 抵達 SW-B,標籤被撕下,VLAN 10,三樓,業務部——送達。
技術摘要
graph TD
subgraph SWA["SW-A"]
A1["AccessPort-VLAN10"]
PC_A["Port-Channel1-Trunk"]
end
subgraph SWB["SW-B"]
PC_B["Port-Channel1-Trunk"]
A2["AccessPort-VLAN10"]
end
PC1["PC1-VLAN10"] -->|untagged| A1
A1 --> PC_A
PC_A ==>|"LACP聚合x4-802.1Q-tagged"| PC_B
PC_B --> A2
A2 -->|untagged| PC2["PC2-VLAN10"]
- Access port:屬於單一 VLAN,收送 untagged frame;VLAN 歸屬由 port 設定決定,不靠標籤。
- Trunk port:以 IEEE 802.1Q 承載多 VLAN。Tag 共 4 bytes:TPID(
0x8100)+ PCP(3 bits)+ DEI(1 bit,舊版標準稱 CFI)+ VLAN ID(12 bits)。Native VLAN 不貼標籤,兩端必須一致。 - LACP 標準演進:IEEE 802.3ad-2000 → 2008 年移入 802.1 工作組成為 IEEE 802.1AX-2008,現行版本 802.1AX-2020。
- 協商模式:active 主動發送 LACPDU、passive 只回應;active-active ✅、active-passive ✅、passive-passive ❌(無法成型)。
- Timer:slow(預設)每 30 秒送 LACPDU、fast 每 1 秒;timeout 為 3 倍間隔(90 秒 / 3 秒)。
- 成員一致性:速率、雙工、switchport 相關設定必須一致才能加入;Cisco EtherChannel 最多 8 條 active + 8 條 standby。
- Actor / Partner:LACPDU 中雙方互稱,Actor 是送出者、Partner 是對端;LACPDU 內夾帶各自的 System ID 與 Port 資訊。
- System ID / 決策者:System Priority(預設 32768,數字越低優先權越高)+ 交換器 MAC Address 組成;System Priority 較低(同值比 MAC)的一方成為聚合的決策者。
- 超額成員的 standby 篩選:實體鏈路數超過硬體上限時,由決策者依 Port Priority(預設 32768,數字越低優先)排序,優先權相同再比 Port Number(數字小優先);未入選者轉為 standby,等 active 斷線時遞補,而非直接踢出。
- 負載平衡:per-flow hash(依 src/dst MAC、IP、L4 port 組合),非 per-packet;單一 flow 不超過單條實體鏈路頻寬。
- 「LACP 承載 access/trunk」:switchport mode(access/trunk)設定在 Port-Channel 邏輯介面上,實體成員介面繼承;STP 與 MAC 學習均以 Port-Channel 為單位(業界公認行為)。
Cisco IOS 設定範例
interface range gigabitEthernet 0/1 - 4
channel-group 1 mode active ! LACP active
!
interface port-channel 1
switchport mode trunk ! access/trunk 設在邏輯介面
switchport trunk allowed vlan 10,20
Sources
- 官方Cisco Nexus Layer 2 Configuration Guide — Access and Trunk Ports:cisco.com
- 官方Cisco ISL/802.1Q Frame Format:cisco.com/c/en/us/support/docs/lan-switching/8021q
- 官方IEEE 802.1AX-2020:standards.ieee.org/ieee/802.1AX/6768
- 官方Cisco EtherChannel Configuration Guide, Catalyst 9000 / 3750-X:cisco.com
- 官方Cisco — Understanding EtherChannel Load Balancing:cisco.com/c/en/us/support/docs/lan-switching/etherchannel
- 官方Cisco NX-OS Port Channel Configuration Guide:cisco.com
- 部落格LACP System Priority / Port Priority 篩選行為:Cisco Learning Network