讓區域網路的組織規劃更有邏輯性
虛擬區域網路概念 介紹與設定實作

2009-11-26
本篇文章將介紹交換機上相當重要的概念與知識-虛擬區域網路(Virtual LAN),也就是VLAN。VLAN技術可以協助管理者邏輯性地規劃區域網路的組織,而不需要更動實體網路。這對於網路管理人員在管理大型網路上甚有助益。本文將介紹虛擬網路的概念,以及如何在Cisco交換器(Switch)網路設備上設定虛擬網路,以供為參考。
虛擬區域網路(VLAN)是由一群終端機器組合而成,通常各VLAN機器間都擁有相同的特性,但這些特性與機器的所在位置並沒有絕對的相關。另一方面,VLAN技術也允許把一台Switch設備的埠分成幾個群組,並可以針對每個不同的群組套用不同的設定。

整體而言,VLAN可以在邏輯上區分不同的廣播網域,而這樣的廣播網域可以延伸到多個實體區域網路區段,以增加網路組織的彈性。

舉一個簡單的例子來作說明。假設現在有一家大型企業組織需要進行整體網路設計,而管理人員希望將整個大型網路區分成幾個小型的網段,每個網段都能針對不同的使用者,例如工程師應該存取同一個網段的網路,而銷售人員可能會存取另一個不同網段等等。但由於企業內部的工程師可能橫跨很多個樓層,同樣地,銷售人員的電腦位置也處於多個樓層,此時如果希望根據實體的電腦位置來區分不同的網段,想必相當累人。

VLAN技術就可以應用在這樣的環境之下,利用VLAN區分不同的網段,將工程師全部分到同一個VLAN中,而把銷售人員都分到另一個相同的VLAN中,這樣就不用牽扯到實體的網路連線而達到網段區分的效果。當然也可以根據公司裡的各個單位來區分網段,或是根據各種其他的區分條件而做不同的設定。

虛擬區域網路特性

VLAN有許多特性,也因為這些特性得以在規劃網路時能更具有彈性,以下分別仔細介紹。

虛擬區域網路與廣播網域  

由於一個VLAN中的所有的埠都共享整個廣播封包,因此Switch設備上的每一個埠,都只能被指定到某一個VLAN之中,前文曾經提到,VLAN可以想成廣播網域(Broadcast Domain),這是因為不同VLAN之間的埠無法共享彼此的廣播封包。這是一項很重要的特性,這代表著VLAN越多,每個VLAN中的終端機用戶數目就越少,因此,廣播封包所造成的網路負擔就越小。

在這裡要順便釐清一項重要觀念,那就是廣播網域和碰撞網域(Collision Domain)兩者並不相同。例如接到同一個Hub的所有電腦便是處於同一個碰撞網域之中,這是因為Hub做的事情很簡單,不管Hub從任何一個埠接到封包,總是會單純地把這個封包從其他的埠全部丟出去,完全沒有學習功能,因此可以這樣認定。

而Switch設備上的每一個埠所接到的網路也屬於同一個碰撞網域,對Switch設備而言,只有針對不同的埠之間,Switch的學習功能才能發揮效用。所以,若在Switch設備的每一個埠底下都只接單一一台電腦,就可以做到完全無碰撞環境(Collision Free)。  

由於VLAN具有這些特性,因而能對公司內部網路進行更具彈性的規劃。例如根據用戶的特性將Switch設備上的某幾個埠,規劃到同一個VLAN之中,如此一來就不需要搬移實體設備,也能達到網段規劃的效果。此外,VLAN可以橫跨多個Switch設備,因此VLAN在規劃時甚至可以跨越不同的建築物,也可以跨越WAN。  

虛擬區域網路的資料傳遞

若在眾多的Switch設備之間架設VLAN,則只有同一個VLAN中的電腦才可以互相傳遞資料,事實上,Switch設備內部是透過限制資料的轉送,才完成VLAN資料傳遞過程。  

過去筆者撰寫的文章也曾經提到,Switch設備在收到資料之後,會根據學習過的MAC位址對應表來決定資料要送往哪個埠,如果沒有學習經驗的話,則預設會flooding到所有的埠。這是因為所有的埠在一開始都被設定屬於預設的VLAN之中,亦即所有的埠都屬於同一個VLAN,因此這樣的flooding動作不會產生問題。  

但如果遇上分割VLAN的狀況,這種作法便不合適,如此一來,就會把某個VLAN的資料送往其他的VLAN。因此,在這種情況下,Switch設備會了解哪些埠是屬於哪個VLAN,而會限制flooding時,只能送往同一個VLAN。  

當VLAN的資料要跨越多個Switch設備傳遞到其他Switch設備所連接的同一個VLAN時,就必須使用Trunk技術。因為Switch設備之間只會連接一條網路線,而這條網路線就必須要能傳遞承載所有VLAN的資料,為了達到這種需求,在設定連線時,就必須設定成Trunk類型。有關Trunk的詳細資訊,後面會慢慢提到。  

虛擬區域網路種類  

VLAN中的埠可以被分成不同的種類,以便形成不同類型的VLAN。在Cisco Catalyst Switch設備中,主要分成靜態VLAN和動態VLAN兩種。  

靜態VLAN(Port-based)必須以人工手動設定,換句話說,系統管理員必須手動設定哪些埠是屬於哪個VLAN。但動態VLAN(MAC-based)就需要使用VMPS(VLAN Management Policy Server)這種額外的設備來協助達成動態VLAN的設定。  

VMPS內部包含一個資料庫,用來儲存哪些MAC位址是屬於哪個VLAN的對應關係,所以動態VLAN可以說是依照MAC位址來分割VLAN。對於動態VLAN而言,一個埠底下的所有電腦都必須屬於同一個VLAN,才能正常運作,當這個埠所連接的電腦的MAC位址都是對應的同一個VLAN,Switch設備才不會在決定丟到哪個VLAN時發生錯誤。  

不過,多數的管理者會採用靜態VLAN的方式來分割VLAN,除了設定方便快速的原因之外,成本也是很大的考量,因為額外架設一台VMPS成本較高,而且設定相當麻煩,筆者不建議使用動態VLAN的方式來架設VLAN。  

用Trunk傳遞多個VLAN之間的資料  

前面提到Trunk的使用時機,也就是當Switch設備之間要傳遞多個VLAN資料時,這之間就要建立Trunk,請留意只有Fast Ethernet等級以上才可以做Trunk。  

Trunk主要分成兩種協定802.1Q協定和ISL協定。簡單來說,Trunk會在資料中增加一個標籤(Tag),用來表示目前這份資料是屬於哪一個VLAN,然後再把這份資料傳到另一台設備中,等到另一台設備收到後,再根據這個標籤得知這份資料是屬於哪個VLAN,然後把這份資料送往所屬的VLAN,這就是Trunk主要的工作。以下就分別針對這兩種Trunk協定探討之間的不同之處。  

802.1Q協定  

IEEE 802.1Q協定通常在VLAN中用來連接多個Switch與Router設備,而Cisco的設備在Fast Ethernet和Gigabit Ethernet的介面上都支援IEEE 802.1Q協定。基本上,每一個套用802.1Q協定的埠都會送指定成Trunk類型,而所有在Trunk上的埠都隸屬於native VLAN當中,雖然預設是如此,但是管理者還是可以指定到不同的VLAN中。  

native VLAN是設備上預設的VLAN,因此一開始所有的埠都會被指派到native VLAN中,正因為同屬於一個VLAN,所有的埠都可以互相通訊。native VLAN可以允許所有沒有被貼上標籤的資料都會送往native VLAN,而且Switch設備也不會為這些傳遞的資料貼上標籤。  

此外,每個VLAN都會有一個ID,用來區分各個VLAN,而native VLAN的預設ID就是VLAN 1。還有一點值得注意的是,只有802.1Q協定才有native VLAN,ISL是沒有native VLAN的。

範例說明

以下的範例可以幫助了解native VLAN的所有觀念。假設管理人員架設三個VLAN,其VLAN ID分別是VLAN 1,VLAN 2以及VLAN 3。其中VLAN 1是native VLAN,之間用兩台Cisco Switch設備連接,在Cisco Switch中間有一台Hub,如下圖所示。

其中IP為10.1.*.*處於VLAN 1之中,而IP為10.2.*.*則是位於VLAN 2之中,IP為10.3.*.*則被分派於VLAN 3之中。因為10.1.1.1和10.1.1.3都屬於native VLAN,所以由10.1.1.1和10.1.1.3互相傳遞的資料都不會被貼上標籤,因此,這樣的資料也可以被10.1.1.2收到。

至於資料封包的標籤位置,則是置放於封包中間。一個標準的IP封包依序包含以下各個欄位:

1.目的端位址資訊,佔封包的6個位元組。
2.來源端位址資訊,佔封包的6個位元組。
3.用來指明資料長度或是乙太網路種類的資訊,佔封包的2個位元組。
4.資料本身,佔封包的46~1500個位元組。
5.FCS,佔封包的4個位元組。

貼上標籤以後,整個資料封包會變成:

1.目的端位址資訊,佔封包的6個位元組。
2.來源端位址資訊,佔封包的6個位元組。
3.802.1Q協定專用標籤,佔封包的4個位元組。
4.用來指明資料長度或是乙太網路種類的資訊,佔封包的2個位元組。
5.資料本身,佔封包的46~1500個位元組。
6.FCS,佔封包的4個位元組。

由上面資料可以看出,802.1Q協定會把標籤置於資料封包的中間位置,並增加4個位元組的空間,因此,整個資料長度最長會是1522個位元組。而標籤中的內容包含乙太網路類型、PRI值、Token Ring專屬封裝用的Flag以及VLAN ID。

ISL協定

瞭解IEEE 802.1Q協定之後,接著來認識ISL協定。ISL是Inter-Switch Link的縮寫,並且只有Cisco設備專用,但不是每一款Cisco設備都支援,只有某幾款Cisco設備才有支援ISL協定。ISL協定運作於OSI網路七層架構的第二層,作法就是在前面增加一段表頭,並在最後面新增一段CRC。而由於ISL協定是與任何協定無關的,因此,ISL協定能夠封裝任何種類的上層協定資料。

ISL協定所新增的表頭大小為26個位元組,而最後面新增的CRC大小為4個位元組。在前面的表頭中包含了VLAN ID和BPDU資訊,當然還有包含很多其他的資訊,例如埠的ID,SA的前三個位元組等等,由於過於繁雜,這裡就不一個個詳細介紹。

若要使用ISL協定,則網路中每一台設備都必須做好正確的ISL設定才行,因為ISL協定所使用的資料封包長度超過乙太網路所能接受的長度,所以一旦不支援ISL協定的設備收到這樣的封包,會認為是錯誤的封包而直接遺棄。乙太網路的正確封包大小是64到1518個位元組。

802.1Q與ISL協定的比較

ISL協定是用硬體來實作,因此能支援的VLAN個數與硬體的優劣有關,速度表現也是如此。ISL協定與802.1Q協定兩者的不同之處在於,802.1Q協定是在軟體上處理,所以速度較慢,而且標籤置放方式也不相同,這點需要特別留意,尤其是要準備CCNA認證的讀者,Trunk一向都是考試重點之一。

另外,在決定要使用哪一種的協定時,也要考慮到整個網路的設備廠牌,若使用ISL協定,則代表所有的設備都一定要採用Cisco的設備,因為這是Cisco專屬的協定。兩者各有好壞,端由網路管理人員來取決。

在Cisco設備上的VLAN 設定指令

在Cisco設備上若要設定VLAN,主要分成四個步驟:

1.設定VTP(Cisco設備才需要做)。
2.設定Trunk。
3設定VLAN。 4.將各個埠指定到某個VLAN之中。

第一步驟只有Cisco設備才需要做,而VTP的詳細內容與觀念,會在下一篇文章中為大家介紹,接下來,分別介紹另外三個步驟的指令。

設定Trunk

前面提到Trunk分為ISL和802.1Q兩種協定,也提到並不是每一款Cisco設備都支援ISL協定,例如最常見到的Cisco Catalyst 2950 Switch設備就只支援802.1Q協定。而Cisco Catalyst 4000 Switch設備就可以支援ISL協定。基本上,設定trunk分為以下這幾個步驟:

選擇並進入所要設定的埠

一開始要決定將哪個埠設定為trunk,因此必須先進入這個埠的設定模式,假設選擇第一模組(slot)的第一個埠,則指令設定方式如下:

Switch_406>enable Enter Password: Switch_406#configure terminal Switch_406(config)#interface Ethernet0/1

關閉埠的運作

這個步驟的目的是為了避免在埠上所做的設定影響到其他埠的運作,讀者也可以選擇略過。指令操作如下:

Switch_406(config-if)#shutdown

設定所要套用的Trunk協定

接下來就要設定使用哪一種trunk協定,若是要套用802.1Q協定,則設定指令如下:

Switch_406(config-if)#switchport trunk encapsulation dot1q

「switchport trunk」指令是針對某個埠進行trunk相關的設定,而後面所接的「encapsulation」就是指目前要設定的是封裝模式,也就是trunk協定種類,而「dot1q」就是指802.1Q協定。

若是要套用ISL協定,則指令為:

Switch_406(config-if)#switchport trunk encapsulation isl

很明顯地,只要在最後的參數改成「isl」即可,當然,也可以選擇讓這台設備根據對方的設備自動選擇所要套用的trunk協定,設定指令如下所示:

Switch_406(config-if)#switchport trunk encapsulation negotiate

如此一來,假設對方的設備是使用ISL協定,則這台設備也會使用ISL協定,反之,若對方使用802.1Q,那這台也會跟著使用802.1Q協定。這個步驟是必要的,但是如果是像Cisco Catalyst 2950 Switch設備,就不須要執行這一個步驟,因為這台設備只能支援802.1Q協定。

 設定埠的模式

既然要將這個埠設定為trunk,就要把埠的模式設定為trunk,其設定的指令如下:

Switch_406(config-if)#switchport mode trunk

關鍵指令為「switchport mode」,而最後的trunk代表現在要把這個埠設定成trunk模式。基本上,這個指令後面所能接收的參數有下面四種:

●Trunk

trunk是埠所能採用的一種模式,在這個模式下,就代表要將這個埠套用802.1Q協定的trunk,並會和另一端的埠協調之間的連線要使用哪一種trunk模式。

●Access

其他常見的模式還有access,若要將這個埠採用Port Security的話,就必須將這個埠改成access模式,因為access模式就相當於連接著電腦端才會設定的模式。而如果在這種接到其他Cisco設備端的埠上面設定為access的話,就代表要移除原本再這個埠上面的trunk屬性,並請這個埠和對方的埠協調看是否可以一起把trunk屬性都拿掉。

●Dynamic desirable

Dynamic desirable是預設模式,代表要讓這個埠和對方的埠一起協調看如何從非trunk的模式改到trunk模式,而且是主動作法。除非對方的埠是設定成access模式,不然無論對方的埠是什麼模式,都會變成trunk模式。由於要依照對方採用什麼模式才能決定的作法,感覺不太穩定,因此通常不會建議讀者使用這種模式。

●Dynamic auto

當對方的埠設定成trunk或是desirable時,將自己的埠設定成dynamic auto時,就會成為trunk模式,若對方的埠設定為access或auto,則trunk就無法建立起來。根據這四種模式,筆者將這些模式與trunk連線是否能夠建立整理成下表,以供讀者參考。

  Trunk       Access     Desirable  Auto
Trunk       V               V     V
Access        
Desirable  V               V     V
Auto V               V  

所以,決定是否要將這兩台Cisco Switch設備之間的連線成為trunk,是要雙方達成協議才行,當然,也可以設定成「不要協議」,下列是執行的指令:

Switch_406>enable Enter Password: Switch_406#configure terminal Switch_406(config)#interface Ethernet0/1 Switch_406(config-if)#switchport mode trunk Switch_406(config-if)#switchport nonnegotiate

執行「switchport nonnegotiate」指令之後,就不會在OSI第二層網路協定中發送DTP和對方協議用的封包,不過,只有當模式設定為access或是trunk的時候才能使用。如果嘗試在desirable或auto模式執行這個指令的話,將會傳回錯誤訊息。如果要將這個指令取消的話,只要在原本的指令前面加上no,並重新執行即可。

Switch_406(config-if)#no switchport nonnegotiate

設定VLAN

在設定VLAN之前有一些事情必須要先了解。事實上,每一款Switch設備所能支援的VLAN個數會根據設備的硬體而有些許不同,大部分的Cisco Switch設備支援64個VLAN,而2950系列則可以支援250個VLAN,因此在建立VLAN之前必須先了解手邊的設備支援多少個VLAN。

此外,也必須了解手邊設備的預設VLAN是哪一個,通常預設的VLAN都是VLAN 1,因此,一般而言,CDP以及VTP協定的封包都會送到VLAN 1之中。

最後要注意的是,這台Cisco Switch的埠,必須被分配到management VLAN之中,而management VLAN通常都是預設的VLAN,也就是VLAN 1。

注意事項了解之後,接下來就是要熟悉指令了。首先,建立VLAN的指令如下:

Switch_406#configure terminal Switch_406(config)#vlan 3 Switch_406(config-vlan)#name VLAN_KC

首先必須到某一個VLAN ID的VLAN mode底下,而上面的範例中,vlan 3就是要到編號為3的VLAN,代表等一下要設定的就是第三個VLAN。而標準安裝好的IOS軟體中,這個VLAN的ID範圍只能是1到1005,若是安裝加強版的軟體之後,這個值的範圍可以是1到4094。當然,如果一次要設定的VLAN對象有很多,在使用這個指令的同時,後面所接的VLAN ID可以一次輸入多筆,中間只要用逗號分隔:

Switch_406(config)#vlan 3,4,6

而且也可以一次輸入一個範圍的VLAN ID,如下所示:

Switch_406(config)#vlan 1-5

接下來指定VLAN名稱,而上面的例子就是將VLAN 3的名稱改為VLAN_KC,名稱不一定要指定,如果沒有做這個設定步驟的話,系統會指派一個預設的VLAN名稱,通常會像是VLAN3或VLAN0003這樣的值。

將各個埠指定到某個VLAN

最後一個步驟就是將各個埠指定到這些設定好的VLAN之中。假設要將第一個槽中的第四個埠指派到VLAN 3之中,其設定的指令如下所示:

Switch_406#configure terminal Switch_406(config)#interface fastethernet 0/4 Switch_406(config-if)#switchport access vlan 3

每一個埠同一個時間只能屬於某一個VLAN,因此指派這個埠要到哪個VLAN時,必須使用「switchport access」指令,而後面接上關鍵字「vlan」,最後再接上一個VLAN ID,這樣就設定完成了。如果要檢查是否設定成功,可以執行「show vlan」指令。

Switch_406#show vlan

VLAN Name  Status  Ports
------------------------------------------------------------------
1 default active Fas0/1,Fas0/2, Fas0/3
2 vlan2 active
3 VLAN_KC active Fas0/4

由上面的結果可以看出,Fas0/4這個埠已經被指派到VLAN 3當中,同時也可以看出第三個VLAN的名稱已經被改成VLAN_KC了。如果IOS版本夠新的話,也可以一次設定多個埠,同時指定到同一個VLAN之中,其設定指令如下:

Switch_406(config)#interface range fastethernet 0/1-12,20 Switch_406(config-if-range)#switchport access vlan 3

上面這個範例就可以針對1到12埠以及第20個埠同時做設定。如果沒有做最後這個指定埠到VLAN的動作,預設所有的埠都會被指定到VLAN 1當中。

結語

本文提到相當重要的VLAN觀念,trunk分類以及相對應的設定指令,這一篇文章對於要赴考CCNA的人極為重要,CCNA的實驗題目中也頗有可能會考這類型的題目,所以各個指令還是要熟記。當然,不僅是要準備CCNA的讀者們,這篇文章對於大型網路管理人員也很有助益。


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!