JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

把一個區域網路切成許多個:VLAN

交換器學會了每個人坐在哪裡,卻仍把整間辦公室當成一個共用的大房間。這篇要看的是:每個訊框上一個被標記的號碼,如何把一個實體區域網路切成許多看不見、彼此隔離的網路,以及為什麼交換器之間那條主幹,才是真正的聰明所在。

一台交換器,一個大房間

到這裡你已經知道,交換器是一位學會了每個人坐在哪裡的接待員:它看每個訊框上的來源位址,靠 MAC 學習建出轉送表,再把單點傳送的訊框只送往通往正確座位的那一個埠。比起集線器,這是巨大的進步。但有一種訊框,交換器仍然無法聰明處理:廣播,也就是一次寄給所有人的訊框。當一台裝置喊出「誰擁有這個位址?」或「有沒有人是 DHCP 伺服器?」時,交換器只能把那個訊框氾濫到每一個埠去。

回想上一篇的關鍵事實:一台單純的第二層交換器並不會切開廣播網域。把十台交換器串在一起,你仍然只有一個巨大的廣播網域;每個廣播都會抵達每台裝置。在小辦公室裡這無傷大雅。但在一棟有數百台機器的大樓裡——會計部、工程部、訪客 Wi-Fi、監視攝影機,全擠在一個扁平的網路上——它就同時變成了噪音與信任的問題。某一群的廣播會氾濫到所有人;而原則上任一台機器都能在第二層直接和另一台對話。

從前修正這問題的辦法很實體:替每一群買一台獨立的交換器,並把它們接成永不相通。這行得通,但既浪費又僵硬。你為小群組多配了埠、為大群組卻又不夠用;而當會計部某人搬到一張接在工程部交換器上的座位那天,你就得去拉線了。我們難道不能維持同一組交換器、同一組線纜,卻仍把辦公室劃分成各自獨立的房間嗎?這正是 VLAN 所做的事。

核心構想:給每張座位一個顏色

虛擬區域網路,也就是 VLAN,是一種把一台實體交換器用軟體切成數台彼此假裝不認識的邏輯交換器的辦法。你替每個交換埠指派一個 VLAN 號碼——把它想成一個顏色。也許埠 1 到 8 是紅色(VLAN 10,會計部),埠 9 到 16 是藍色(VLAN 20,工程部)。交換器現在執行的規則很簡單:從紅色埠進來的訊框,只能往其他紅色埠送出,絕不送往藍色埠。紅與藍共用同一個金屬盒子,行為上卻像兩台從未被接在一起的獨立交換器。

回報是:每個 VLAN 都成為自己的廣播網域。當紅色埠上的某台會計機器送出一個廣播,交換器只把它氾濫到其他紅色埠;藍色的工程機器永遠聽不到。我們把一個扁平的區域網路切成了許多更小、更安靜、彼此隔離的區域網路,卻沒多買一台交換器、沒動過一條線。交換器甚至替每個 VLAN 各保留一張 MAC 學習表,所以紅色的位址和藍色的位址,活在不同的世界裡。

主幹:一條線,許多顏色

在一台交換器上玩顏色很容易。難的是兩台交換器。假設會計組和工程組都各有人坐在一樓的交換器和二樓的交換器上。紅與藍都得橫跨這兩個盒子。你可以在兩台交換器之間拉兩條線,一條紅、一條藍,但這無法擴展;若有 50 個 VLAN,你就得拉 50 條線。聰明的修法是:把所有顏色都送下同一條共享的連結,並替每個訊框貼上標籤,好讓對面的交換器知道它屬於哪個顏色。

那條共享、承載所有顏色的連結就叫做主幹(trunk),而貼標籤的標準是 IEEE 802.1Q,它是 VLAN 主幹的核心。當一個訊框從主幹埠離開某台交換器時,交換器會在乙太網路訊框標頭裡、緊接在來源 MAC 位址之後,插入一個小小的四位元組 VLAN 標籤。標籤裡有十二個位元裝著 VLAN 號碼,這也是為什麼 VLAN ID 的範圍是 1 到 4094。接收的交換器讀取標籤、得知該訊框屬於哪個顏色、把標籤剝掉,再只在那個 VLAN 之內轉送這個訊框。這個標籤是一張臨時的旅行貼紙,只在交換器之間的線路上出現。

Inside a switch (no tag needed -- port colour says it all):
   [ dest MAC | src MAC | type | ........ payload ........ | CRC ]

On a trunk between switches (802.1Q tag inserted):
   [ dest MAC | src MAC | 0x8100 | VLAN=10 | type | payload | CRC ]
                                  \__ 4-byte tag, 12 bits = VID __/

  Access port  -> sends/receives UNTAGGED frames (one VLAN)
  Trunk  port  -> sends/receives TAGGED frames (many VLANs)
存取埠承載一個未加標籤的 VLAN;主幹埠承載多個 VLAN,每個訊框都在 802.1Q 標籤裡蓋上一個 12 位元的 VLAN ID。

所以交換埠有兩種口味。存取埠面對的是一般裝置——筆電或印表機——只承載一個 VLAN;那裡的訊框是樸素、未加標籤的,因為裝置根本不知道自己活在某個 VLAN 裡。主幹埠面對的是另一台交換器(或路由器),同時承載多個 VLAN,每個訊框都戴著它的 802.1Q 標籤。大多數座位的佈線是存取埠;交換器之間的連結則是主幹。光是這一個區別——存取對主幹、未加標籤對加標籤——就幾乎涵蓋了你讀懂一份真實交換器設定所需的一切。

把一個訊框走過主幹一次

讓我們追蹤單一個訊框,好讓存取埠、標籤與主幹三者都各就各位。想像兩台交換器由一條主幹相連。會計部的 Alice(VLAN 10)坐在一樓的交換器上;同樣在會計部的 Bob(VLAN 10)坐在二樓的交換器上。Alice 送給 Bob 一個訊框。

  1. Alice 的筆電把一個普通、未加標籤的乙太網路訊框送進它的存取埠。它完全不知道 VLAN 存在;它只是把訊框定址給 Bob 的 MAC。
  2. 一樓的交換器看到訊框是從一個 VLAN 10 的存取埠進來的,於是知道這個訊框是紅色的。Bob 只能從主幹那一側抵達,所以交換器插入一個蓋著 VLAN 10 的 802.1Q 標籤,把這個現在已加標籤的訊框送下主幹。
  3. 二樓的交換器收到加標籤的訊框,從標籤讀出 VLAN 10,並把查找限定在 VLAN 10 的轉送表裡。它在一個 VLAN 10 的存取埠上找到了 Bob 的 MAC。
  4. 在把訊框送出給 Bob 之前,交換器把 802.1Q 標籤剝掉,因為 Bob 的筆電是一般裝置、預期收到的是樸素、未加標籤的訊框。Bob 收到的,恰好就是 Alice 送出的那個訊框,毫不知情它曾經戴過標籤。
  5. 倘若同時有一台 VLAN 20(藍色)的機器在廣播,它的廣播也會跨過主幹,但會標上 VLAN 20,所以對面的交換器只會把它氾濫到藍色的存取埠。紅與藍乘坐同一條線,卻從不相混。

請注意這份優雅:端點裝置保持幸福地單純而無知,而所有 VLAN 的智慧都活在交換器裡、以及它們之間的主幹上。標籤只為交換器之間的那一跳而存在,訊框一抵達目的埠就消失了。這正是你在整條學習階梯上一再見到的分層直覺——把一個機制藏在乾淨的邊界後面,好讓它上方的東西永遠不必在意。

主幹、迴圈,與綁束連結

VLAN 並未抹去上一篇的教訓;它是疊加在那些教訓之上。一條主幹仍然只是交換器之間的一條連結,所以交換器構成的網路仍可能含有迴圈,而迴圈仍會孳生廣播風暴。生成樹協定仍在底下運行,把多餘的連結修剪成一棵無迴圈的樹。事實上大多數網路跑的是按 VLAN 區分的生成樹版本,所以紅與藍各自能在同一批實體交換器上遵循略有不同的樹,藉此平衡負載,而不是讓某一條主幹閒置。

對於相反的問題,有個相關的把戲。有時候一條主幹根本不夠粗;兩台忙碌交換器之間的單一 1 Gbps 線纜成了瓶頸。生成樹禁止你只是再插上第二條線,因為那會是一個迴圈、它會把它停用。答案是鏈路聚合:要兩台交換器把兩條、四條或八條並行的線纜當成一條邏輯連結。生成樹於是只看到一條粗管(沒有迴圈),而交換器則把訊框分散到綁束的各條線纜上、把頻寬加總起來,附帶的好處是:若有一條線壞了,其餘的照樣撐住。