12、VLAN device for 802.1q講解

VLAN 又稱虛擬網絡,是一個被廣泛使用的概念,有些應用程序把自己的內部網絡也稱爲 VLAN。此處主要說的是在物理世界中存在的,需要協議支持的 VLAN。它的種類很多,按照協議原理一般分爲:MACVLAN、802.1.q VLAN、802.1.qbg VLAN、802.1.qbh VLAN。其中出現較早,應用廣泛並且比較成熟的是 802.1.q VLAN,其基本原理是在二層協議裏插入額外的 VLAN 協議數據(稱爲 802.1.q VLAN Tag),同時保持和傳統二層設備的兼容性。Linux 裏的 VLAN 設備是對 802.1.q 協議的一種內部軟件實現,模擬現實世界中的 802.1.q 交換機。

圖片.png

 

如圖所示,Linux 裏 802.1.q VLAN 設備是以母子關係成對出現的,母設備相當於現實世界中的交換機 TRUNK 口,用於連接上級網絡,子設備相當於普通接口用於連接下級網絡。當數據在母子設備間傳遞時,內核將會根據 802.1.q VLAN Tag 進行對應操作。母子設備之間是一對多的關係,一個母設備可以有多個子設備,一個子設備只有一個母設備。

當一個子設備有一包數據需要發送時,數據將被加入 VLAN Tag 然後從母設備發送出去。當母設備收到一包數據時,它將會分析其中的 VLAN Tag,如果有對應的子設備存在,則把數據轉發到那個子設備上並根據設置移除 VLAN Tag,否則丟棄該數據。在某些設置下,VLAN Tag 可以不被移除以滿足某些監聽程序的需要,如 DHCP 服務程序。

舉例說明如下:eth0 作爲母設備創建一個 ID 爲 100 的子設備 eth0.100。此時如果有程序要求從 eth0.100 發送一包數據,數據將被打上 VLAN 100 的 Tag 從 eth0 發送出去。如果 eth0 收到一包數據,VLAN Tag 是 100,數據將被轉發到 eth0.100 上,並根據設置決定是否移除 VLAN Tag。如果 eth0 收到一包包含 VLAN Tag 101 的數據,其將被丟棄。

上述過程隱含以下事實:對於寄主 Linux 系統來說,母設備只能用來收數據,子設備只能用來發送數據。和 Bridge 一樣,母子設備的數據也是有方向的,子設備收到的數據不會進入母設備,同樣母設備上請求發送的數據不會被轉到子設備上。可以把 VLAN 母子設備作爲一個整體想象爲現實世界中的 802.1.q 交換機,下級接口通過子設備連接到寄主 Linux 系統網絡裏,上級接口同過主設備連接到上級網絡,當母設備是物理網卡時上級網絡是外界真實網絡,當母設備是另外一個 Linux 虛擬網絡設備時上級網絡仍然是寄主 Linux 系統網絡。

需要注意的是母子 VLAN 設備擁有相同的 MAC 地址,可以把它當成現實世界中 802.1.q 交換機的 MAC,因此多個 VLAN 設備會共享一個 MAC。當一個母設備擁有多個 VLAN 子設備時,子設備之間是隔離的,不存在 Bridge 那樣的交換轉發關係,原因如下:802.1.q VLAN 協議的主要目的是從邏輯上隔離子網。

現實世界中的 802.1.q 交換機存在多個 VLAN,每個 VLAN 擁有多個端口,同一 VLAN 端口之間可以交換轉發,不同 VLAN 端口之間隔離,所以其包含兩層功能:交換與隔離。Linux VLAN device 實現的是隔離功能,沒有交換功能。一個 VLAN 母設備不可能擁有兩個相同 ID 的 VLAN 子設備,因此也就不可能出現數據交換情況。如果想讓一個 VLAN 裏接多個設備,就需要交換功能。在 Linux 裏 Bridge 專門實現交換功能,因此將 VLAN 子設備 attach 到一個 Bridge 上就能完成後續的交換功能。總結起來,Bridge 加 VLAN device 能在功能層面完整模擬現實世界裏的 802.1.q 交換機。

Linux 支持 VLAN 硬件加速,在安裝有特定硬件情況下,圖中所述內核處理過程可以被放到物理設備上完成


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章