我們聊了 VLAN 的主要目的是可以用相對於實體 LAN 切分來說,簡單且便宜些的來設定切分子網路,而子網路可以透過隔離不同區域的流量,來提高安全性和流量控管。
那麼今天我們來聊聊,實際上 VLAN 是如何做到切分子網的?
前面聊過,VLAN Switch 透過標示網路孔不同的 VLAN,如 VLAN 10、VLAN 20 這樣的形式來區分子網。如果透過 VLAN 在 Switch 中被轉送的封包,都會以 Layer 2(資料連結層)的封包被區分到不同的子網路中。
而 VLAN 的概念主要是在我們最常用且主要的 Layer 2 協議:Ethernet 中實現的,在 Layer 2 的資料我們通常稱作 Frame,Ethernet Frame 的內容則包含 Ethernet Header 和 Payload。其中 Header 裡面有 Preamble、MAC 等資訊,用來標示這個 Frame 從哪來並且要往哪裡去。
我們今天要談到的 VLAN Header 被定義在 IEEE 802.1Q 中,其做法是插入一個 4 Bytes 的資料在 Ethernet Frame 當中,讓 Switch 知道這個 Frame 是屬於哪個 VLAN 的。
*Ethernet Frame 插入 VLAN Header(802.1Q Header)
VLAN Header 包含的內容有
TPID(Tag Protocol Identifier),用來標示這是 802.1Q 的 Tag
PCP(Priority Code Point),用來定義 Frame 的優先級
CFI(Canonical Format Indicator),與 Token Ring(檢測封包碰撞)的相容有關
VID(VLAN ID)
當一個 Switch 接收到某個裝置送來的 Frame 時,就會根據進入的網路孔所設定的 VLAN ID 來幫此 Frame 加上 VLAN Header,然後轉送到下一個 Switch,或是直接送到與此 Switch 相連的目標設備。
並且在將 Frame 送離 Switch 時,把這個 VLAN Header 拿掉,復原成原本的樣子。而終端的設備不需要會,也不用知道 VLAN,就能自動被 Switch 分配在某個子網路底下了。
理解了 VLAN 基本的原理,我們接著來看看更多 VLAN Header 的細節。
每個用 VLAN 技術所切分的子網,我們都可以稱作一個 VLAN,而每個 VLAN 都有一個其獨特的 ID 來互相區別。
這個 ID 通常可以選用一個介於 1 到 4095 之間的數字,是因為在定義 VLAN 的 IEEE 802.1Q 標準中,指定了 VLAN ID 儲存的長度為 12 bits,所以從 0 開始算的話,最多有 2^12,也就是 4096 個數字可以用。
當我們在設定不同 VLAN 時,就可以指定 ID 來區分不同的 VLAN,例如可以在公司 10 樓的子網稱作 VLAN 10,也可以將某 Range 為 192.168.20.0/24 的子網命名成 20,但是不能選用 0 以及避免使用 1。
其中 VLAN 0 為保留值,除了兼容不支持 VLAN 的舊設備外,還用來將此封包設為優先的封包(Priority Tagging);而 VLAN 1 通常是大部分 Switch 的預設 VLAN,沒有被分配到 VLAN 1 的裝置都會歸屬在 VLAN 1 之下,而這將容易導致上一講所提到的廣播流量遽增。
除了 VLAN ID 外,還有 PCP 等等資訊,讓我們繼續深究。