LAN 表示 Local Area Network ,本地局域網,一般使用 Hub 或者 Switch 來鏈接LAN 中的計算機。通常來講,兩臺計算機連入同一個 Hub 或者 Switch 時,他們就在同一個LAN中。
一個LAN 表示一個廣播域。其含義是:LAN中的全部成員都會受到任意一個成員發出的廣播包。
VLAN 表示 Virtual LAN。一個帶有VLAN 功能的 Switch 可以將本身的端口劃分出多個LAN。計算機發出的廣播包能夠被同一個LAN中的其餘計算機收到,但位於其餘LAN的計算機則沒法收到。簡單的說,VLAN將一個交換機分紅了多個交換機,限制了廣播的範圍,在二層將計算機隔離到不一樣的VLAN中。
比方說,有兩組機器,Group A 和 Group B ,咱們想配置成Group A 中的機器能夠互相訪問,Group B 中的機器也能夠互相訪問,可是 Group A 和 Group B 中的機器沒法互相訪問。一種方法是使用兩個交換機,A和B分別接到不一樣的交換機上。另外一種方法是使用一個帶VLAN功能的交換機,將 A 和 B的機器分別接到不一樣的VLAN中。
請注意,VLAN的隔離是二層上的隔離,A 和 B 沒法互相訪問指的是二層廣播包(好比arp)沒法跨域VLAN的邊界。但在三成上(好比IP)是能夠經過路由器讓A 和 B 互通的。概念上必定要分清楚。
如今的交換機幾乎都是支持VLAN的。一般交換機的端口有兩種配置模式: Access 和 Trunk,以下圖
Access 口
這些口被打上了VLAN的標籤,代表該端口屬於哪一個VLAN。不一樣VLAN用VLAN ID 來區分,VLAN ID 的範圍是 1- 4096 。Access 口都是直接與計算機網絡相連的,這樣從該網卡出來的數據包流入 Access口後就被打上了所在的VLAN 標籤。Access 口只能屬於一個VLAN。
Trunk 口
架設有兩個交換機 A 和 B 。A上有 VLAN1(紅)、VLAN2(黃)、VLAN3(藍);B 上也有VLAN一、二、3,那如何讓 AB 上相同的VLAN之間可以通訊呢?
辦法是將 A 和 B 連起來,並且鏈接 A 和 B 的端口要容許 VLAN一、二、3 這三個VLAN的數據經過。這樣的端口就是 Trunk 口了。VLAN 一、二、3 的數據包在經過Trunk 口到達對方交換機的過程當中始終帶着本身的VLAN 標籤。
瞭解了VLAN的概念以後,咱們來看KVM虛擬化環境下是如何實現 VLAN 的,見下圖
eth0 數宿主機上的物理網卡,有一個命名爲 eth0.10的自身與之相連。
eth0.10 就是VLAN設備了,其VLAN ID 就是 VLAN10
eth0.10 古仔命名爲 brvlan10 的Linux Bridge上,虛機VM1 的虛擬網卡vnet0也掛載brvlan10 上。
這樣配置的效果就是:宿主機用軟件實現了一個交換機(虛擬的),上面定義了一個VLAN10 。 eth0.10 、brvlan10 和 vnet0 都分別接到了 VLAN 10 的Access 口上。而eth0 就是一個 Trunk口。VM1 經過 vnet0 發出來的數據包會被打上 VLAN10 的標籤。
eth0.10 的做用是:定義了VLAN10
brvlan10 的做用是:Bridge 上鍊接的其餘設備自動加入到 VLAN10 中。
下面咱們在增長一個 VLAN20 ,如圖
這樣虛擬交換機就有兩個VLAN了,VM1 和 VM2分別屬於 VLAN10 和 VLAN 20 。對於新建立的虛機,只須要將其虛擬網卡放入對應的 Bridge中,就能使用其所屬的 VLAN。
VLAN 設備老是以母子關係出現,母子設備之間是一對多的關係。
一個母設備(eth0),能夠有多個子設備(eth0.10 eth0.20 ....),而一個子設備只有一個母設備。