網絡小故事 6 · 進階

一條線載多區Trunk(中繼)與 802.1Q 標籤

兩部 Switch 之間只有一條線,怎樣同時傳送兩個 VLAN 的資料?

主角:八爪、小比閱讀時間約 10 分鐘

建議先讀:小故事 5「VLAN」

1. 故事

按「下一步」一步一步看。每一步都有一位角色出場,解釋自己正在做什麼。

序幕:溫習一下

第 1 步/共 11 步

一部 Switch,兩個 VLAN

上次我把 Port(連接埠)分成家人區 VLAN 10 和客人區 VLAN 20。接一般裝置、只屬於一個 VLAN 的 Port,叫 Access Port(存取連接埠)。

動畫文字版(全部步驟)
  1. 序幕:溫習一下
  2. 一部 Switch,兩個 VLAN 八爪:上次我把 Port(連接埠)分成家人區 VLAN 10 和客人區 VLAN 20。接一般裝置、只屬於一個 VLAN 的 Port,叫 Access Port(存取連接埠)。
  3. 第一幕:樓上多了一部 Switch
  4. 書房的 S3 八爪:樓上書房加了一部 Switch S3,那裡也有家人的書房電腦(VLAN 10)和客人電腦 2(VLAN 20)。樓上樓下要怎樣連起來?
  5. 每個 VLAN 各拉一條線? 八爪:最簡單的方法:VLAN 10 一條線,VLAN 20 一條線。兩條線兩端都是 Access Port,各自只送一區的 Frame(訊框)。
  6. VLAN 一多,線就多 八爪:2 個 VLAN 要 2 條線,還可以接受。如果有 10 個 VLAN,就要 10 條線,兩邊各用 10 個 Port!我的觸手都不夠用了。
    • 每加一個 VLAN,就要多拉一條線
    • 而且浪費兩邊的 Port
  7. 第二幕:Trunk 出場
  8. 一條線載多區 八爪:改用一條 Trunk(中繼)!它可以同時運載很多個 VLAN。問題是:S3 收到一個 Frame,怎樣知道它屬於哪一區?
  9. 貼上 802.1Q 標籤 小比:阿麥要送 Frame 給書房電腦。我離開阿麥時沒有標籤;S2 把我送上 Trunk 前,在我的標頭插入一張 802.1Q 標籤,寫著「VLAN 10」。
    • 標籤共 4 Byte(位元組),插在寄件人 MAC Address 之後
    • 裡面的 VLAN ID 有 12 個位元:可用 1 至 4094
  10. S3 看標籤、再拿走標籤 八爪:收到!馬上送到正確的連接埠!S3 看到標籤「VLAN 10」,就只在 VLAN 10 的記錄中找收件人。把 Frame 送到書房電腦的 Access Port 前,先拿走標籤。電腦永遠看不到這張標籤!
  11. 客人的 Frame:VLAN 20 小比:客人電腦 1 送 Frame 給客人電腦 2。這次 S2 貼上「VLAN 20」。同一條 Trunk,兩區的 Frame 可以交錯通過,互不混淆。
  12. Broadcast 也跟著標籤走 小比:客人電腦 1 發出 Broadcast(廣播)。S2 把它送到自己 VLAN 20 的 Port,以及 Trunk。S3 看到「VLAN 20」標籤,只送到客人電腦 2,書房電腦完全收不到。
    • Broadcast Domain(廣播域)仍然按 VLAN 分開,就算跨越兩部 Switch
  13. 沒有標籤的 Native VLAN 八爪:Trunk 上有一個特別的 VLAN,它的 Frame 不加標籤,叫 Native VLAN(原生 VLAN),預設是 VLAN 1。兩端一定要設定成一樣,否則 Frame 會走錯區。
    • Allowed VLAN(允許的 VLAN):Trunk 可以只讓需要的 VLAN 通過,例如 10 和 20
    • 安全小貼士:把 Native VLAN 改成沒有裝置使用的 VLAN
  14. 總結:一條線,很多區 八爪: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 都會自動做好這件事。

小比的一程:貼標籤、拿標籤

  1. 阿麥送出普通 Frame,沒有標籤,由 Access Port 進入 S2。
  2. S2 知道這個 Port 屬於 VLAN 10。收件人書房電腦在 Trunk 那一邊,於是插入標籤「VLAN 10」,送上 Trunk。
  3. S3 讀標籤,只在 VLAN 10 的記錄中找收件人。
  4. 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

  1. 假設學校有三層,每層一部 Switch,全校有 4 個 VLAN:老師、學生、訪客、打印機。
  2. 如果每個 VLAN 各拉一條線,把三層 Switch 串連起來(1 樓接 2 樓、2 樓接 3 樓),一共要拉多少條線?(答案:4 × 2 = 8 條。)
  3. 改用 Trunk 呢?(答案:2 條。)
  4. 想一想:打印機 VLAN 只在 1 樓有裝置,樓層之間的 Trunk 需要讓它通過嗎?(提示:想一想 Allowed VLAN。)

小互動

這個 Frame 有沒有 802.1Q 標籤?

以下每一個 Frame,身上有沒有 802.1Q 標籤?

  1. 1阿麥(Access Port)送出的 Frame

  2. 2S2 經 Trunk 送去 S3 的 VLAN 20 Frame

  3. 3S3 送到書房電腦(Access Port)的 Frame

  4. 4經 Trunk 送出的 Native VLAN Frame

  5. 5S2 經 Trunk 送去 S3 的 VLAN 10 Broadcast

  6. 6客人電腦收到的 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. 小測驗

第 1 題,共 3 題Trunk 是什麼?
第 2 題,共 3 題802.1Q 標籤中的 VLAN ID 有多少個位元?
第 3 題,共 3 題書房電腦(接在 Access Port)收到的 Frame 有沒有 802.1Q 標籤?

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(生成樹協定)化解。