Day 15 終於把 OSPF 這條線先收起來。
從 Static Route、OSPF、LSA、Area、ASBR 一路跑了很遠,今天先回到一開始那台最普通的 Switch。
假設公司有兩組人:
公司員工
訪客
而且全部都插在同一台 Switch。
PC-A ─┐
PC-B ─┤
│
[ Switch ]
│
Guest-1 ─┤
Guest-2 ─┘
如果只有這樣,大家其實都待在同一個 Layer 2 網路裡。
這時我突然想到:
很多公司都會說:
員工網路和訪客網路要分開。
可是實體上明明可能就是同一台 Switch。
那它到底是怎麼「分開」的?
今天只追這個問題:
同一台 Switch,為什麼設定 VLAN 之後,就能變成不同的 Broadcast Domain?
VLAN 全名是:
Virtual LAN
以前看到這個名字,我大概會記成:
VLAN 就是虛擬區域網路。
然後考完就忘了。
這次換成真的問題。
假設:
Fa0/1 → 公司員工 A
Fa0/2 → 公司員工 B
Fa0/3 → 訪客 A
Fa0/4 → 訪客 B
全部插同一台 Switch。
如果沒有 VLAN,可以先想像:
Fa0/1 ─┐
Fa0/2 ─┤
├── Switch
Fa0/3 ─┤
Fa0/4 ─┘
Layer 2 Broadcast 進來時,Switch 會把它往同一個 Broadcast Domain 中的其他相關 Port flood。
最常看到的例子就是 ARP。
假設 PC-A 想找:
192.168.1.20
它可能先送:
Who has 192.168.1.20?
```
Ethernet Destination MAC 是:
~~~text
FF:FF:FF:FF:FF:FF
也就是 Broadcast。
如果四台機器都在同一個 Broadcast Domain:
ARP Broadcast
↓
PC-A ───────→ [ Switch ]
├──→ PC-B
├──→ Guest-1
└──→ Guest-2
即使 Guest-1 根本不是這次要找的人,它還是會收到這個 Broadcast Frame。
因為現在大家都在同一個 Layer 2 Broadcast Domain。
現在開始分 VLAN。
例如:
VLAN 10 = STAFF
VLAN 20 = GUEST
然後設定:
Fa0/1 → VLAN 10
Fa0/2 → VLAN 10
Fa0/3 → VLAN 20
Fa0/4 → VLAN 20
實體還是:
同一台 Switch
但邏輯上可以先這樣想:
實體 Switch
┌─────────────────────────┐
│ │
│ VLAN 10 VLAN 20 │
│ │
│ Fa0/1 Fa0/2 Fa0/3 Fa0/4│
│ │
└─────────────────────────┘
更像是把一台實體 Switch 裡的 Port 分組。
VLAN 10
PC-A ─────┐
├── Layer 2 網路 A
PC-B ─────┘
VLAN 20
Guest-A ──┐
├── Layer 2 網路 B
Guest-B ──┘
不是實體真的拆成兩台機器。
但從 Layer 2 的資料轉送來看,它們被隔開了。
PC-A 在 VLAN 10:
Fa0/1
```
送一個 Broadcast:
~~~text
FF:FF:FF:FF:FF:FF
Switch 收到 Frame 時,不只是想:
這是一個 Broadcast,所以全部 Port 都送。
還有一個很重要的範圍:
這是哪一個 VLAN 裡面的 Broadcast?
如果這個 Frame 屬於 VLAN 10:
VLAN 10 Broadcast
↓
PC-A ─→ Switch
│
└──→ PC-B
Guest-A X
Guest-B X
Switch 不會因為大家插在同一塊實體機器上,就把 VLAN 10 的 Broadcast 送進 VLAN 20。
所以:
Broadcast Domain
```
已經被切開。
這就是 VLAN 很核心的一件事情。
## VLAN 切的是 Layer 2
這裡很容易跟 IP Subnet 混在一起。
先只看 Layer 2。
~~~text
VLAN 10
```
和:
~~~text
VLAN 20
```
代表兩個不同的 Layer 2 Broadcast Domain。
例如:
~~~text
VLAN 10
MAC / Ethernet / ARP Broadcast
VLAN 20
MAC / Ethernet / ARP Broadcast
彼此不直接混在一起。
所以即使一台 Switch 有 48 個 Port,我也不一定要讓 48 個 Port 全部待在同一個廣播網域。
可以切成:
VLAN 10 → 員工
VLAN 20 → 訪客
VLAN 30 → Server
VLAN 40 → IP Phone
全部仍然在同一台實體 Switch。
假設:
PC-A
VLAN 10
192.168.10.10
```
想找:
~~~text
Guest-A
VLAN 20
192.168.20.10
```
如果只有一台普通的 Layer 2 Switch:
~~~text
PC-A
│
VLAN 10
│
[ Switch ]
│
VLAN 20
│
Guest-A
它不能單純把 VLAN 10 的 Frame 轉進 VLAN 20。
因為兩邊本來就是不同的 Layer 2 網路。
如果要讓它們溝通,需要 Layer 3。
也就是:
VLAN 10
↓
Router / Layer 3 Switch
↓
VLAN 20
這件事就是後面會遇到的:
Inter-VLAN Routing
```
今天先不要往那裡挖。
現在只要先抓住:
> **不同 VLAN 之間,不是靠普通 Layer 2 switching 直接互通。**
## VLAN 跟 Subnet 是同一個東西嗎?
不是。
一個是 Layer 2 的邏輯分割。
一個是 Layer 3 的 IP 網路設計。
但實務上通常會配在一起。
例如:
~~~text
VLAN 10
192.168.10.0/24
VLAN 20
192.168.20.0/24
這樣腦袋比較容易對應:
VLAN 10
↓
一個 Layer 2 Broadcast Domain
↓
192.168.10.0/24
VLAN 20
↓
另一個 Layer 2 Broadcast Domain
↓
192.168.20.0/24
但不要因此倒過來說:
VLAN 就是 Subnet。
它們處理的是不同 Layer 的事情。
只是網路設計時常常一個 VLAN 搭配一個 IP Subnet。
以前 Day 03 學 Switch 時,我把它想成:
MAC Address
↓
Port
例如:
AA:AA:AA:AA:AA:AA → Fa0/1
BB:BB:BB:BB:BB:BB → Fa0/2
加入 VLAN 之後,腦袋要稍微升級。
可以先想成:
VLAN + MAC
↓
Port
例如:
VLAN 10 AA:AA:AA:AA:AA:AA → Fa0/1
VLAN 10 BB:BB:BB:BB:BB:BB → Fa0/2
VLAN 20 CC:CC:CC:CC:CC:CC → Fa0/3
VLAN 20 DD:DD:DD:DD:DD:DD → Fa0/4
Switch 在處理 Layer 2 Frame 時,VLAN 本身就是轉送範圍的一部分。
所以 VLAN 不是只拿來讓管理員看起來比較整齊。
它真的會影響 Frame 可以在哪個 Layer 2 範圍裡流動。
先做最小版本。
一台 Switch、四台 PC:
PC1 ─ Fa0/1
PC2 ─ Fa0/2
PC3 ─ Fa0/3
PC4 ─ Fa0/4
先建立兩個 VLAN:
enable
configure terminal
vlan 10
name STAFF
vlan 20
name GUEST
然後把前兩個 Port 放進 VLAN 10:
interface range fa0/1 - 2
switchport mode access
switchport access vlan 10
後兩個放進 VLAN 20:
interface range fa0/3 - 4
switchport mode access
switchport access vlan 20
最後:
end
show vlan brief
預期會看到類似:
VLAN Name Ports
10 STAFF Fa0/1, Fa0/2
20 GUEST Fa0/3, Fa0/4
今天這裡重點不是背指令。
而是要能看到:
原本四個 Port
↓
同一個 Broadcast Domain
設定 VLAN 後
↓
Fa0/1、Fa0/2
↓
VLAN 10
Fa0/3、Fa0/4
↓
VLAN 20
例如:
PC1
192.168.10.11/24
PC2
192.168.10.12/24
```
以及:
~~~text
PC3
192.168.20.11/24
PC4
192.168.20.12/24
```
在還沒有 Router 或 Layer 3 Switch 的情況下:
~~~text
PC1 → PC2
```
應該可以在 VLAN 10 裡互通。
~~~text
PC3 → PC4
```
也可以在 VLAN 20 裡互通。
但:
~~~text
PC1 → PC3
```
不能只靠這台 Layer 2 Switch 直接跨 VLAN。
這剛好把前幾天的觀念重新接起來:
~~~text
同一個 Layer 2 網路
↓
Switch
不同 Layer 3 網路
↓
Router
而 VLAN 讓一台實體 Switch 裡,可以存在多個 Layer 2 網路。
剛才設定:
switchport mode access
switchport access vlan 10
其實已經偷偷碰到下一個名詞:
Access Port
```
現在可以先把它理解成:
> 這個 Port 平常就是給某一個 VLAN 裡的終端設備使用。
例如:
~~~text
PC
│
│ 一般 Ethernet Frame
│
Fa0/1
│
Switch 判定:這個 Port 屬於 VLAN 10
PC 本身通常不需要知道:
我現在是 VLAN 10 喔。
Switch 的 Access Port 會把進來的流量歸到對應 VLAN。
但這立刻又會冒出下一個問題。
現在公司變大了。
PC-A ─ Switch 1 ───── Switch 2 ─ PC-B
```
而 PC-A 和 PC-B 都屬於:
~~~text
VLAN 10
```
另外兩台訪客電腦都屬於:
~~~text
VLAN 20
```
問題來了。
Switch 1 和 Switch 2 中間只有一條線。
~~~text
Switch 1
│
│ 一條 Ethernet Link
│
Switch 2
那這條線到底算:
VLAN 10
```
還是:
~~~text
VLAN 20
```
難道一個 VLAN 就要拉一條實體網路線?
~~~text
VLAN 10 → 一條線
VLAN 20 → 一條線
VLAN 30 → 再一條線
...
這樣 VLAN 多一點,線就先爆炸了。
所以一定還少了一個機制。
VLAN 可以在同一台實體 Switch 裡建立多個獨立的 Layer 2 Broadcast Domain。
VLAN 10 的 Broadcast 不會因為大家插在同一台 Switch,就被 Flood 到 VLAN 20。
也因此:
同一台實體 Switch
```
不代表:
~~~text
所有 Port 都一定在同一個 Layer 2 網路
```
VLAN 是邏輯上的切割。
不同 VLAN 要互通,還需要 Layer 3 Routing。
## 下一個「為什麼」
今天的例子只處理:
~~~text
PC → Switch
```
所以一個 Access Port 對一個 VLAN 還算好懂。
可是當:
~~~text
Switch 1
│
│ 只有一條線
│
Switch 2
```
這條線卻要同時載:
~~~text
VLAN 10
VLAN 20
VLAN 30
```
Switch 到底怎麼知道每一個 Frame 屬於哪一個 VLAN?
**為什麼 Access Port 不夠?Trunk 又是怎麼讓一條線同時載多個 VLAN?**
下一篇接 `Access Port、Trunk、802.1Q Tag`。