1. 故事
按「下一步」一步一步看。每一步都有一位角色出場,解釋自己正在做什麼。
序幕:溫習一下
第 1 步/共 11 步
一部 Switch,兩個 VLAN
上次我把 Port(連接埠)分成家人區 VLAN 10 和客人區 VLAN 20。接一般裝置、只屬於一個 VLAN 的 Port,叫 Access Port(存取連接埠)。
動畫文字版(全部步驟)
- 序幕:溫習一下
- 一部 Switch,兩個 VLAN 八爪:上次我把 Port(連接埠)分成家人區 VLAN 10 和客人區 VLAN 20。接一般裝置、只屬於一個 VLAN 的 Port,叫 Access Port(存取連接埠)。
- 第一幕:樓上多了一部 Switch
- 書房的 S3 八爪:樓上書房加了一部 Switch S3,那裡也有家人的書房電腦(VLAN 10)和客人電腦 2(VLAN 20)。樓上樓下要怎樣連起來?
- 每個 VLAN 各拉一條線? 八爪:最簡單的方法:VLAN 10 一條線,VLAN 20 一條線。兩條線兩端都是 Access Port,各自只送一區的 Frame(訊框)。
- VLAN 一多,線就多 八爪:2 個 VLAN 要 2 條線,還可以接受。如果有 10 個 VLAN,就要 10 條線,兩邊各用 10 個 Port!我的觸手都不夠用了。
- 每加一個 VLAN,就要多拉一條線
- 而且浪費兩邊的 Port
- 第二幕:Trunk 出場
- 一條線載多區 八爪:改用一條 Trunk(中繼)!它可以同時運載很多個 VLAN。問題是:S3 收到一個 Frame,怎樣知道它屬於哪一區?
- 貼上 802.1Q 標籤 小比:阿麥要送 Frame 給書房電腦。我離開阿麥時沒有標籤;S2 把我送上 Trunk 前,在我的標頭插入一張 802.1Q 標籤,寫著「VLAN 10」。
- 標籤共 4 Byte(位元組),插在寄件人 MAC Address 之後
- 裡面的 VLAN ID 有 12 個位元:可用 1 至 4094
- S3 看標籤、再拿走標籤 八爪:收到!馬上送到正確的連接埠!S3 看到標籤「VLAN 10」,就只在 VLAN 10 的記錄中找收件人。把 Frame 送到書房電腦的 Access Port 前,先拿走標籤。電腦永遠看不到這張標籤!
- 客人的 Frame:VLAN 20 小比:客人電腦 1 送 Frame 給客人電腦 2。這次 S2 貼上「VLAN 20」。同一條 Trunk,兩區的 Frame 可以交錯通過,互不混淆。
- Broadcast 也跟著標籤走 小比:客人電腦 1 發出 Broadcast(廣播)。S2 把它送到自己 VLAN 20 的 Port,以及 Trunk。S3 看到「VLAN 20」標籤,只送到客人電腦 2,書房電腦完全收不到。
- Broadcast Domain(廣播域)仍然按 VLAN 分開,就算跨越兩部 Switch
- 沒有標籤的 Native VLAN 八爪:Trunk 上有一個特別的 VLAN,它的 Frame 不加標籤,叫 Native VLAN(原生 VLAN),預設是 VLAN 1。兩端一定要設定成一樣,否則 Frame 會走錯區。
- Allowed VLAN(允許的 VLAN):Trunk 可以只讓需要的 VLAN 通過,例如 10 和 20
- 安全小貼士:把 Native VLAN 改成沒有裝置使用的 VLAN
- 總結:一條線,很多區 八爪:Access Port 只屬於一個 VLAN,Frame 不帶標籤;Trunk 可以運載很多個 VLAN,用 802.1Q 標籤分辨。不論有多少個 VLAN,樓上樓下只要一條線!
2. 問題在哪裡
上一個故事,八爪把一部 Switch(交換器)分成家人區 VLAN(虛擬區域網絡)10 和客人區 VLAN 20。現在樓上書房多了一部 Switch S3,客人電腦 2 也搬到了樓上書房。樓上既有家人的書房電腦,也有客人的裝置。
最直接的方法,是每個 VLAN 各拉一條線。這些線兩端都是 Access Port(存取連接埠),即只屬於一個 VLAN 的 Port(連接埠)。可是線的數目會跟著 VLAN 一起增加:
| VLAN 數目 | 樓上樓下要拉的線 | 兩部 Switch 合共用掉的 Port |
|---|---|---|
| 2 | 2 | 4 |
| 10 | 10 | 20 |
| 50 | 50 | 100 |
公司網絡動輒有幾十個 VLAN。每加一個 VLAN 就要再拉一條線,既浪費 Port,又難以管理。
3. 網絡怎樣解決
想像一條專線巴士,車上坐著不同學校的學生。每人襟前掛著校章,到站時司機看校章,就知道誰應該在哪裡下車。
Trunk(中繼)就是這樣一條「巴士線」:一條連線,同時運載很多個 VLAN 的 Frame(訊框)。Switch 把 Frame 送上 Trunk 前,會插入一張 802.1Q 標籤,寫明它屬於哪個 VLAN。對面的 Switch 看標籤分區,送到 Access Port 前再把標籤拿走。
不論有多少個 VLAN,樓上樓下只要一條線。
4. 看深一點
Access Port 和 Trunk 的分別
| Access Port(存取連接埠) | Trunk(中繼) | |
|---|---|---|
| 屬於多少個 VLAN | 一個 | 很多個 |
| 通常接什麼 | 電腦、電視、打印機等一般裝置 | 另一部 Switch、Router(路由器)、Access Point(無線基地台) |
| Frame 有沒有標籤 | 沒有 | 有(Native VLAN 除外) |
一般裝置根本不知道自己在哪個 VLAN。這一切都由 Switch 在 Port 上設定和處理。
802.1Q 標籤插在哪裡?
802.1Q 是 IEEE(電機電子工程師學會)訂立的標準,規定怎樣在 Frame 裡加上 VLAN 標籤。標籤共 4 Byte(位元組),插在寄件人 MAC Address(硬體位址)之後:
普通 Frame:
[收件人 MAC][寄件人 MAC][類型][資料內容……][檢查碼]
帶 802.1Q 標籤的 Frame:
[收件人 MAC][寄件人 MAC][802.1Q 標籤 4 Byte][類型][資料內容……][檢查碼]
這 4 Byte 裡面有:
| 欄位 | 長度 | 作用 |
|---|---|---|
| TPID | 16 位元 | 固定為 0x8100,表示「後面是一張 802.1Q 標籤」 |
| PCP(Priority Code Point,優先次序) | 3 位元 | 標示 Frame 有多急,例如網絡電話可以優先 |
| DEI(Drop Eligible Indicator) | 1 位元 | 網絡擠塞時,標示這個 Frame 可以先被丟棄 |
| VLAN ID | 12 位元 | 這個 Frame 屬於哪個 VLAN |
12 個位元可以表示 0 至 4095。0 和 4095 是保留的,所以可用的 VLAN ID 是 1 至 4094。
Frame 多了 4 Byte,最後的檢查碼也要重新計算。加標籤和拿走標籤時,Switch 都會自動做好這件事。
小比的一程:貼標籤、拿標籤
- 阿麥送出普通 Frame,沒有標籤,由 Access Port 進入 S2。
- S2 知道這個 Port 屬於 VLAN 10。收件人書房電腦在 Trunk 那一邊,於是插入標籤「VLAN 10」,送上 Trunk。
- S3 讀標籤,只在 VLAN 10 的記錄中找收件人。
- S3 拿走標籤,把普通 Frame 送到書房電腦的 Access Port。
Broadcast(廣播)也一樣:客人電腦 1 的 Broadcast 經 Trunk 時帶著「VLAN 20」標籤,S3 只會送到 VLAN 20 的 Port。所以就算跨越兩部 Switch,每個 VLAN 仍然是一個獨立的 Broadcast Domain(廣播域)。
Native VLAN(原生 VLAN)和 Allowed VLAN(允許的 VLAN)
- Native VLAN:Trunk 上唯一不加標籤的 VLAN,預設是 VLAN 1。Switch 在 Trunk 收到沒有標籤的 Frame,就當它屬於 Native VLAN。兩端的 Native VLAN 必須一樣,否則 S2 的 VLAN 1 Frame 可能會被 S3 當成另一個 VLAN,走錯了區。
- Allowed VLAN:Trunk 可以只讓指定的 VLAN 通過,例如只允許 10 和 20。不需要的 VLAN 不上 Trunk,既省頻寬,也更安全。
很多 Switch 的設定大約是這樣(不同牌子的寫法會有分別):
interface Port24
switchport mode trunk
switchport trunk allowed vlan 10,20
switchport trunk native vlan 999
這裡把 Native VLAN 改成一個沒有裝置使用的 VLAN 999,是常見的安全做法,可以減少有人偽造雙重標籤、偷偷跳進其他 VLAN 的風險。
有些 Switch 的設定頁不寫 Access 和 Trunk,而是寫「Untagged(不加標籤)」和「Tagged(加標籤)」,意思是一樣的。
5. 動手試試
任務:替你的學校畫一條 Trunk
- 假設學校有三層,每層一部 Switch,全校有 4 個 VLAN:老師、學生、訪客、打印機。
- 如果每個 VLAN 各拉一條線,把三層 Switch 串連起來(1 樓接 2 樓、2 樓接 3 樓),一共要拉多少條線?(答案:4 × 2 = 8 條。)
- 改用 Trunk 呢?(答案:2 條。)
- 想一想:打印機 VLAN 只在 1 樓有裝置,樓層之間的 Trunk 需要讓它通過嗎?(提示:想一想 Allowed VLAN。)
小互動
這個 Frame 有沒有 802.1Q 標籤?
以下每一個 Frame,身上有沒有 802.1Q 標籤?
-
1阿麥(Access Port)送出的 Frame
-
2S2 經 Trunk 送去 S3 的 VLAN 20 Frame
-
3S3 送到書房電腦(Access Port)的 Frame
-
4經 Trunk 送出的 Native VLAN Frame
-
5S2 經 Trunk 送去 S3 的 VLAN 10 Broadcast
-
6客人電腦收到的 Frame
全部分對了!標籤只出現在 Trunk 上(Native VLAN 除外);Access Port 兩邊的 Frame 都沒有標籤。
6. 比喻的極限
- 標籤不是貼在外面的貼紙。 802.1Q 標籤是插在 Frame 標頭中間的 4 Byte 資料,Frame 因此變長,檢查碼也要重新計算。
- Trunk 不會令網線變快。 一條 1 Gbps 的 Trunk,仍然只有 1 Gbps,所有 VLAN 一起分享。動畫中兩區的小比交錯通過,其實是在輪流使用同一條線。
- 一般裝置不是完全不懂標籤。 伺服器、Access Point 和 Router 都可以設定成讀寫 802.1Q 標籤,直接接上 Trunk(小故事 10 的路路就會這樣做)。只有普通的電腦和電視通常看不到標籤。
- Native VLAN 不是「沒有 VLAN」。 沒有標籤的 Frame 仍然屬於一個 VLAN,只是在 Trunk 上省略了標籤。
- VLAN 分開了,不代表完全安全。 Trunk 設定錯誤(例如 Native VLAN 不一致、讓不需要的 VLAN 通過),都可能令 Frame 走錯區。
7. 小測驗
8. 重點筆記
- Access Port(存取連接埠)只屬於一個 VLAN,Frame 不帶標籤;Trunk(中繼)可以同時運載很多個 VLAN。
- Frame 經 Trunk 時,Switch 插入 4 Byte 的 802.1Q 標籤,其中 12 位元的 VLAN ID 寫明它屬於哪一區,可用 1 至 4094。
- 對面的 Switch 看標籤分區,送到 Access Port 前拿走標籤,所以一般裝置看不到標籤。
- Native VLAN(原生 VLAN)在 Trunk 上不加標籤,兩端必須設定一致;Allowed VLAN(允許的 VLAN)決定哪些 VLAN 可以上 Trunk。
- 用了 Trunk,每個 VLAN 仍然是獨立的 Broadcast Domain,就算跨越多部 Switch。
延伸閱讀
有了 Trunk,樓上樓下只要一條線,就可以運載所有 VLAN。可是只有一條線,萬一斷了怎麼辦?多拉一條後備線,卻可能令整個 LAN 癱瘓!下一個故事,八爪會遇上一場「迷路風暴」,阿帕教授會告訴大家怎樣用 Spanning Tree Protocol(生成樹協定)化解。