什么是VLAN
VLAN(Virtual LAN),翻譯成中文是“虛擬局域網”??梢钥醋鍪窃谝粋€物理局域網絡上搭建出幾個邏輯上分離的幾個局域網。舉個例子來說,如果一個交換機劃分為兩個VLAN,則相當于這臺交換機邏輯上劃分為兩個交換機。
上面這個簡單例子是對一臺交換機上的VLAN劃分,實際上VLAN也可以跨越多臺交換機,本質上VLAN是一個網絡層次上的概念,將整個網絡劃分為多個邏輯上隔離的網絡(一個VLAN就是一個獨立的廣播域)比如下圖的VLAN2和VLAN5。
那么我們為什么要引入VLAN的概念,VLAN究竟有哪些好處,總結起來主要有下面幾點:
- 更安全:數據包僅在本VLAN內傳遞。
由于配置了VLAN后,一個VLAN的數據包不會發送到另一個VLAN,這樣,其他VLAN的用戶的網絡上是收不到任何該VLAN的數據包,這樣就確保了該VLAN的信息不會被其他VLAN的人竊聽,從而實現了信息的保密。
- 更高效:泛洪轉發僅在本VLAN內復制。
按照802.1D透明網橋的算法,如果一個數據包找不到MAC表,那么交換機就會將該數據包向除接收端口以外的其他所有端口發送,這就是橋的泛洪轉發。(典型的廣播方式包括組播報文,廣播報文,以及未知單播報文都會進行泛洪轉發)。這樣的結果,毫無疑問極大的浪費了帶寬,如果配置了VLAN,那么,當一個數據包需要泛洪轉發時,交換機只會將此數據包發送到所有屬于該VLAN的其他端口,而不是所有的交換機的端口,這樣,就將數據包限制到了一個VLAN內。在一定程度上可以節省帶寬。
- 更方便:不改變物理組網的情況下,靈活進行邏輯網絡的變更。
使用VLAN的最終目標就是建立虛擬工作組模型,例如,在企業網中,同一個部門的就好象在同一個LAN上一樣,很容易的互相訪問,交流信息,同時,所有的廣播包也都限制在該虛擬LAN上,而不影響其他VLAN的人。一個人如果從一個辦公地點換到另外一個地點,而他仍然在該部門,那么,該用戶的配置無須改變;同時,如果一個人雖然辦公地點沒有變,但他更換了部門,那么,只需網絡管理員更改一下該用戶的配置即可。這個功能的目標就是建立一個動態的組織環境,當然,這只是一個理想的目標,要實現它,還需要一些其他方面的支持。
如何實現VLAN功能
1. 如何識別VLAN報文
要使網絡設備能夠分辨不同VLAN的報文,需要在報文中添加標識VLAN的字段。由于普通交換機工作在OSI模型的數據鏈路層,只能對報文的數據鏈路層封裝進行識別。因此,如果添加識別字段,也需要添加到數據鏈路層封裝中。
IEEE于1999年頒布了用以標準化VLAN實現方案的IEEE 802.1Q協議標準草案,對帶有VLAN標識的報文結構進行了統一規定。
- 無VLAN的傳統的以太網數據幀格式:目的MAC地址和源MAC地址之后封裝的是上層協議的類型字段,
- DA表示目的MAC地址
- SA表示源MAC地址
-
Type表示報文所屬協議類型。
傳統無VLAN的二層報文
- 增加VLAN Tag支持的以太網幀格式:IEEE 802.1Q協議規定在目的MAC地址和源MAC地址之后封裝4個字節的VLAN Tag,用以標識VLAN的相關信息。VLAN Tag包含四個字段,分別是TPID(Tag Protocol Identifier,標簽協議標識符)、Priority、CFI(Canonical Format Indicator,標準格式指示位)和VLAN ID。
- TPID用來判斷本數據幀是否帶有VLAN Tag,長度為16bit,缺省取值為0x8100。
- Priority表示報文的802.1P優先級,長度為3bit,相關內容請參見“QoS分冊”中的“QoS配置”。
- CFI字段標識MAC地址在不同的傳輸介質中是否以標準格式進行封裝,長度為1bit,取值為0表示MAC地址以標準格式進行封裝,為1表示以非標準格式封裝,缺省取值為0。
- VLAN ID標識該報文所屬VLAN的編號,長度為12bit,取值范圍為0~4095。由于0和4095為協議保留取值,所以VLAN ID的取值范圍為1~4094。
網絡設備利用VLAN ID來識別報文所屬的VLAN,根據報文是否攜帶VLAN Tag以及攜帶的VLAN Tag值,來對報文進行處理。
2. 交換機如何轉發VLAN報文
要說明交換機如何轉發報文,先得說明一下交換機支持VLAN時用到的幾個專用術語:
端口類型:VLAN交換機的端口一般可以分為幾大類:
- Access端口:一般用于交換機與終端之間,該類端口僅歸屬于一個VLAN。Access鏈路上的報文沒有VLAN tag,與傳統報文保持兼容。但交換機的Access端口上回配置Vlan。這樣所有從該Access鏈路上收到的報文都歸屬于Access端口所歸屬的Vlan。(核心概念:報文兼容,沒有vlan-tag)
- Trunk端口:一般交換機與交換機之間,該類型端口允許多個VLAN的報文通過。該端口所在的鏈路上的報文需要有VLAN tag。(核心概念:除默認Vlan外,其他VLAN報文有vlan-tag)
- Hybrid端口:Hybrid類型的端口可以允許多個VLAN通過,可以接收和發送多個VLAN的報文,可以用于交換機之間連接,也可以用于連接用戶的計算機。Hybrid端口和Trunk端口在接收數據時,處理方法是一樣的,唯一不同之處在于發送數據時:Hybrid端口可以允許多個VLAN的報文發送時不打標簽,而Trunk端口只允許缺省VLAN的報文發送時不打標簽。(核心概念:哪些vlan打tag,哪些不打tag可以手工配置)
術語:默認VLAN-ID(或者缺省VLAN-ID,PvidVlan,Native Vlan,都是一個意思):簡而言之,收報文:如果是沒有tag,則認為來自于默認vlan;發報文:如果是該vlan的報文則不打VLAN tag
- Access端口只屬于1個VLAN,所以它的缺省VLAN就是它所在的VLAN,不用設置;
- Hybrid端口和Trunk端口屬于多個VLAN,所以需要設置缺省VLAN ID。缺省情況下,Hybrid端口和Trunk端口的缺省VLAN為VLAN 1 。如果設置了端口的缺省VLAN ID,當端口接收到不帶VLAN Tag的報文后,則認為報文的VLAN ID是缺省VLAN-ID;當端口發送報文時,如果該報文的VLAN ID與端口缺省的VLAN ID相同,則系統將去掉報文的VLAN Tag,然后再發送該報文。
下面具體介紹著幾種端口的工作原理
2.1 Access端口
這一類端口只有一個唯一的VLAN。通常由于交換機與終端的連接。為了保持與已有終端的兼容性,在設計VLAN相關協議時有這樣一個約束:端口發送和接收的報文格式都不允許修改,也就是說,這一類接口上收發的報文都不帶VLAN信息。(Untagged)。
既然報文中不帶VLAN信息,又要滿足VLAN隔離性需求,則必然在端口上要進行VLAN-ID的設置(這個VLAN稱為端口的PVID)。
2.2 Access端口的報文轉發流程
- Acess端口收報文:
- 收到個報文判斷是否有VLAN信息:
- 如果沒有則打上端口 PVID并進行交換、轉發,
- 如果有則直接丟棄(缺省)
- Acess端口發報文:
Access端口發送非常簡單,將報文VLAN信息剝離,直接發送出去
2.2 Access端口如何劃分VLAN
為了方便用戶使用,各設備廠商實現了多種方式來進行VLAN劃分,總的來說,有靜態方式和動態方式兩大類:
- 靜態方式:通過用戶手工配置方式,來指定某個端口屬于哪個VLAN,靜態方式也成為基于端口的VLAN。當網絡中的計算機數目超過一定數字(比如數百臺)后,這些配置操作就會變得煩雜無比。并且,客戶機每次變更所連端口,都必須同時更改該端口所屬VLAN的設定——這顯然不適合那些需要頻繁改變拓補結構的網絡。
- 動態方式:動態VLAN則是根據每個端口所連的計算機,隨時改變端口所屬的VLAN。這可以減輕配置人員的負擔。動態VLAN又可以進一步分為下面3類:
- 基于MAC地址的VLAN(MAC Based VLAN)
基于MAC地址的VLAN,就是通過查詢并記錄端口所連計算機上網卡的MAC地址來決定端口的所屬。假定有一個MAC地址“A”被交換機設定為屬于VLAN “10”,那么不論MAC地址為“A”的這臺計算機連在交換機哪個端口,該端口都會被劃分到VLAN 10中去。
- 基于子網的VLAN(Subnet Based VLAN)
基于子網的VLAN,則是通過所連計算機的IP地址,來決定端口所屬VLAN的。不像基于MAC地址的VLAN,即使計算機因為交換了網卡或是其他原因導致MAC地址改變,只要它的IP地址不變,就仍可以加入原先設定的VLAN。
- 基于協議或用戶的VLAN(User Based VLAN)
基于協議或用戶的VLAN,則是根據交換機各端口所連的計算機發送報文的協議,或者計算機上當前登錄的用戶,來決定該端口屬于哪個VLAN。這里的用戶識別信息,一般是計算機操作系統登錄的用戶,比如可以是Windows域中使用的用戶名。這些用戶名信息,屬于OSI第四層以上的信息。
2.4 Trunk端口
其實原則上,有了Access口,就可以完成VLAN所需要的完整功能了。比如:交換機上也使用Access口進行連接,每一個端口一個VLAN進行隔離。比如下面的例子,兩個VLAN,全部使用Access接口來構建。
但這兒存在一個問題,因為一個Access口僅屬于一個VLAN,如果兩個交換機配置了成百上千個VLAN,這些VLAN需要跨交換機組網時,意味著兩個交換機之間需要連接成百上千根的Access口鏈路。這樣組網成本太高了。
為了解決這一問題,提出了Trunk端口的概念,Trunk端口允許接受和發送多個VLAN的報文,這些報文都打上VLAN-tag,用來標示每一個報文屬于哪個VLAN。這樣,交換機之間就只需要一個Trunk鏈路,就可以將多個VLAN連接起來。
2.5 Trunk端口的報文收發流程
- Trunk端口收報文:
Trunk端口收到一個報文,判斷是否有VLAN信息:
如果報文中沒有VLAN-tag,則打上端口的PVID,并進行交換轉發,
-
如果報文中有Vlan-tag,進一步判斷trunk端口是否允許該 VLAN的數據進入:
- 如果可以則轉發
- 否則丟棄
Trunk端口發報文:
比較端口的PVID和將要發送報文的VLAN信息:
- 如果兩者相等則剝離VLAN信息,再發送
- 如果不相等則直接發送
2.6 Hybrid端口
Hybrid端口和Trunk端口的相同之處在于兩種鏈路類型的端口都可以允許多個VLAN的報文發送時打標簽;不同之處在于Hybrid端口可以允許多個VLAN的報文發送時不打標簽,而Trunk端口只允許缺省VLAN的報文發送時不打標簽。
對于Hybrid端口來說,可以同時屬于多個VLAN。這些VLAN分別是該Hybrid端口的PVID,以及手工配置的”untagged”及”tagged”方式的VLAN。
2.7 Hybrid端口的報文收發流程
- Hybrid端口收報文: 與Trunk端口手報文流程完全相同。
Hybrid端口收到一個報文,判斷是否有VLAN信息:
如果報文中沒有VLAN-tag,則打上端口的PVID,并進行交換轉發,
-
如果報文中有Vlan-tag,進一步判斷trunk端口是否允許該 VLAN的數據進入:
- 如果可以則轉發
- 否則丟棄
Hybrid端口發報文:
判斷該VLAN在本端口屬性(哪些vlan需要打tag,哪些不需要打tag,是手工配置的):
- 如果需要tag,則tag后直接發送(同Trunk端口)
- 如果不需要tag,則剝離tag后發送(同Access端口)
因為Hybrid端口的行為是access和trunk的混合模式,所以稱為Hybrid
2.8 Hybrid的應用場景:
通常,可以使用Hybrid對相同網段的主機進行訪問權限的控制。比如,通過配置Hybrid端口,可以讓改端口的主機同時歸屬于多個VLAN,并與多個VLAN的主機進行通訊。
組網需求:
- PC1和PC2之間可以互訪;
- PC1和PC3之間可以互訪;
- PC1、PC2和PC3都可以訪問服務器;
配置說明:
- E0/1: Hybrid端口,歸屬V10, 同時untag加入V20,V30,V100
(PC1訪問PC2,PC3,Server) - E0/2: Hybrid端口,歸屬V20, 同時untag加入V10,V100
(PC2訪問PC1,Server) - E0/3: Hybrid端口,歸屬V30, 同時untag加入V10,V100
(PC3訪問PC1,Server) - G2/1: Hybrid端口,歸屬V100, 同時untag加入V10,V20,V30
(服務器訪問PC1,PC2,PC3)
組網需求
- PC1和PC3之間可以互訪;
- PC2和PC3之間可以互訪;
- PC1和PC4之間可以互訪;
- PC2和PC5之間可以互訪;
- 其余PC之間均禁止互相訪問。
配置說明:
SwitchA:
E0/1: Hybrid端口,加入V10,同時untag加入V30
E0/2: Hybrid端口,加入V20,同時untag加入V30
E0/3: Hybrid端口,加入V30,同時untag加入V10,V20.
G2/1: Hybrid端口,(不加入某個VLAN),tagged加入V10,V20。
SwitchB:
E0/1: Access端口,加入V10
E0/2: Access端口,加入V20
E0/1: Hybrid端口,(不加入某個VLAN),tagged加入V10,V20。
注:交換機間的Hybrid端口,等價于Trunk端口
注意事項
配置Trunk端口或Hybrid端口,并利用Trunk端口或Hybrid端口發送多個VLAN報文時一定要注意:本端端口和對端端口的缺省VLAN ID(端口的PVID)要保持一致。