VLAN(虛擬局域網)是一種常見的二層交換技術,在局域網中用于實現縮小廣播域、減少廣播風暴、實現同一物理網絡的邏輯隔離、提高網絡的安全性等組網需求,在實際的網絡工程中有大量應用。
在單交換機中實現VLAN技術,對于很多的初學者而言應該是比較簡單的,但一涉及到多交換機間的VLAN通訊、不同網段及不同VLAN間的路由、Native VLAN、Private VLAN等稍為復雜些的應用,很多的學習者就有些模糊不清,究其原因,還是對VLAN的工作機制、相關協議特點不清楚。下面通過抓取不同設備間的協議包來分析VLAN的工作原理,以提供對VLAN技術更清晰的認識。

圖1 兩種協議的幀結構

圖2 VLAN配置
VLAN技術有兩種實現協議,分別是IEEE802.1Q和ISL。其中IEEE802.1Q是國際標準,所有廠商的設備都支持,而ISL是Cisco私有協議,僅Cisco的產品支持。VLAN的實現方式有多種,基于交換機端口、基于用戶的MAC等,而其中基于交換機端口劃分VLAN是最常見的一種實現形式,所以,下面以IEEE802.1Q協議、以基于交換機端口的VLAN為例來抓取相應的數據包。
首先我們來看看,從Ethernet協議到IEEE802.1Q協議數據幀的結構變化,如圖1所示。由圖可以看出,從Ethernet到IEEE802.1Q就是在幀中插入了一個四字節TAG標記,這個標記由TPID和TCI兩部分構成。TPID固定為0x8100,標識該幀是一個打了TAG標記的Ethernet幀,而TCI則是TAG控制信息,包括用戶優先級、范式指示器、VLAN ID值等,CRC字段是把TPI、TCI與原幀進行重新運算而得。
下面通過一個拓撲的兩種配置來說明VLAN的工作原理,如圖2所示。
第一種配置,switch0的 f0/1、f0/2口和switch1的f0/1、f0/2口都是Access類型,且都在VLAN100中。這種情況下,不管是抓取PC機到交換機的數據包,還是抓取交換機到交換機的數據包,包的結構都如圖3所示。由數據的幀結構可以看出,這是一個典型的Ethernet幀,沒有任何TAG標簽,似乎跟創建的VLAN100無任何關系。
其實不然,這個結果正是VLAN的基本工作原理:來自PC機的數據是普通的Ethernet數據,當這個數據進入到一個創建了VLAN的交換機后,交換機根據進入的接口所在的VLAN ID給數據打標簽,形成Ethernet802.1Q數據幀,這個打了標簽的數據幀會廣播到該交換機的所有同VLAN ID的接口中,不在同一VLAN ID的接口則不能收到這個數據幀,從而起到對物理接口的邏輯隔離作用。收到Ethernet802.1Q數據幀的Access接口在把數據往下轉發之前會去掉標簽,將數據還原成普通的Ethernet數據幀再送出去,所以抓到的數據幀看不到標簽。

圖3 未打標簽的數據幀

圖4 帶標簽的數據幀
如果一臺交換機上有多個VLAN,這種配置就滿足不了組網需求了,實際工程中也經常是一臺交換機上有多個不同VLAN。
第二種配置情況,其他不變,將switch0和switch1相連的接口由Access類型改為Trunk類型,允許所有VLAN或指定的某些VLAN通過,再來抓包。這時,抓取的PC機到交換機的包仍然還是普通的Ethernet包,但抓取的交換機到交換機的包,即兩個Trunk口之間的包,則變成如圖4所示的結構。圖中虛框內部分即IEEE802.1Q的 4字 節 標 簽,0x8100即TPID,TCI為 0x64,將其轉換成十進制為100,剛好就是交換機上VLAN100的ID值。這說明,交換機的Trunk口能保留VLAN的Tag信息,將其傳送到對端Trunk口后,對端Trunk口根據VLAN ID值將數據幀送到確定的VLAN。因為Trunk口能攜帶VLAN Tag,從而讓跨交換機相同VLAN間的通信成為可能,擴大了VLAN的范圍。
根據以上兩種情況得出結論,在配置了VLAN的環境中有兩種數據幀在流動——不帶標簽的Ethernet幀和帶標簽的IEEE802.1Q幀,不帶標簽的Ethernet幀從交換機的Access口流出,帶標簽的IEEE802.1Q幀用于交換機內部進行數據走向的判定及從Trunk口流出。把這種數據流的走向及特點弄清楚之后,對于各種類型的VLAN技術就比較好理解。
例如對于Native VLAN,作為Trunk口一個屬性,決定了兩個問題:一是Trunk口收到未打標的數據幀,會往該接口指定的Native VLAN發送;二是收到來自該接口Native VLAN的數據幀,會去掉IEEE802.1Q的標簽再往下轉發。對于用路由器實現VLAN間的路由,一定要將路由器的物理接口劃分成多個邏輯子接口,然后在子接口上封裝802.1Q協議,讓接口能識別打了標簽的數據幀才可。
所以,VLAN技術的本質就是數據包進入了VLAN環境后,通過加標簽來對數據幀進行邏輯隔離,加入的標簽什么時候帶著走,什么時候剝離,由交換機的端口類型來決定。路由器的端口要識別加了標簽的數據幀,必須通過在子接口上手工來封裝802.1Q協議來實現。