Trunk 與 Access:交換器上兩種埠的分工哲學
從 19 世紀的電話幹線到 VXLAN 的 1,600 萬網段——一條標籤的演化史
📍 一句話核心
Access 埠讓一台不懂 VLAN 的終端設備安穩地活在單一網段裡,Trunk 埠則用 802.1Q 標籤讓一條實體線同時載運多個 VLAN——前者是「一戶一門牌」,後者是「共用的高速公路」。
🌍 時間線全景
從 Ethernet 誕生到 VXLAN 突破 VLAN 數量上限,這條演化軸跨越了四十年:
| 年份 | 事件 | 意義 |
|---|---|---|
| 19 世紀末 | 電話系統的城際主幹線稱為 Trunk Line | 「trunk = 多路共用幹道」的字源(考據性質) |
| 1973 | Bob Metcalfe 發明 Ethernet | 廣播式網路誕生,也埋下廣播風暴的種子 |
| 約 1984–1988 | W. David Sincoskie(Bellcore)提出 VLAN 概念 | 用「顏色標籤」切割廣播域的最早構想 |
| 1990 | Kalpana 推出第一台多埠 Ethernet 交換器 | 交換器時代開始,VLAN 有了落地的舞台 |
| 1990 年代中期 | Cisco ISL、3Com VLT 等私有協定 | 跨交換器載運 VLAN,但廠牌互不相通 |
| 1998-12-08 | IEEE 802.1Q-1998 核准 | 4-byte 標籤成為全球共通語言 |
| 2005-12-07 | IEEE 802.1ad(QinQ)核准 | 電信商在客戶標籤外再包一層 S-Tag |
| 2014-08 | RFC 7348(VXLAN)發表 | 24-bit VNI 提供約 1,600 萬個網段 |
第一幕基礎概念——為什麼需要把一張網切成好幾張
想像一間 1990 年代的公司:會計部、工程部、業務部的電腦全插在同一組集線器上。Ethernet 的本質是廣播——任何一台電腦喊一聲「誰是 192.168.1.1?」(ARP 請求),整層樓每台電腦都得停下來聽。人一多,網路就像一間所有人同時講話的大會議室:你的封包沒問題,但你的耳朵先累死了。更糟的是安全問題——會計部的薪資封包,工程部的電腦在物理上是「聽得到」的。
1980 年代中後期,Bellcore 的 W. David Sincoskie 在研究如何擴展 Ethernet 時提出了一個想法:與其蓋更多獨立的實體網路,不如在同一套實體設備上用標籤畫出多個邏輯網路。他當時稱之為 multitree bridge,用不同「顏色」標記封包屬於哪個廣播域——這就是 VLAN(Virtual LAN)的雛形。1990 年 Kalpana 推出第一台真正的多埠 Ethernet 交換器後,這個構想有了實作舞台:交換器可以規定「1 到 8 號埠屬於會計 VLAN,9 到 16 號埠屬於工程 VLAN」,兩個 VLAN 之間的廣播互不打擾,彷彿兩台獨立的交換器。
這就帶出了 Access 埠的角色:它是交換器面向終端設備(電腦、印表機、IP 電話)的門。Access 埠只屬於一個 VLAN,而且進出的封包不帶任何標籤(untagged)——因為你的筆電網卡根本不知道 VLAN 是什麼,也不需要知道。交換器內部默默記著「這個埠收到的封包一律算 VLAN 10」(這個對應關係就是 PVID),封包離開 Access 埠送往電腦前,標籤也會被拆掉。用公寓比喻:Access 埠是每一戶的家門,門牌(VLAN 歸屬)釘在門框上由大樓管理員(交換器)管理,住戶自己完全不用操心。
但問題來了:如果會計部分散在兩層樓、接在兩台交換器上呢?最笨的辦法是每個 VLAN 拉一條實體線連接兩台交換器——三個 VLAN 就要三條線、佔六個埠。網路一大,這根本不可行。工程師需要一條能同時載運多個 VLAN 的共用幹道,並且要有辦法在幹道上分辨每個封包屬於誰。
這條幹道就是 Trunk 埠。有趣的是,「trunk」這個詞比 Ethernet 老了將近一百年:19 世紀末的電話系統裡,連接兩個城市電話交換局的主幹線就叫 Trunk Line——一條幹線裡多路通話共用(此字源屬考據性質)。網路工程師借用了這個詞:Trunk 埠就是交換器之間、或交換器與伺服器之間的「電話幹線」,多個 VLAN 的流量在同一條實體線上並行,靠標籤區分彼此。
第二幕技術演進——從各說各話到 802.1Q 統一標籤
幹道有了,下一個問題是「標籤長什麼樣」。1990 年代中期,各家廠商自己發明:Cisco 有 ISL(Inter-Switch Link,用整層外包裝把原始訊框包起來)、3Com 有 VLT。結果就是 Cisco 交換器和 3Com 交換器之間的幹道接不起來——就像兩家貨運公司用不同的貨櫃規格,港口吊車無法通用。
1998 年 12 月,IEEE 通過 802.1Q 標準,終結了方言時代。它的做法比 ISL 優雅得多:不是把整個訊框重新包裝,而是在 Ethernet 訊框的來源 MAC 位址之後插入 4 個 byte 的標籤:
- TPID(16 bits,固定 0x8100):告訴對方「接下來是 VLAN 標籤,不是一般的型別欄位」
- PCP(3 bits):優先權,讓語音封包可以插隊(即 802.1p CoS)
- DEI(1 bit):壅塞時優先丟棄的標記
- VID(12 bits):VLAN 編號本體,2¹² = 4096 個,扣掉保留的 0 與 4095,實際可用 4094 個
於是 Access 與 Trunk 的分工徹底定型:Access 埠收送不帶標籤的封包,服務單一 VLAN;Trunk 埠收送帶 802.1Q 標籤的封包,服務多個 VLAN。終端設備從頭到尾不知道自己被「分色」過。
不過 802.1Q 留了一個特例:Native VLAN——Trunk 埠上唯一「不貼標籤直接通行」的 VLAN,預設是 VLAN 1。這個為了相容性設計的後門,日後成了經典攻擊的入口:
Double-Tagging(雙重標籤)VLAN 跳躍攻擊——展開看攻擊原理與防範
攻擊者接在與 Native VLAN 同號的 Access 埠上,故意發出帶兩層標籤的封包(外層 = Native VLAN、內層 = 想入侵的目標 VLAN);第一台交換器看到外層標籤等於 Native VLAN,剝掉它就往幹道送;第二台交換器看到剩下的內層標籤,誤以為這是合法的目標 VLAN 流量——攻擊者就這樣跳進了本來到不了的網段。
實務鐵則:Native VLAN 改成一個沒有任何主機使用的專用編號、絕不沿用預設的 VLAN 1、也不把任何 Access 埠劃進 Native VLAN。
另外兩個實務配套也在這個時期成熟:Cisco 的 DTP(Dynamic Trunking Protocol)能讓兩台交換器自動協商形成 Trunk,方便但也是風險——攻擊者可以假裝成交換器騙出一條 Trunk,所以面向終端的埠應明確設成 access 模式並關閉 DTP。而 Allowed VLAN List 則是幹道的通行證管制:Trunk 預設放行所有 VLAN,但最佳實踐是只允許真正需要跨越這條幹道的 VLAN,既減少不必要的廣播氾濫,也縮小攻擊面。
第三幕現代應用——同一個概念,長出三種新形態
進入 2000 年代之後,Access 與 Trunk 的二分法沒有被淘汰,反而在三個方向上開枝散葉。
第一個方向是術語的多樣化。同一個概念在不同廠牌有不同叫法:Cisco 說 trunk port / access port;HPE、Aruba(ProCurve 血統)的交換器則說 tagged port / untagged port——「這個埠對 VLAN 20 是 tagged」等於 Cisco 語境的「trunk 上允許 VLAN 20」,「對 VLAN 10 是 untagged」則對應 access 或 native 的行為。跨廠牌對接時,翻譯錯這兩個詞是機房裡最常見的斷線原因之一:一端 tagged、一端 untagged,鏈路燈是亮的,封包卻雞同鴨講。
第二個方向是虛擬化。當一台實體伺服器裡跑著幾十台 VM、分屬不同 VLAN 時,伺服器接交換器的那條實體線天生就得是 Trunk。VMware vSwitch 的 VST 模式(Virtual Switch Tagging)由虛擬交換器代替 VM 貼標籤、拆標籤——VM 就像接在虛擬 Access 埠上的普通電腦;VGT 模式(Virtual Guest Tagging)則讓 VM 自己處理 802.1Q 標籤,等於把 Trunk 一路延伸進客體作業系統。Access/Trunk 的分工哲學原封不動地搬進了軟體世界。
第三個方向是規模的突破。電信商首先撞牆:全城客戶的 VLAN 加起來遠超過 4094 個,而且客戶自己也在用 VLAN 標籤。2005 年的 802.1ad(QinQ)給出第一個答案——在客戶標籤(C-Tag)外面再包一層電信商標籤(S-Tag),像是把客戶已經貼好標籤的包裹再裝進電信商自己的貨櫃。接著雲端資料中心把牆撞得更徹底:數十萬租戶的隔離需求讓 12-bit 的 VID 徹底不夠用。2014 年 8 月發表的 RFC 7348(VXLAN)乾脆換了思路:把整個 Layer 2 訊框封裝進 UDP 封包裡跨 Layer 3 網路傳送,用 24-bit 的 VNI 取代 12-bit 的 VID。
有趣的是,VXLAN 世界裡依然存在 Access 與 Trunk 的影子:VTEP(VXLAN 端點)面向 VM 的一側做的事,和三十年前 Access 埠面向電腦做的事,本質上一模一樣——讓終端保持天真,把複雜留給幹道。
📊 概念圖解
Access 與 Trunk 的封包旅程
一個訊框從會計部電腦到同 VLAN 的印表機,標籤只存在於中間的幹道上:
兩種埠的分工
Access 埠
- 只屬於單一 VLAN
- 收送皆為 untagged,靠 PVID 歸類
- 終端設備不需要懂 VLAN
- 安全設定:明確設 access 模式、關閉 DTP
Trunk 埠
- 同時載運多個 VLAN(受 Allowed List 管制)
- 以 802.1Q 標籤(12-bit VID)區分
- Native VLAN 例外不貼標籤
- 安全設定:Native VLAN 用專用編號、限縮允許清單
快速對照表
| 面向 | Access 埠 | Trunk 埠 |
|---|---|---|
| 服務對象 | 終端設備(PC、印表機、AP 的管理介面) | 交換器之間、交換器到伺服器/hypervisor |
| VLAN 數量 | 1 個 | 多個(受 Allowed VLAN List 管制) |
| 封包標籤 | 進出皆 untagged | 帶 802.1Q 標籤(Native VLAN 除外) |
| VLAN 歸屬判斷 | 埠上設定的 PVID | 讀取訊框內 12-bit VID |
| HPE/Aruba 術語 | untagged member | tagged member |
| 常見安全設定 | 明確設 access 模式、關閉 DTP | Native VLAN 用專用編號、限縮允許清單 |
🔗 引用與資源
- WIKIIEEE 802.1Q 標準沿革與 tag 格式(核准日期 1998-12-08):en.wikipedia.org/wiki/IEEE_802.1Q
- 官方802.1Q tag 欄位說明(TPID/PCP/DEI/VID):Huawei 官方文件
- WIKIVLAN 概念起源(W. David Sincoskie):en.wikipedia.org/wiki/W._David_Sincoskie
- WIKI第一台 Ethernet 交換器(Kalpana):en.wikipedia.org/wiki/Kalpana_(company)
- WIKICisco ISL(前 802.1Q 時代私有協定):en.wikipedia.org/wiki/Cisco_Inter-Switch_Link
- 部落格Tagged/Untagged/Native VLAN 解說:networkdirection.net
- WIKIVLAN Hopping 攻擊與防範:en.wikipedia.org/wiki/VLAN_hopping
- WIKIIEEE 802.1ad(QinQ,核准日期 2005-12-07):en.wikipedia.org/wiki/IEEE_802.1ad
- 官方RFC 7348(VXLAN,IETF):datatracker.ietf.org/doc/html/rfc7348
- 官方VMware vSwitch VLAN 模式(VST/VGT):Broadcom KB
- WIKITrunk 字源(電話中繼線,考據性質):en.wikipedia.org/wiki/Trunking
註:Cisco ISL 確切推出年份未能查證(僅確認早於 1998 年 802.1Q 標準化);VLAN 概念提出年份各來源記載為約 1984–1988 年區間。
💡 核心洞見
🎓 進階探索
- VTP 與 MVRP:VLAN 資料庫如何在多台交換器間自動同步(以及 VTP 誤刪全網 VLAN 的著名事故型態)
- Voice VLAN:一個 Access 埠同時服務電腦與 IP 電話的混合模式,介於 access 與 trunk 之間的灰色地帶
- Private VLAN:同一個 VLAN 內部再做隔離的進階玩法
- VXLAN + EVPN:資料中心現代標準組合,控制平面如何取代泛洪學習
- 802.1ah(PBB / Mac-in-Mac):802.1ad 之後,電信級 Ethernet 的下一層封裝