Day 18 做 Router-on-a-Stick 時,我的腦袋已經有一張很清楚的圖:
VLAN 10
↓
Switch
↓
802.1Q Trunk
↓
Router
↓
802.1Q Trunk
↓
Switch
↓
VLAN 20
VLAN 是 Layer 2 的隔離。
如果 VLAN 10 想跟 VLAN 20 溝通,就要找一台會 Routing 的 Layer 3 裝置。
所以 Router-on-a-Stick 很合理。
但接著就遇到一個問題:
企業網路裡常看到的是:
PC
↓
Layer 3 Switch
↓
Server
中間根本沒有另外畫一台 Router。
可是 VLAN 10 和 VLAN 20 還是可以互通。
那 Router 去哪裡了?
今天就追這個問題:
Layer 3 Switch 到底做了什麼,為什麼一台 Switch 自己就能完成 Inter-VLAN Routing?
一般 Layer 2 Switch 最重要的工作是:
收到 Ethernet Frame
↓
看 Destination MAC
↓
查 MAC Address Table
↓
決定從哪一個 Port 送出去
它主要在 Layer 2 工作。
Router 則是:
收到 IP Packet
↓
看 Destination IP
↓
查 Routing Table
↓
決定下一個 Layer 3 網路
所以以前腦袋會畫:
Switch = Layer 2
Router = Layer 3
這個概念沒有錯。
但 Layer 3 Switch 可以先粗略理解成:
一台同時具備 Switching 與 Routing 能力的 Switch。
也就是:
同 VLAN
→ Layer 2 Switching
不同 VLAN
→ Layer 3 Routing
所以並不是 Router 消失了。
而是:
Routing 能力直接被放進 Switch 裡。
假設公司有兩個 VLAN:
VLAN 10
192.168.10.0/24
VLAN 20
192.168.20.0/24
兩台 PC:
PC-A
192.168.10.10/24
Gateway 192.168.10.1
VLAN 10
PC-B
192.168.20.10/24
Gateway 192.168.20.1
VLAN 20
接在同一台 Layer 3 Switch:
PC-A
192.168.10.10
VLAN 10
|
Fa0/1
|
+----------------+
| Layer 3 Switch |
+----------------+
|
Fa0/2
|
PC-B
192.168.20.10
VLAN 20
問題來了。
PC-A 的 Default Gateway:
192.168.10.1
PC-B 的 Default Gateway:
192.168.20.1
這兩個 IP 到底放在哪?
沒有 Router 啊。
答案就是今天的主角:
SVI:
Switch Virtual Interface
可以先拆成:
Switch
Virtual
Interface
它不是 Switch 上某一個真的 RJ45 網路孔。
而是一個:
屬於某個 VLAN 的邏輯 Layer 3 Interface。
例如:
interface vlan 10
ip address 192.168.10.1 255.255.255.0
就可以建立:
VLAN 10
↓
SVI VLAN 10
↓
192.168.10.1
另外:
interface vlan 20
ip address 192.168.20.1 255.255.255.0
建立:
VLAN 20
↓
SVI VLAN 20
↓
192.168.20.1
所以整台 Layer 3 Switch 在邏輯上就變成:
Layer 3 Switch
┌─────────────────────┐
VLAN10 │ SVI VLAN10 │
──────→│ 192.168.10.1/24 │
│ │
│ Routing │
│ │
VLAN20 │ SVI VLAN20 │
──────→│ 192.168.20.1/24 │
└─────────────────────┘
這時我才突然發現:
Router-on-a-Stick 裡:
Router G0/0.10
192.168.10.1
跟 Layer 3 Switch 裡:
interface vlan 10
192.168.10.1
其實都在解同一件事:
替某個 VLAN 提供一個 Layer 3 Gateway。
只是做法不同。
Router-on-a-Stick:
Switch
||
|| Trunk
||
Router
├── G0/0.10 → VLAN 10 Gateway
└── G0/0.20 → VLAN 20 Gateway
Layer 3 Switch:
Layer 3 Switch
├── VLAN 10
│ └── SVI VLAN10 → Gateway
│
└── VLAN 20
└── SVI VLAN20 → Gateway
最大的畫面差異就是:
Router-on-a-Stick:
Routing 發生在外面的 Router。
Layer 3 Switch:
Routing 直接發生在 Switch 裡。
再回到最熟悉的封包故事。
PC-A:
192.168.10.10/24
Gateway 192.168.10.1
想 ping:
192.168.20.10
第一步仍然完全沒有變。
PC-A 用自己的 Subnet Mask 判斷:
自己:
192.168.10.10/24
目的:
192.168.20.10/24
不是同網段。
所以:
不能直接送給 PC-B
↓
要交給 Default Gateway
也就是:
192.168.10.1
PC-A 不知道 192.168.10.1 的 MAC Address。
所以送:
ARP Request
Who has 192.168.10.1?
注意,它不是問:
Who has 192.168.20.10?
因為 PC-B 是遠端網段。
這跟 Day 04、Day 18 完全一樣。
現在回答 ARP 的,不再是外部 Router。
而是:
SVI VLAN 10
192.168.10.1
Layer 3 Switch 回:
192.168.10.1 is at XX:XX:XX:XX:XX:XX
於是 PC-A 可以送出 Frame。
PC-A 傳給不同網段的 PC-B:
Source IP
192.168.10.10
Destination IP
192.168.20.10
但是這一跳:
Destination MAC
=
Default Gateway 的 MAC
所以還是:
IP 看終點
MAC 看這一跳
這件事從 Day 04 到現在都沒有變。
Switch 收到 Frame。
它發現這個 Frame 的 Layer 2 Destination 是自己的 SVI。
所以這個封包不是單純:
MAC Table
↓
另一個 Layer 2 Port
而是要進入 Layer 3 Routing。
可以粗略畫成:
PC-A
↓
VLAN 10
↓
SVI VLAN 10
↓
Layer 3 Routing
↓
SVI VLAN 20
↓
VLAN 20
↓
PC-B
這就是 Layer 3 Switch 做 Inter-VLAN Routing 的核心畫面。
Layer 3 Switch 有:
interface vlan 10
ip address 192.168.10.1 255.255.255.0
interface vlan 20
ip address 192.168.20.1 255.255.255.0
所以它自然知道:
192.168.10.0/24
→ Connected
192.168.20.0/24
→ Connected
這跟 Router 一模一樣。
因為:
只要 Layer 3 裝置有某個 IP Interface,就可以知道這個 Network 是 directly connected。
所以收到:
Destination IP
192.168.20.10
它查 Routing Table:
192.168.20.0/24
→ directly connected
→ VLAN 20
於是決定:
從 VLAN 20 送出去
Layer 3 Switch 知道:
192.168.20.10
在 VLAN 20
但它如果還不知道 PC-B 的 MAC,還是不能直接組 Ethernet Frame。
所以:
VLAN 20
↓
ARP Request
Who has 192.168.20.10?
PC-B 回:
192.168.20.10 is at BB:BB:BB:BB:BB:BB
Layer 3 Switch 才重新封裝 Frame:
Destination IP
192.168.20.10
Destination MAC
PC-B MAC
最後送給 PC-B。
PC-A
192.168.10.10
|
| 不同網段
| 找 Gateway
v
SVI VLAN 10
192.168.10.1
|
| Routing Table
|
| 192.168.20.0/24
| directly connected
v
SVI VLAN 20
192.168.20.1
|
| ARP PC-B
v
PC-B
192.168.20.10
突然就會發現:
這跟兩台 Router、Router-on-a-Stick 的原理其實沒有換。
核心一直都是:
Subnet 判斷
↓
Default Gateway
↓
ARP Gateway
↓
Layer 3 Routing
↓
ARP 下一個目的地
↓
重新封裝 Ethernet Frame
只是負責 Routing 的設備位置變了。
可以使用支援 Layer 3 Switching 的 Multilayer Switch。
拓撲:
PC-A PC-B
192.168.10.10 192.168.20.10
255.255.255.0 255.255.255.0
GW 192.168.10.1 GW 192.168.20.1
| |
Fa0/1 Fa0/2
\ /
+-------------------------+
| Layer 3 Switch |
+-------------------------+
enable
configure terminal
vlan 10
name STAFF
vlan 20
name GUEST
PC-A:
interface fastEthernet 0/1
switchport mode access
switchport access vlan 10
PC-B:
interface fastEthernet 0/2
switchport mode access
switchport access vlan 20
目前為止,它跟一般 Layer 2 Switch 沒什麼不同。
VLAN 10:
interface vlan 10
ip address 192.168.10.1 255.255.255.0
no shutdown
VLAN 20:
interface vlan 20
ip address 192.168.20.1 255.255.255.0
no shutdown
這兩個 IP 就是 PC 的 Default Gateway。
所以:
PC-A
Gateway = 192.168.10.1
PC-B
Gateway = 192.168.20.1
Layer 3 Switch 上還要啟用 Routing:
ip routing
這行很重要。
因為建立 SVI,只代表:
Switch 有 VLAN 10 的 Layer 3 Interface
Switch 有 VLAN 20 的 Layer 3 Interface
但要讓設備真的在不同 Layer 3 Network 之間 Forward Packet,還需要 Routing 功能。
所以腦袋可以分成:
interface vlan 10
interface vlan 20
↓
我有這些 Layer 3 Interface
ip routing
↓
我要在這些網路之間做 Routing
先看 VLAN:
show vlan brief
預期會看到:
VLAN 10
Fa0/1
VLAN 20
Fa0/2
再看 Layer 3 Interface:
show ip interface brief
預期看到:
Vlan10 192.168.10.1
Vlan20 192.168.20.1
再看 Routing Table:
show ip route
預期可以看到類似:
C 192.168.10.0/24 is directly connected, Vlan10
C 192.168.20.0/24 is directly connected, Vlan20
這兩行超重要。
因為它直接證明:
Layer 3 Switch 已經把 VLAN 10 和 VLAN 20 當成兩個 Layer 3 Network。
先從 PC-A:
ping 192.168.10.1
確認自己的 Gateway。
接著:
ping 192.168.20.1
測另一個 VLAN 的 SVI。
最後:
ping 192.168.20.10
測 PC-B。
可以把 Troubleshooting 順序固定成:
自己的 IP
↓
自己的 Gateway
↓
另一個 VLAN Gateway
↓
另一端 Host
這比看到 Ping 不通就亂改設定有效很多。
這裡很容易混。
例如:
interface fastEthernet 0/1
這是一個實體 Interface。
真的有一個 Port。
但:
interface vlan 10
是邏輯 Interface。
Switch 機身上沒有一個孔寫:
VLAN 10
SVI 比較像:
整個 VLAN 在 Layer 3 世界裡的代表
所以可以想成:
很多 VLAN 10 的 Access Port
↓
VLAN 10
↓
interface vlan 10
↓
192.168.10.1
當然不是。
假設:
Fa0/1 → VLAN 10 → PC-A
Fa0/2 → VLAN 10 → PC-C
Fa0/3 → VLAN 10 → Printer
Fa0/4 → VLAN 10 → NAS
它們全部都屬於:
192.168.10.0/24
可以共用:
Default Gateway
192.168.10.1
也就是:
interface vlan 10
ip address 192.168.10.1 255.255.255.0
所以不是:
一個 Port
=
一個 SVI
而比較接近:
一個 VLAN
↓
一個 Layer 3 Gateway
↓
一個 SVI
這也是很重要的一題。
假設:
PC-A
192.168.10.10
PC-C
192.168.10.20
都是 VLAN 10
PC-A 判斷:
192.168.10.20
跟自己同網段
所以它直接:
ARP PC-C
↓
拿到 PC-C MAC
↓
Switch 做 Layer 2 Forwarding
不需要經過 Default Gateway。
所以:
同 VLAN / 同 Subnet
→ Layer 2 Switching
不同 VLAN / 不同 Subnet
→ Layer 3 Routing
這個分界要非常清楚。
是。
它並不是因為有 Routing 功能,就不再做 Layer 2 Switching。
例如:
VLAN 10
PC-A ↔ PC-C
還是:
MAC Address Table
↓
Layer 2 Switching
只有需要跨不同 IP Network 時,才進到 Layer 3。
所以:
Layer 3 Switch
=
Layer 2 Switching
+
Layer 3 Routing
先這樣理解就夠了。
Router-on-a-Stick 的畫面是:
VLAN 10
↓
Switch
↓
Trunk
↓
Router
↓
Trunk
↓
Switch
↓
VLAN 20
大量不同 VLAN 互傳時,流量都要經過 Switch 與外部 Router 之間的連線。
Layer 3 Switch 則可以:
VLAN 10
↓
SVI
↓
Switch 內部 Routing
↓
SVI
↓
VLAN 20
不用為每次 Inter-VLAN Routing 都先送去外部 Router。
對大量內部 VLAN 的網路來說,這是一個很自然的架構。
但這不代表 Router 從企業網路消失。
例如連:
ISP
Internet
WAN
其他 Site
VPN
仍然可能需要 Router、Firewall 或其他 Layer 3 設備。
所以比較合理的企業畫面可能是:
Internet
|
Firewall / Router
|
Layer 3 Switch
├── VLAN 10 Users
├── VLAN 20 Guests
├── VLAN 30 Servers
└── VLAN 40 Management
Layer 3 Switch 處理大量內部 Routing。
Router / Firewall 處理外部網路、WAN 或安全邊界。
其實 Layer 2 Switch 也可能看到:
interface vlan 1
ip address ...
所以看到 SVI 不代表:
這台 Switch 一定在做 Inter-VLAN Routing。
Layer 2 Switch 也可以用 SVI 給自己一個管理 IP。
例如:
Switch Management IP
192.168.10.2
讓工程師可以:
SSH
↓
192.168.10.2
進 Switch 管理。
這時這個 SVI 的用途主要是:
管理 Switch 本身
不是:
幫 VLAN 10 Route 到 VLAN 20
所以要看整體功能,而不是看到:
interface vlan
就直接認定它正在 Routing。
有時候配置:
interface vlan 10
ip address 192.168.10.1 255.255.255.0
no shutdown
結果:
show ip interface brief
卻看到 SVI 沒有正常 Up。
這時不能只盯著:
no shutdown
還要回頭看 VLAN 本身是否存在,以及該 VLAN 在設備上是否真的有有效的 Layer 2 連線。
腦袋可以先檢查:
VLAN 建立了嗎?
↓
Port 真的在這個 VLAN 嗎?
↓
相關 Port / Trunk 是 Up 嗎?
↓
SVI 有 no shutdown 嗎?
也就是:
SVI 不是獨立漂在空中的 Interface,它跟底下的 VLAN 狀態有關。
不是誰比較正確。
它們是在不同架構下解同一類問題。
Router-on-a-Stick:
Switch
↓
Trunk
↓
Router Subinterface
Layer 3 Switch:
VLAN
↓
SVI
↓
Internal Routing
CCNA 真正需要懂的,不是背:
企業一定用 L3 Switch
小公司一定用 Router-on-a-Stick
而是能回答:
Default Gateway 在哪裡?
哪個 Interface 屬於哪個 Subnet?
Routing Table 裡有沒有目的 Network?
Frame 什麼時候只是 Switching?
Packet 什麼時候需要 Routing?
只要這些回答得出來,換設備型號也比較不容易亂掉。
Day 16:
VLAN
↓
把一台 Switch 切成多個 Layer 2 Broadcast Domain
Day 17:
Access Port
↓
一個 VLAN
Trunk
↓
一條線承載多個 VLAN
↓
802.1Q Tag
Day 18:
不同 VLAN 要互通
↓
Router-on-a-Stick
↓
Subinterface
↓
Inter-VLAN Routing
Day 19:
不同 VLAN 要互通
↓
Layer 3 Switch
↓
SVI
↓
Inter-VLAN Routing
其實一路都在回答同一件事:
Layer 2 到底在哪裡結束,Layer 3 又從哪裡開始?
PC-A:
192.168.10.10/24
要送給:
192.168.20.10/24
第一個 ARP 的對象是誰?
interface vlan 10 是 Switch 上真的第 10 個網路孔嗎?
VLAN 10 裡兩台 PC 互傳資料,需要先經過 SVI 嗎?
Layer 3 Switch 有:
Vlan10 192.168.10.1/24
Vlan20 192.168.20.1/24
為什麼 Routing Table 會出現兩個 Connected Network?
SVI 就是 VLAN 在 Layer 3 世界裡的 Interface。Layer 3 Switch 替不同 VLAN 建立 SVI,再透過 Routing Table 在這些 VLAN 之間轉送 IP Packet。
Router-on-a-Stick:
VLAN
↓
Trunk
↓
Router Subinterface
↓
Routing
Layer 3 Switch:
VLAN
↓
SVI
↓
Routing
↓
SVI
↓
VLAN
設備長得不一樣,但最底下的邏輯還是:
同網段
→ Layer 2
不同網段
→ Default Gateway
→ Layer 3 Routing
現在 VLAN 10 和 VLAN 20 已經可以互通了。
但這時突然發現一件事情。
假設:
VLAN 10
員工
VLAN 20
訪客
VLAN 30
內部 Server
如果 Layer 3 Switch Routing Table 裡全部都有 Route:
192.168.10.0/24
192.168.20.0/24
192.168.30.0/24
那是不是代表:
Guest VLAN
↓
也可以直接連 Server VLAN?
前面說 VLAN 是為了隔離。
結果一開 Inter-VLAN Routing,好像又全部打通了。