VLAN(虛擬局域網(wǎng))是一種常見(jiàn)的二層交換技術(shù),在局域網(wǎng)中用于實(shí)現(xiàn)縮小廣播域、減少?gòu)V播風(fēng)暴、實(shí)現(xiàn)同一物理網(wǎng)絡(luò)的邏輯隔離、提高網(wǎng)絡(luò)的安全性等組網(wǎng)需求,在實(shí)際的網(wǎng)絡(luò)工程中有大量應(yīng)用。
在單交換機(jī)中實(shí)現(xiàn)VLAN技術(shù),對(duì)于很多的初學(xué)者而言應(yīng)該是比較簡(jiǎn)單的,但一涉及到多交換機(jī)間的VLAN通訊、不同網(wǎng)段及不同VLAN間的路由、Native VLAN、Private VLAN等稍為復(fù)雜些的應(yīng)用,很多的學(xué)習(xí)者就有些模糊不清,究其原因,還是對(duì)VLAN的工作機(jī)制、相關(guān)協(xié)議特點(diǎn)不清楚。下面通過(guò)抓取不同設(shè)備間的協(xié)議包來(lái)分析VLAN的工作原理,以提供對(duì)VLAN技術(shù)更清晰的認(rèn)識(shí)。
圖1 兩種協(xié)議的幀結(jié)構(gòu)
圖2 VLAN配置
VLAN技術(shù)有兩種實(shí)現(xiàn)協(xié)議,分別是IEEE802.1Q和ISL。其中IEEE802.1Q是國(guó)際標(biāo)準(zhǔn),所有廠商的設(shè)備都支持,而ISL是Cisco私有協(xié)議,僅Cisco的產(chǎn)品支持。VLAN的實(shí)現(xiàn)方式有多種,基于交換機(jī)端口、基于用戶的MAC等,而其中基于交換機(jī)端口劃分VLAN是最常見(jiàn)的一種實(shí)現(xiàn)形式,所以,下面以IEEE802.1Q協(xié)議、以基于交換機(jī)端口的VLAN為例來(lái)抓取相應(yīng)的數(shù)據(jù)包。
首先我們來(lái)看看,從Ethernet協(xié)議到IEEE802.1Q協(xié)議數(shù)據(jù)幀的結(jié)構(gòu)變化,如圖1所示。由圖可以看出,從Ethernet到IEEE802.1Q就是在幀中插入了一個(gè)四字節(jié)TAG標(biāo)記,這個(gè)標(biāo)記由TPID和TCI兩部分構(gòu)成。TPID固定為0x8100,標(biāo)識(shí)該幀是一個(gè)打了TAG標(biāo)記的Ethernet幀,而TCI則是TAG控制信息,包括用戶優(yōu)先級(jí)、范式指示器、VLAN ID值等,CRC字段是把TPI、TCI與原幀進(jìn)行重新運(yùn)算而得。
下面通過(guò)一個(gè)拓?fù)涞膬煞N配置來(lái)說(shuō)明VLAN的工作原理,如圖2所示。
第一種配置,switch0的 f0/1、f0/2口和switch1的f0/1、f0/2口都是Access類型,且都在VLAN100中。這種情況下,不管是抓取PC機(jī)到交換機(jī)的數(shù)據(jù)包,還是抓取交換機(jī)到交換機(jī)的數(shù)據(jù)包,包的結(jié)構(gòu)都如圖3所示。由數(shù)據(jù)的幀結(jié)構(gòu)可以看出,這是一個(gè)典型的Ethernet幀,沒(méi)有任何TAG標(biāo)簽,似乎跟創(chuàng)建的VLAN100無(wú)任何關(guān)系。
其實(shí)不然,這個(gè)結(jié)果正是VLAN的基本工作原理:來(lái)自PC機(jī)的數(shù)據(jù)是普通的Ethernet數(shù)據(jù),當(dāng)這個(gè)數(shù)據(jù)進(jìn)入到一個(gè)創(chuàng)建了VLAN的交換機(jī)后,交換機(jī)根據(jù)進(jìn)入的接口所在的VLAN ID給數(shù)據(jù)打標(biāo)簽,形成Ethernet802.1Q數(shù)據(jù)幀,這個(gè)打了標(biāo)簽的數(shù)據(jù)幀會(huì)廣播到該交換機(jī)的所有同VLAN ID的接口中,不在同一VLAN ID的接口則不能收到這個(gè)數(shù)據(jù)幀,從而起到對(duì)物理接口的邏輯隔離作用。收到Ethernet802.1Q數(shù)據(jù)幀的Access接口在把數(shù)據(jù)往下轉(zhuǎn)發(fā)之前會(huì)去掉標(biāo)簽,將數(shù)據(jù)還原成普通的Ethernet數(shù)據(jù)幀再送出去,所以抓到的數(shù)據(jù)幀看不到標(biāo)簽。
圖3 未打標(biāo)簽的數(shù)據(jù)幀
圖4 帶標(biāo)簽的數(shù)據(jù)幀
如果一臺(tái)交換機(jī)上有多個(gè)VLAN,這種配置就滿足不了組網(wǎng)需求了,實(shí)際工程中也經(jīng)常是一臺(tái)交換機(jī)上有多個(gè)不同VLAN。
第二種配置情況,其他不變,將switch0和switch1相連的接口由Access類型改為Trunk類型,允許所有VLAN或指定的某些VLAN通過(guò),再來(lái)抓包。這時(shí),抓取的PC機(jī)到交換機(jī)的包仍然還是普通的Ethernet包,但抓取的交換機(jī)到交換機(jī)的包,即兩個(gè)Trunk口之間的包,則變成如圖4所示的結(jié)構(gòu)。圖中虛框內(nèi)部分即IEEE802.1Q的 4字 節(jié) 標(biāo) 簽,0x8100即TPID,TCI為 0x64,將其轉(zhuǎn)換成十進(jìn)制為100,剛好就是交換機(jī)上VLAN100的ID值。這說(shuō)明,交換機(jī)的Trunk口能保留VLAN的Tag信息,將其傳送到對(duì)端Trunk口后,對(duì)端Trunk口根據(jù)VLAN ID值將數(shù)據(jù)幀送到確定的VLAN。因?yàn)門runk口能攜帶VLAN Tag,從而讓跨交換機(jī)相同VLAN間的通信成為可能,擴(kuò)大了VLAN的范圍。
根據(jù)以上兩種情況得出結(jié)論,在配置了VLAN的環(huán)境中有兩種數(shù)據(jù)幀在流動(dòng)——不帶標(biāo)簽的Ethernet幀和帶標(biāo)簽的IEEE802.1Q幀,不帶標(biāo)簽的Ethernet幀從交換機(jī)的Access口流出,帶標(biāo)簽的IEEE802.1Q幀用于交換機(jī)內(nèi)部進(jìn)行數(shù)據(jù)走向的判定及從Trunk口流出。把這種數(shù)據(jù)流的走向及特點(diǎn)弄清楚之后,對(duì)于各種類型的VLAN技術(shù)就比較好理解。
例如對(duì)于Native VLAN,作為Trunk口一個(gè)屬性,決定了兩個(gè)問(wèn)題:一是Trunk口收到未打標(biāo)的數(shù)據(jù)幀,會(huì)往該接口指定的Native VLAN發(fā)送;二是收到來(lái)自該接口Native VLAN的數(shù)據(jù)幀,會(huì)去掉IEEE802.1Q的標(biāo)簽再往下轉(zhuǎn)發(fā)。對(duì)于用路由器實(shí)現(xiàn)VLAN間的路由,一定要將路由器的物理接口劃分成多個(gè)邏輯子接口,然后在子接口上封裝802.1Q協(xié)議,讓接口能識(shí)別打了標(biāo)簽的數(shù)據(jù)幀才可。
所以,VLAN技術(shù)的本質(zhì)就是數(shù)據(jù)包進(jìn)入了VLAN環(huán)境后,通過(guò)加標(biāo)簽來(lái)對(duì)數(shù)據(jù)幀進(jìn)行邏輯隔離,加入的標(biāo)簽什么時(shí)候帶著走,什么時(shí)候剝離,由交換機(jī)的端口類型來(lái)決定。路由器的端口要識(shí)別加了標(biāo)簽的數(shù)據(jù)幀,必須通過(guò)在子接口上手工來(lái)封裝802.1Q協(xié)議來(lái)實(shí)現(xiàn)。