◆廖繼東 伍琰
(河南省總工會干部學(xué)校 河南 45002)
VLAN 是一種依賴于交換技術(shù)之上的,基于協(xié)議的虛擬網(wǎng)絡(luò)技術(shù)[1]。每個 VLAN 都由一組相同需求的計算機組成,并且這些計算機可以來自不同的物理空間,VLAN 內(nèi)的主機間通信就和在一個LAN 內(nèi)一樣;而VLAN 之間則不能直接互通,每個VLAN 是一個廣播域,廣播報文就被限制在一個VLAN 內(nèi)[2]。
初學(xué)者對VLAN 的劃分比較容易掌握,但是對VLAN 的工作機制、相關(guān)協(xié)議并不是很清楚。作者以思科Packet Tracer 為實驗平臺,搭建VLAN 的網(wǎng)絡(luò)拓?fù)洌鐖D1,通過抓取協(xié)議包來分析VLAN 的工作機制,以提供對VLAN 技術(shù)更清晰的認(rèn)識。
圖1 實驗拓?fù)?/p>
其中PC0、PC2、PC4 劃到VLAN 10,PC1 和PC3 劃到VLAN 20,兩臺交換機之間使用trunk 鏈路。
通過PC0(192.168.1.10)PING PC2(192.168.1.20),我們發(fā)現(xiàn)盡管這兩臺PC 不屬于一臺交換機,但是屬同一VLAN,他們可以PING 通。通過PC0(192.168.1.10)PING PC1(192.168.1.100),我們發(fā)現(xiàn)盡管這兩臺PC 同屬于一臺交換機,一個網(wǎng)段,但是由于分屬不同VLAN,他們不能PING 通。
那么交換機是如何來識別數(shù)據(jù)幀是否屬于不同的VLAN 呢?
IEEE 于1999 年頒布了用以標(biāo)準(zhǔn)化VLAN 實現(xiàn)方案的IEEE 802.1Q 協(xié)議標(biāo)準(zhǔn)草案。思科還可以使用私有協(xié)議ISL 進(jìn)行封裝[3],由于很少使用這里不作討論。802.1Q VLAN 只定義了數(shù)據(jù)幀的封裝格式,即,在以太網(wǎng)幀頭中插入了4 個字節(jié)的VLAN 字段。
我們通過交換機1 的VLAN10 的PC0(192.168.1.10)PING 交換機2 的VLAN10 的PC2(192.168.1.20),兩臺交換機連接端口設(shè)置為trunk,可以PING 通。通過抓取協(xié)議包,我們可以看到,ICMP 包在Trunk 鏈路上被封裝為802.1q 數(shù)據(jù)幀。
如圖2 所示,IEEE802.1Q 就是在幀中插入了一個四個字節(jié)的TAG 標(biāo)簽[3]:
圖2 802.1Q 的幀結(jié)構(gòu)
(1)標(biāo)記協(xié)議標(biāo)致(TPID):固定值0x8100,標(biāo)識該幀載有802.1Q標(biāo)記信息
(2)標(biāo)記控制信息(TCI):
Priority:優(yōu)先級,3 比特。
Canonical Format Indicator:1 比特,表示總線型以太網(wǎng),F(xiàn)DDI,令牌環(huán)網(wǎng)。
VLANID:12 比特,表示VID,范圍1~4094。
從圖2 也可以看出PC0 發(fā)往PC2 的數(shù)據(jù)包攜帶的VLANID 是10,這就表明它的VLAN 信息。
在PC0 PING PC2 的時候,通過抓取數(shù)據(jù)包,可以看到PC0 發(fā)出的數(shù)據(jù)包不是802.1Q 數(shù)據(jù)幀,如圖3 所示,但是在兩臺交換機的trunk鏈路上被封裝為802.1Q 數(shù)據(jù)幀,如圖4 所示,這說明是交換機對PC發(fā)送的數(shù)據(jù)重新進(jìn)行封裝,添加VLAN 標(biāo)簽。
圖3 PC0 發(fā)出的數(shù)據(jù)包
圖4 PC0 PING PC3 的數(shù)據(jù)在交換機0 中的變化
添加VLAN 標(biāo)簽,是由交換機的端口所屬的VLAN ID 決定的。思科交換機端口支持三種常用模式,接入模式(access)、中繼模式(trunk)、動態(tài)模式(dynamic)[4]。在同一端口上,access 模式與trunk模式只能選擇其一。配置成access 模式的端口通常連接終端設(shè)備,配置成trunk 模式的端口通常用來連接網(wǎng)絡(luò)設(shè)備。access 模式下端口只能劃分給某一個 VLAN,而trunk 模式則是為了允許多個 VLAN通過而設(shè)計的,思科默認(rèn)容許所有VLAN。
我們通過交換機1 的VLAN10 的PC0(192.168.1.10)PING 同一交換機1 的VLAN10 的PC4(192.168.1.30),可以PING 通,但是發(fā)現(xiàn)數(shù)據(jù)包在交換機中并沒有被封裝為802.1Q,如圖5 所示。
圖5 PC0 PING PC4 的數(shù)據(jù)在交換機0 中沒有變化
為什么同一個VLAN 之間的PC 是可以通信,但是數(shù)據(jù)包卻有的被封裝為802.1Q,有的卻沒有?
是因為access 端口和trunk 端口對報文不同的處理方式。
(1)access 端口
接收報文:對不帶VLAN 標(biāo)簽的報文,接收該報文。對帶VLAN標(biāo)簽的報文,當(dāng)VLAN 標(biāo)簽與端口VLAN 標(biāo)簽相同時,接收該報文;否則,丟棄該報文。
發(fā)送報文:發(fā)送無VLAN 標(biāo)簽的報文。
因為PC0 和PC4 都是在同一個交換機的access 口,PC0 發(fā)出的數(shù)據(jù)是不帶VLAN 標(biāo)簽的,而PC0 和PC4 所處的交換機端口屬于同樣的VLAN ID,所以可以直接轉(zhuǎn)發(fā)。
(2)trunk 端口
接收報文:對不帶VLAN 標(biāo)簽的報文,打上本征 VLAN ID。對帶VLAN 標(biāo)簽的報文,當(dāng)VLAN ID 在接口允許通過的VLAN ID列表里時,接收該報文。
發(fā)送報文:當(dāng)VLAN ID 與本征VLAN ID 相同,且是該接口允許通過的VLAN ID 時,去掉VLAN 標(biāo)簽并發(fā)送該報文;當(dāng)VLAN ID與本征VLAN ID 不同,且是該接口允許通過的VLAN ID 時,保持原有VLAN 標(biāo)簽,發(fā)送該報文。
因為PC0 和PC2 之間需要通過trunk 鏈路,所以數(shù)據(jù)被打上PC0所接入的交換機端口的VLAN ID(VLAN 10),封裝為802.1Q 數(shù)據(jù)幀,由交換機0 通過trunk 鏈路傳輸?shù)浇粨Q機1。
很多書上解釋:為了提高處理效率,交換機內(nèi)部的數(shù)據(jù)幀一律都帶有VLAN 標(biāo)簽,已統(tǒng)一方式處理。當(dāng)一個數(shù)據(jù)進(jìn)入交換機接口時,如果沒有帶VLAN 標(biāo)簽,該數(shù)據(jù)幀就會被標(biāo)記上默認(rèn)VLAN。
作者對這樣的理解不認(rèn)同,因為如果這樣做的話,多此一舉。我們來看剛才PC0 與PC4 通信,同屬一臺交換機,一個VLAN,他們之間通信經(jīng)過交換機如果需要打標(biāo)簽的話,那豈不是加重交換機的計算負(fù)載嗎?所以作者認(rèn)為,像這樣的兩個主機在相互通信的時候,僅僅是查看CAM 表,而不需要執(zhí)行打標(biāo)簽和剝離標(biāo)簽的動作。
本征VLAN,本征 VLAN 常出現(xiàn)在trunk 類型端口的配置中,也稱為Native VLAN。下面我們搭建一個網(wǎng)絡(luò)拓?fù)洌鐖D6,來理解本征VLAN。
圖6 PC0 PING PC3 的數(shù)據(jù)包
PC0(192.168.1.10)屬于VLAN10,PC0(192.168.1.20)屬于VLAN10,PC2 和PC3 沒有加入任何VLAN,也就屬于默認(rèn)VLAN1。交換機之間使用Trunk 鏈路。這時,PC2 和PC0 不能通信,這很容易理解,因為它們分屬VLAN10 和VLAN1。
但是當(dāng)PC0 PING PC1,可以通信,ICMP 包在trunk 鏈路上被封裝為802.1Q。PC2 PING PC3,可以通信,但I(xiàn)CMP 包在trunk鏈路上沒有被封裝為802.1Q。
這就是本征VLAN 的作用,Native VLAN(本征VLAN)和其他VLAN 的另外一個區(qū)別在于:非Native VLAN 在trunk 中傳輸數(shù)據(jù)時要被添加VLAN 標(biāo)記的(如dot1q 或者isl),但是native VLAN 在trunk中傳輸數(shù)據(jù)時是不進(jìn)行標(biāo)記的。當(dāng)前的本征VLAN 是缺省VLAN,也就是VLAN1,所以屬于VLAN1 的數(shù)據(jù)在通過trunk 鏈路,是不帶VLAN 標(biāo)簽的。
但是我們把交換機的trunk 鏈路的本征VLAN 改為VLAN 10:
Switch(config)#int gigabitEthernet 0/1
Switch(config-if)#switchport trunk native VLAN 10
在這里注意,兩個交換機都要配置本征VLAN,而且要一致。
這時候,PC0 PING PC1,發(fā)現(xiàn)ICMP 包在trunk 鏈路上沒有被封裝為802.1Q,如圖7 所示。這是因為本征VLAN 已經(jīng)改為PC0所處的VLAN10 了。
圖7 PC0 PING PC1 的數(shù)據(jù)包
但是,PC2 PING PC3,發(fā)現(xiàn)ICMP 包在trunk 鏈路上被封裝為802.1Q,其中攜帶的VLANID 是1,正是PC2 和PC3 所處的VLAN1,如圖8 所示。
圖8 PC2 PING PC3 的數(shù)據(jù)包
本征VLAN,可以理解為是不打標(biāo)簽的VLAN,對于在局域網(wǎng)中數(shù)據(jù)報文量大的VLAN,在經(jīng)過交換設(shè)備老是打標(biāo)簽tag,然后再去標(biāo)簽,很浪費計算資源,指定這種VLAN 在通過trunk 鏈路時不加標(biāo)簽。另外如果幀在進(jìn)入trunk 時是沒有標(biāo)記的,那么trunk 就會給他打上native VLAN 的標(biāo)記,該幀在trunk 中就以native VLAN 的身份傳輸,native VLAN 是用于trunk 口的,在access 口沒有native VLAN 的概念。
VLAN 的本質(zhì)就是數(shù)據(jù)包進(jìn)入VLAN 環(huán)境中,通過增加標(biāo)簽對數(shù)據(jù)幀進(jìn)行隔離。初學(xué)者對VLAN 的劃分比較容易掌握,但是對VLAN 的工作機制、相關(guān)協(xié)議并不是很清楚。作者以思科Packet Tracer 為實驗平臺,通過抓取協(xié)議包來分析VLAN 的工作機制,分析了數(shù)據(jù)在傳輸中如何表明所屬VLAN,如何添加VLAN 標(biāo)簽以及什么是本征VLAN,以提供對VLAN 技術(shù)更清晰的認(rèn)識。