將此篇文章跟 Facebook 上的朋友分享將此篇文章跟 Plurk 上的朋友分享將此篇文章跟 Twitter 上的朋友分享列印轉寄
2012/1/30

化繁為簡談虛擬區域網路 在Cisco交換器設定VLAN及Trunk

胡凱捷
交換器上一項非常重要的概念與知識是虛擬區域網路(VLAN),而虛擬區域網路中最關鍵技術是Trunk應用,因此本文將詳細介紹VLAN與Trunk,以及在Cisco交換器上如何進行這兩項設定。
虛擬區域網路(Virtual LAN,亦稱VLAN)技術,可以邏輯性地規劃區域網路的組織,而毋須更動實體網路,這對於網路管理人員來說,無疑是一個福音,能夠方便管理大型網路。

假設現在要為一家大型企業公司規劃內部網路,希望讓每個部門都只能存取自己部門的網路,但每個部門卻都位在不同的樓層。此時,透過VLAN技術就可以在不更動各個部門員工實體位置的情況下,邏輯性地將不同樓層不同位置的同部門員工規劃成同一個VLAN,而同一個VLAN就只能存取自己的網路資源。

VLAN的關鍵技術就在於Trunk的應用,因此以下將介紹虛擬網路和Trunk的概念,以及如何在Cisco交換器(Switch)網路設備上設定虛擬網路和Trunk。

虛擬區域網路簡介

一個虛擬區域網路(VLAN),是由一群終端機器組合而成,例如一些使用者的PC設備,而這些VLAN中的機器通常擁有相同的特性,而這特性並不需要與這些機器的所在位置有任何的關連。

此外,VLAN技術也允許將一台Switch設備的埠分成幾個群組,並可針對每個不同的群組套用不同的設定。也就是說,VLAN可以在邏輯上區分不同的廣播網域,而這樣的廣播網域能夠延伸到多個實體區域網路區段,因此VLAN技術可以增加網路組織的彈性。

舉例來說,假設現在要為一家大型企業組織整個網路設計,希望將整個大型網路區分成幾個小型的網段,而每個網段都是針對不同的使用者,例如工程師應該存取同一個網段的網路,而銷售人員可能會存取另一個不同的網段,但尷尬的是,工程師可能橫跨很多個樓層,同樣地,銷售人員的電腦位置也分散在多個樓層,此時若希望根據實體的電腦位置來區分不同的網段,想必是一件很累人的事情。

這個時候就必須使用VLAN技術來區分不同的網段,可以把工程師全部分到同一個VLAN中,而把銷售人員分配到相同的VLAN內,這樣就不會牽扯到實體的網路連線而達到網段區分的效果。當然,也可以根據公司的各個單位來區分網段,或是根據各種其他的區分條件。

虛擬區域網路特性

VLAN有許多的特性,也因為這些特性,讓IT人員在規劃網路時能更具有彈性,以下分別介紹這些特性:

虛擬區域網路與廣播網域

交換器設備上的每一個埠,只能被指定到某一個VLAN中,也就是說,一個VLAN中的所有的埠都共享整個廣播封包,所以剛才提及,事實上一個VLAN可以想成是廣播網域(Broadcast Domain),因此不同VLAN之間的埠無法共享彼此的廣播封包。

這是一項很重要的特性,因為這代表VLAN越多,每個VLAN中的終端機用戶數目就越少,所以廣播封包所造成的網路負擔就越小。

此外,這裡有個重要的觀念也可以順便釐清。廣播網域與碰撞網域(Collision Domain)是不一樣的,連接到同一個集線器(Hub)的所有電腦都是處於同一個碰撞網域內,因為Hub做的事情很簡單,一旦Hub從任何一個埠接收到一個封包,它所做的事情就是單純地把這個封包從其他的埠全部丟出去,完全沒有學習功能,所以連接到同一個Hub的所有電腦都是處於同一個碰撞網域。

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



由於VLAN有這樣的特性,所以可以透過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的資料。為了達到這種需求,在設定此種Switch設備之間的連線時,就必須設定成Trunk類型。有關Trunk的詳細資訊,後面會慢慢提到。

虛擬區域網路種類

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

所謂的靜態VLAN指的就是讓系統管理員手動設定哪些埠是屬於哪個VLAN。而Cisco Catalyst的Switch設備也支援動態VLAN的方式,這種方式會使用VMPS(VLAN Management Policy Server)這種額外的設備來協助達成動態VLAN的設定,而VMPS可以用Catalyst 5000系列的Switch設備或是其他的伺服器來架設,不過要注意的是,一般最常用的Cisco Catalyst 2950不能拿來架設成VMPS。

VMPS內部包含一個資料庫,用來儲存哪些MAC位址是屬於哪個VLAN的對應關係,所以動態VLAN可說是依照MAC位址來分割VLAN,也就是MAC-based,而靜態VLAN則是根據埠來區分是哪個VLAN,亦即Port-based。

但是,對於動態VLAN而言,一個埠底下的所有電腦必須都要屬於同一個VLAN,這樣才能正常運作,因為如此一來,這個埠所連接的電腦的MAC位址都是對應同一個VLAN,當Switch設備要決定丟到哪個VLAN時,才不會搞錯。

不過,一般都會採用靜態VLAN的方式來分割VLAN,因為設定方便快速,而且採用動態VLAN方式時還必須架設另一台VMPS,所以這種方式的成本過高,設定相當麻煩,因此筆者不建議讀者使用動態VLAN的方式來架設VLAN。

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

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

Trunk主要分成兩種協定:802.1Q協定和ISL協定。簡單來說,Trunk會在資料內增加一個標籤(Tag),用來表示目前這份資料是屬於哪一個VLAN,貼上標籤後,再把這份資料傳到另一台設備。另一台設備收到之後,再根據這個標籤得知這份資料是屬於哪一個VLAN,然後把這份資料送往所屬的VLAN。

以上就是Trunk的主要工作。因此這個Trunk必須要能夠傳送所有VLAN的資料,反正也不會搞混,因為都會在資料內貼上標籤。以下就分別針對這兩種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,一開始拿到Cisco Switch設備時,所有的埠都會被指派到Native VLAN中,因此所有的埠都可以互相通訊,因為都屬於同一個VLAN。

而Native VLAN有一個作用是,所有沒有被貼上標籤的資料都會被送往這個Native VLAN。每個VLAN都會有一個ID,用來區分各個VLAN,而Native VLAN的預設ID就是VLAN 1。

還有一點值得注意,只有802.1Q協定才有Native VLAN,ISL並沒有Native VLAN。也因為沒有貼上標籤的資料都會在Native VLAN上遊走,所以Switch設備就不會在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個位元組的空間,因此整個資料長度最長會是1,522個位元組。而標籤中的內容包含乙太網路類型、PRI值、Token Ring專屬封裝用的Flag和VLAN ID。

ISL協定

另外一種協定就是ISL。ISL是Inter-Switch Link的縮寫。ISL協定是Cisco設備專用的,但也不是每一款Cisco設備都支援,只有某幾款Cisco設備才支援ISL協定。

ISL協定運作於OSI網路七層架構的第二層,作法就是在前面增加一段表頭,並在最後面新增一段CRC。而由於ISL協定與任何協定無關,因此ISL協定能夠封裝任何種類的上層協定資料。

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

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

802.1Q與ISL協定比較

ISL協定是用硬體來實作,因此所能支援的VLAN個數依照硬體的好壞而定,速度也是依照硬體的好壞來決定,與802.1Q協定不同。802.1Q協定是在軟體上處理,所以速度想必比較緩慢。

另外,當決定要使用哪一種的協定時,也要考慮到整個網路的設備廠牌,若使用ISL協定,則代表所有的設備都一定要採用Cisco的設備,因為這是Cisco專屬的協定。

兩者各有好壞,端由網路管理人員來決定。802.1Q和ISL協定最大的不同之處就在於它們的標籤置放方式不同,這點請各位讀者注意,尤其是要準備CCNA認證的讀者,Trunk一向都是考試重點之一。

在Cisco設備執行VLAN設定指令

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

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

第一步驟只有Cisco設備才需要設定,而VTP的詳細內容與觀念,以後會再介紹,接下來,說明另外三個步驟的指令。

設定Trunk

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

1.選擇並進入所要設定的埠
一開始選擇要將哪個埠設定為Trunk,因此必須先進入這個埠的設定模式。假設要選擇第一模組(Slot)的第一個埠,則指令設定方式如下:



2.關閉埠的運作
這麼做的目的是為了避免等一下在這個埠上面所要做的設定,影響到其他埠的運作情形,這個步驟可有可無,指令操作如下:



3.設定所要套用的Trunk協定
前面提到Trunk分為802.1Q和ISL兩種協定,接下來第三個步驟就是要設定使用哪一種Trunk協定,若是要套用802.1Q協定,則設定指令如下:



switchport trunk指令是針對某個埠進行Trunk相關的設定,而後面所接的encapsulation則代表目前要設定的是封裝模式,也就是指Trunk協定種類,而dot1q是指802.1Q協定。若要套用ISL協定,則指令如下:



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



如此一來,假若對方的設備是使用ISL協定,則這台設備也會使用ISL協定,反之,若對方使用802.1Q,則這台也會跟著使用802.1Q協定。

這個步驟是必要的,但如果是像Cisco Catalyst 2950 Switch的設備,就不需要執行這一個步驟,因為這台設備只能支援802.1Q協定。

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



關鍵指令為switchport mode,而最後的trunk代表現在要把這個埠設定成Trunk模式。既然說到這個指令,就順便介紹一下這個指令所能接收的其他設定值。這個指令後面所能接收的參數有以下四種:

1.Trunk
Trunk是通訊埠所能採用的一種模式,在這個模式下,就代表要在這個埠套用802.1Q協定的Trunk,並會與另一端的埠協調,告知這之間的連線要使用哪一種Trunk模式。

2.Access
其他常見的模式還有Access,若要將這個埠採用Port Security,就必須將這個埠改成Access模式,因為Access模式就相當於連接電腦端才會設定的模式。

而如果在這種接到其他Cisco設備端的埠上面設定為Access,代表要移除原本在這個埠的Trunk屬性,並請這個埠和對方的埠協調,看看是否可以把Trunk屬性都拿掉。

3.Dynamic desirable
這是預設的模式,此種模式代表要讓這個埠與對方的埠一起協調,如何從非Trunk的模式改到Trunk模式。這是主動模式,也就是主動想成為Trunk的模式。除非對方的埠設定成Access模式,不然無論對方的埠是什麼模式,都會變成Trunk模式。

一般不建議使用這種模式,因為要就Trunk,不然就選Access,這種還要依照對方是什麼才決定用什麼,感覺不太穩定。

4.Dynamic auto
當對方的埠設定成Trunk或Desirable時,將自己的埠設定成Dynamic auto時,就會成為Trunk模式,若對方的埠設定為Access或Auto,則Trunk就無法建立起來。

根據這四種模式,筆者將這些模式與Trunk連線是否能夠建立,整理成以下的表格:



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



執行switchport nonnegotiate指令後,就不會再和對方協議,也就是不會在OSI第二層網路協定中發送DTP和對方協議用的封包。

不過,只有當模式設定為Access或Trunk的時候,才能使用這個指令,如果嘗試在Desirable或Auto模式下執行這個指令的話,將會傳回錯誤訊息。

如果要將這個指令取消的話,只要在原本的指令前面加上no,並重新執行一次即可,如下所示:



設定VLAN

接下來這一個步驟就是要設定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的指令:



一開始,必須到某一個VLAN ID的VLAN mode底下。在上面的範例中,vlan 3是到編號為3的VLAN,代表等一下要設定的就是第三個VLAN。

而標準安裝好的IOS軟體中,這個VLAN的ID範圍只能是1到1005,若是安裝加強版的軟體後,這個值的範圍可以是1到4094。

當然,如果一次要設定的VLAN對象很多,在使用這個指令的同時,後面所接的VLAN ID可以一次輸入多筆,中間只要用逗號分隔即可:



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



接下來指定這個VLAN的名稱,而以上的例子是將VLAN 3的名稱改為VLAN_KC,名稱不一定要指定。

如果沒有做這個設定步驟,系統會指派一個預設的VLAN名稱,通常會是類似VLAN3或VLAN0003這樣的值。

將各個埠指定到某個VLAN中

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



每一個埠同一個時間只能屬於某一個VLAN,因此要指派這個埠到哪個VLAN時,必須使用switchport access指令,而後面接關鍵字vlan,最後再接上一個VLAN ID,這樣就設定完成了。

如果要檢查是否設定成功,則執行show vlan指令,如下所示:



由上面的結果可以看出,Fas0/4這個埠已經被指派到VLAN 3當中,同時也可以看出第三個VLAN的名稱已經被改成VLAN_KC。

如果IOS版本夠新,也可以一次設定多個埠,同時指定到同一個VLAN中,其設定的指令如下所示:



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

結語

這篇提到相當重要的VLAN觀念、Trunk分類以及相對應的設定指令,這對要赴考CCNA的人極為重要。在CCNA的實驗題目當中,也很可能會考這類型的題目,所以各個指令還是要熟記。

此外,CCNA經常會出現VLAN的題目,題目中可能會顯示出一些設定好的VLAN資訊,然後要應考者找出問題在哪裡。當然,不僅是要準備CCNA的讀者,這篇文章對於大型網路管理人員更是重要。
這篇文章讓你覺得滿意不滿意
送出
相關文章
眾至HiGuard WiFi提供小型辦公室有線與無線安全網路運作安全
兩種網管自動化協定 搞定大型Cisco網路管理
VMware NSX有亮點 動態開ESG網路服務虛機
深入OpenFlow協定 詳解Flow Table比對機制
從VLAN源起話說從頭 階層式虛擬區域網路簡介
留言
顯示暱稱:
留言內容:
送出
熱門點閱文章