Day 16 最後卡在一個很實際的問題。
只有一台 Switch 時:
Fa0/1 → VLAN 10
Fa0/13 → VLAN 20
很好理解。
但公司不可能永遠只有一台 Switch。
Switch A Switch B
VLAN 10 員工 VLAN 10 員工
VLAN 20 訪客 VLAN 20 訪客
如果 Switch A 和 Switch B 中間只接一條線:
這條線到底算 VLAN 10,還是 VLAN 20?
難道每多一個 VLAN,就再多拉一條網路線?
今天就追這個問題。
假設:
PC-A
|
Fa0/1
|
Switch A
PC-A 是普通電腦。
它通常不需要知道自己插在 VLAN 10。
Switch 可以把 Fa0/1 設成:
Access Port
VLAN 10
意思可以先理解成:
從這個 Port 進來的普通 Ethernet Frame,Switch 把它歸到 VLAN 10。
所以:
PC-A
送一般 Ethernet Frame
↓
Fa0/1 是 access vlan 10
↓
Switch 知道:
這份 Frame 屬於 VLAN 10
這就是 Access Port 最直覺的用途:
讓一個終端 Port 主要屬於一個 VLAN。
現在:
PC-A
VLAN 10
|
Switch A
|
| 只有一條線
|
Switch B
|
PC-B
VLAN 10
如果 Switch-to-Switch 的那條線也是 Access VLAN 10,那 VLAN 10 可以過。
但 VLAN 20 呢?
難道變成:
線 1 → VLAN 10
線 2 → VLAN 20
線 3 → VLAN 30
...
VLAN 一多,這個做法就很不實際。
所以需要另一種 Port:
Trunk Port。
第一次看到 Trunk,我很容易把它想成「骨幹線,所以比較快」。
但 Trunk 的核心不是速度。
而是:
同一條實體連線可以承載多個 VLAN 的流量。
Switch A
|
| Trunk
| VLAN 10
| VLAN 20
| VLAN 30
|
Switch B
這樣只需要一條線。
可是新的問題又來了:
VLAN 10、20、30 的 Frame 混在同一條線上,Switch B 怎麼知道每一份原本屬於哪個 VLAN?
在 Trunk 上,Switch 需要替 Frame 帶上 VLAN 識別資訊。
最常見的標準就是 IEEE 802.1Q。
先不要急著背 bit 數。
只看它解決的事情:
原本 Ethernet Frame
↓
進入 Trunk
↓
帶上 VLAN 識別資訊
↓
另一台 Switch 收到
↓
知道這份 Frame 屬於哪個 VLAN
例如:
Frame A
VLAN 10 Tag
↓
同一條 Trunk
↓
Switch B
↓
放回 VLAN 10
另一份:
Frame B
VLAN 20 Tag
↓
同一條 Trunk
↓
Switch B
↓
放回 VLAN 20
所以那條線不是「VLAN 10 的線」或「VLAN 20 的線」。
而是:
一條可以搬多個 VLAN 的 Trunk。
| Port 類型 | 常見對象 | 核心工作 |
|---|---|---|
| Access | PC、印表機、一般終端 | 主要承載一個 VLAN |
| Trunk | Switch、某些 Router / AP / Server | 同一條連線承載多個 VLAN |
整條路徑:
PC-A
普通 Frame
↓
Access VLAN 10
↓
Switch A
↓
802.1Q 保留 VLAN 10 身分
↓
Trunk
↓
Switch B
↓
辨認 VLAN 10
↓
Access VLAN 10
↓
PC-B
一般 Access Port 的情境下,不需要。
可以想成:
Switch A
↓
Frame 要走 Trunk
↓
保留 VLAN 身分
↓
Switch B 收到
↓
知道它是 VLAN 10
↓
準備從 VLAN 10 Access Port 送給 PC
↓
終端收到一般 Ethernet Frame
所以普通 PC 不需要理解整個 Trunk 架構。
VLAN 分區主要由 Switch 幫它維持。
原本 Ethernet Frame 可以先粗略看:
Destination MAC
Source MAC
EtherType / Length
Payload
FCS
加上 802.1Q 後,概念上會多一段 Tag:
Destination MAC
Source MAC
802.1Q Tag
EtherType
Payload
FCS
Tag 裡包含 VLAN ID 等資訊。
VLAN ID 欄位是 12 bits,所以有 4096 種組合;一般 VLAN ID 常見範圍是 1~4094,0 與 4095 有特殊用途,不當成一般 VLAN 使用。
今天不用先背 Tag 裡每一個欄位,只抓住:
Trunk 上必須有辦法告訴下一台 Switch:這份 Frame 屬於哪個 VLAN。
是,所以不能把:
Trunk 上每一個 Frame 永遠都有 Tag
講成絕對規則。
Cisco 常見 802.1Q Trunk 有 Native VLAN 的概念;預設情況下 Native VLAN 流量可以不帶 802.1Q Tag。
今天先知道有這個例外。
Native VLAN 兩端不一致會發生什麼,之後再挖。
本篇尚未實際驗證,下面是預期操作。
PC-A PC-B
VLAN 10 VLAN 10
| |
SW1 -------- Trunk -------- SW2
| |
Guest-A Guest-B
VLAN 20 VLAN 20
兩台 Switch 都先建立 VLAN:
configure terminal
vlan 10
name STAFF
vlan 20
name GUEST
假設 SW1:
Fa0/1 → PC-A
Fa0/2 → Guest-A
Fa0/24 → SW2
Access Port:
interface fastEthernet 0/1
switchport mode access
switchport access vlan 10
interface fastEthernet 0/2
switchport mode access
switchport access vlan 20
SW2 做對應設定。
兩台 Switch 中間:
interface fastEthernet 0/24
switchport mode trunk
接著觀察:
show interfaces trunk
show vlan brief
預期可以看到 Trunk 狀態,以及 VLAN / Port 的分配資訊。
實際輸出依 Packet Tracer 或 IOS 版本為準。
假設 SW1 有 VLAN 10,但 SW2 根本沒有建立 VLAN 10。
不能只因為 Trunk 上收到 VLAN 10 的 Frame,就自動認定整條路徑一定正常。
查問題時要一起看:
SW1 有 VLAN 10 嗎?
↓
SW2 有 VLAN 10 嗎?
↓
Trunk 允許 VLAN 10 嗎?
↓
對應 Access Port 真的在 VLAN 10 嗎?
只看「線有沒有亮」遠遠不夠。
假設公司有:
VLAN 10
VLAN 20
VLAN 30
VLAN 40
但某條 Trunk 只需要 10、20。
可以限制 allowed VLAN。
概念上:
switchport trunk allowed vlan 10,20
所以遇到 Trunk 問題,我現在會多問:
1. Port 真的是 Trunk 嗎?
2. VLAN 在兩邊都有嗎?
3. 這個 VLAN 被允許通過嗎?
4. Native VLAN 是否一致?
Access Port 讓終端加入一個主要 VLAN;Trunk 讓一條實體連線承載多個 VLAN;802.1Q 讓接收端知道 Frame 原本屬於哪個 VLAN。
所以:
很多 VLAN
↓
一條 Trunk
↓
保留 VLAN 身分