CCNA - Part11 - 隔離廣播域的 VLAN 來了

之前在對交換機的介紹中,我們知道交換機的作用就是隔離廣播域,在不需要跨網段傳輸時,在同一子網中轉發數據包從而進行通信。實現的核心原理就是在交換機中擁有一張 MAC 表,記錄了對應終端設備和接口之間的關係。

今天會在此基礎上,介紹 VLAN 的概念,先來看這樣一個設計很不好的網絡,假設這是一家公司的拓撲圖:

可以發現,公司的每個部門之間和核心交換機相連,這就會造成很大的問題:

  • 非常大的廣播域 - 廣播非常消耗資源,特別是廣播域很大的情況,比如 HR 部門發送一條廣播,市場部,技術部等等部門都會收到。
  • 不易於管理,比如 HR 看到的信息,其他部門不應該能看到。
  • 安全的威脅,由於所有部門都在一個廣播域,當其中一個部門出現安全隱患時,會蔓延到所有部門。
  • 不容易排查問題

而 VLAN 的出現就是爲了解決上述的問題。

VLAN

VLAN 翻譯成中文,是"虛擬局域網"。 LAN 可以是由少數幾家用計算機構成的網絡,也可以是數以百計的計算機構成的企業網絡。VLAN 所指的 LAN 特指使用路由器分割的網絡,也就是廣播域。

也就是說,由原來的二層交換機只能構建單一的廣播域,通過啓用 VLAN 後,能夠將網絡分割成多個廣播域。

在實現上,在交換機內部的 MAC 表,除了有 MAC 地址和對應的接口號外,還多了一列 VLAN 號,用於將廣播域隔離開,數據只在 VLAN 號相同的端口進行傳遞。

VLAN 號的介紹

VLAN TAG 包的 VLAN ID 號,有效範圍是 1-4094,0 和 4095 都爲協議保留值,VLAN ID 0 表示不屬於任何VLAN,但攜帶 802.1Q 的優先級標籤,所以一般被稱爲 Priority-only frame,其一般作爲系統使用,用戶不可使用和刪除。

1 爲系統默認 VLAN,即 Native VLAN。默認情況下,所有的接口都屬於 VLAN1. 當交換機收到未帶有 VLAN TAG 包的數據幀時,會將數據包轉發至 Native VLAN 端口。

2-1001 是普通的 VLAN,1006-1024 保留僅系統使用,用戶不能查看和使用,1002-1005是支持 fddi 和令牌環的 VLAN,1025-4095 是擴展的 VLAN。

中繼鏈路:是隻承載標記數據(即具有 VLANID 標籤的數據包)的幹線鏈路

VLAN 接口的類型

Access:
Access 類型的端口只能屬於一個 VLAN,用於連接終端設備

Trunk:
Trunk 類型的端口可以允許多個 VLAN通過,可以接收和發送多個 VLAN 的報文,用於交換機之間的連接端口。

交換機使用 VLAN 的原理

Access 口的處理過程:

在收到終端設備發送的報文後,會先判斷是否帶有 VLAN 信息。

  1. 如果沒有,則加上該端口的 VLAN 號。
    1. 接着找到目的 MAC 的端口號,並且 VLAN 號也相同,則進行轉發,並去掉加上的 VLAN 信息。
    2. 如果找到目的 MAC (比如泛洪全 f),但是對應的接口 VLAN 號不滿足,則不進行轉發。
  2. 如果有,則丟棄(因爲 Access 一般和終端設備直連,而 VLAN 信息都是交換機加上的,所以不會有 VLAN 信息。)

現在通過 Access 實現了隔離同一臺交換機的之間的廣播域隔離,但如果想要在多臺交換機隔離又該怎麼辦呢?

爲了實現在多臺交換機的隔離,就需要將 VLAN 信息記錄下了,然後在傳遞的交換機進行判斷。在之前的數據鏈路層文章中介紹,用的協議主要是 Ethernet2 和 IEEE 的 802.3. 但對於這兩個協議來說,都不能進行標識 VLAN 的信息,所以爲了實現在多臺交換機上隔離的效果,就在這兩個協議中添加了一個 4Byte 的字段,用於表示 VLAN 信息。

其實 Type 字段:表示使用的協議,如 Ox8100 表示 802.1q .

Priority: 優先級字段,對數據幀分類,分級等,QoS 用到。

CFI:表示是否令牌環網數據。

VLAN ID:VLAN 號 (0 - 4095)

有了新添加的 VLAN 信息,將不同交換機連接起來的這條鏈路,就稱爲 Trunk 鏈路。在 Trunk 中,可以預先設置上允許通信的 VLAN 號,在交換機間傳遞。

這條鏈路也被成稱爲中繼鏈路(幹路):在同一鏈路上,可以實現傳輸所有 VLAN 的數據。

Native VLAN:當交換機收到沒有 vlan 的信息數據包中,會將數據包發到默認的 native vlan 中。在連接的交換機中,要保證 native vlan 要一致。

Trunk 口的引入,處理過程:

在 Trunk 口收到數據時:

  1. 判斷是否有 VLAN 信息。
    1. 如果沒有則打上端口的 Native VLAN 號,並進行交換轉發。
    2. 如果有 VLAN 信息,並且該 Trunk 端口允許該 VLAN 的數據進入,則將報文帶有原有 VLAN 標記進行轉發,否則丟棄。

在 Trunk 口發出數據時:

  1. 比較端口的 Native VLAN 號和將要發送報文的 VLAN 號
    1. 如果兩者相等則剝離 VLAN 信息再發送。(也就是說發送的是本徵 VLAN 時,trunk 端口會去除 VLAN 信息)
    2. 否則報文將攜帶原有的 VLAN 標記進行轉發。

爲同一 接口 配置不同 VLAN 類型

有時會出現這樣的情況,爲了方便會將多個終端設備接在一起,比如交換機和接口和一個 IP 電話相連,在電話的後面有着一臺 PC。

這種意味着在一個 VLAN 中,有着不同種類的流量,一種是普通的數據流量,另一種是語音的流量。

爲了區分這種流量,就需要對交換機額外配置下,第一次配置數據流量,第二次配置語音流量。但需要注意的是,雖然是不同類型的 VLAN,但卻配置在同一接口下。

![WeChat Screenshot_202007

也就是說,可以爲同一接口配置不同種類的流量(不同的 VLAN 號),但是一個接口只能配置一個同一類別的 VLAN。

配置的注意事項

  1. VLAN 號的最大值取決於使用的交換機。

  2. VLAN 1 是默認 VLAN,也是管理 VLAN. 我們知道交換機是二層設備是沒有 IP 的,但實際上會有一個 IP,就是 VLAN 1 所虛擬出來的接口,可以爲該接口配置一個 IP,作用就是作爲網管使用,比如配合 Telnet 登錄,以及一些交換機之間的管理流量比如 VTP, DTP 等。注意 VLAN 1 有兩個作用,一個是管理作用,一個是作爲默認的 Native VLAN. 兩個是完全不同的功能。

  3. 最好將 Native VLAN 改變其他的 VLAN 號。

  4. Trunk 接口兩端的接口 Native VLAN 要一致。

  5. 最好爲 Trunk 配置上允許的 VLAN,而是默認允許所有。

通信過程

假設所有交換機都剛開機,PC 發出一個數據包經過交換機 SW1,交換機會打上 10 的 VLAN TAG 標記,然後交換機會把這個數據幀轉發給 VLAN = 10 的所有端口(除了進口),如下:

由於 SW1 的 Trunk 口包含 VLAN 10 ,並進行轉發,數據幀到達 SW3 後,e0/2 和 e 0/3 均爲 trunk 口,發現可接受 TAG 爲 10 的數據幀,直接進行轉發,如下:

SW2 的 trunk 口 e 0/3 同樣也能接受 VLAN = 10 的數據。並且在 e 0/0 的 access 口進行 untag。而 e 0/1 的 access 只能接受 VLAN = 20 的數據,所以不進行轉發。如下:

這樣 PC3 就正常接收到 PC1 的數據了。

配置

# STEP1: set ip and name for every pc 
PC> set pcname pc4
pc4> ip 10.1.1.1 255.255.255.0

# STEP2: Ping one of pc to test the connectivity 
pc4:ping 10.1.1.4

# This means every pc in topography can be connected.
# So we have object that PCs under the same Vlan can communicate, but PCs under different VLAN can not.

# STEP3: Config Trunk in the sw1,sw2 and sw3.
sw1(config)# int range e0/1-2
sw1(config-if-range)# switchport trunk encapsulation dot1q
sw1(config-if-range)# switchport mode trunk

# you can see there are E0/0 and E0/3 Ports in default Vlan but no E0/1,E0/2 Prots.
# Because Trunk mode is configured for the 2,3 Ports.
sw1#show vlan
VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Et0/0, Et0/3
10   VLAN0010                         active
20   VLAN0020                         active
1002 fddi-default                     act/unsup
1003 token-ring-default               act/unsup
1004 fddinet-default                  act/unsup
1005 trnet-default                    act/unsup

sw2(config)#int e0/0
sw2(config-if)# switchport trunk encapsulation dot1q 
sw2(config-if)# switchport mode trunk

sw3(config)#int e0/0
sw3(config-if)# switchport trunk encapsulation dot1q 
sw3(config-if)# switchport mode trunk

# STEP4:Add vlan 10,20 to each switch. and configure access mode for e0/1-2 ports in the sw2 and sw3.
sw1(config)# vlan 10
sw1(config)# vlan 20

sw2(config)# vlan 10
sw2(config)# vlan 20
sw2(config)# int e0/1
sw2(config-if)# switchport mode access 
sw2(config-if)# switchport access vlan 10
sw2(config)# int e0/2
sw2(config-if)# switchport mode access 
sw2(config-if)# switchport access vlan 20
sw2#show vlan
VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Et0/3
10   VLAN0010                         active    Et0/1
20   VLAN0020                         active    Et0/2
1002 fddi-default                     act/unsup
1003 token-ring-default               act/unsup
1004 fddinet-default                  act/unsup
1005 trnet-default                    act/unsup

sw3(config)# vlan 10
sw3(config)# vlan 20
sw3(config)# int e0/1
sw3(config-if)# switchport mode access 
sw3(config-if)# switchport access vlan 10
sw3(config)# int e0/2
sw3(config-if)# switchport mode access 
sw3(config-if)# switchport access vlan 20

# STEP5:Test if VLAN is vaild. 
pc4 pings pc6 is ok in the same vlan 10.
pc4 pings pc5 or pc7 is failed in the different vlan.

pc5 pings pc7 is ok in the same vlan 10.
pc5 pings pc4 or pc6 is failed in the different vlan.

拓展

問題:有這麼一個要求,在 SW1 和 SW3 之間傳遞的數據不帶 VLAN10 的標籤

由於還需要保證雙方的通信,所以 SW1 與 SW3 之間的 TRUNK 是不能改變的,但是在 TRUNK 模式下,發送的 TRUNK 端口可以將本徵 VLAN 的標籤去除,我們可以利用這個特點

改變本徵 VLAN 時,在同一條鏈路時要同時改

//修改 SW1 e 0/2 端口
sw1(config-if)# switchport trunk native 10

//修改 SW3 e 0/2 端口
sw3(config-if)# switchport trunk native 10

通信過程

PC1 發送數據包進入,SW1 e0/0 的 access 端口,打上 vlan = 10 的標籤,SW1 匹配後,轉發到相應接口 e0/2,由於該接口的本徵 VLAN 爲10,又是發送的 TRUNK 端口,進而將 VlanID = 10 的標籤去除。如圖:

可以看到 SW1 與 SW3 鏈路中並沒有添加的 VLANID 標籤

在 SW3 e0/2 端口,收到沒有 VLAN Tag 的數據,因此進行 TAG 操作,此時數據包上帶有 VLAN = 10 的標籤,進行匹配後,e 0/3 對該數據進行轉發。如圖:

在 SW2 與 SW3 的鏈路上帶有 VLAN = 10 的標籤了,SW2 的 e0/3 接收到數據後進行轉發,交換機匹配後,e0/0 爲 Access 口,對Tag 進行去除,緊着 PC3 收到數據.

總結

Access 口連接的是終端,Trunk 口連接的是交換機。

Access 口,解決的是在同一臺交換機下,隔離廣播域的作用。

Trunk 口,解決的是在多臺連接的交換機下,隔離廣播域的作用。

數據包在進入 Access 口時,會加上 VLAN TAG, 在 Access 輸出時,會將 TAG 拿掉。在 Trunk 口輸出時,VLAN TAG 不變。

數據包在進入 Trunk 口時,如果沒有 VLAN TAG 則會加上 Native VLAN,有的話直接轉發。 在 Access 輸出時,會將 TAG 拿掉,在 Trunk 輸出時,如果是 Native VLAN 則把 TAG 拿掉,不是的話直接轉發。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章