IEEE 802.1Q VLAN技術原理

文章出處:http://hi.baidu.com/x278384/item/d56b0edfd4f56a4eddf9be79

     在數據通信和寬帶接入設備裏,只要涉及到二層技術的,就會遇到VLAN。而且,通常情況下,VLAN在這些設備中是基本功能。所以不管是剛邁進這個行業的新生,還是已經在這個行業打拼了很多年的前輩,都要熟悉這個技術。在論壇上經常看到討論各種各樣的關於VLAN的問題,在工作中也經常被問起關於VLAN的這樣或那樣的問題,所以,有了想寫一點東西的衝動。
    大部分童鞋接觸交換這門技術都是從思科技術開始的,討論的時候也脫離不了思科的影子。值得說明的是,VLAN是一種標準技術,思科在實現VLAN的時候加入了自己的專有名詞,這些名詞可能不是通用的,儘管它們已經深深印在各位童鞋們的腦海裏。本文的描述是從基本原理開始的,有些說法會和思科技術有些出入,當然,也會講到思科交換中的VLAN。

1. 以太網交換原理

    VLAN的概念是基於以太網交換的,所以,爲了保持連貫性,還是先從交換原理講起。不過,這裏沒有長篇累牘的舉例和配置,都是一些最基本的原理。
    本節所說的以太網交換原理,是針對‘傳統’的以太網交換機來說的。所謂‘傳統’,是指不支持VLAN。
    簡單的講,以太網交換原理可以概括爲 ‘源地址學習,目的地址轉發’。考慮到IP層也涉及到地址問題,爲了避免混淆,可以修改爲 ‘源MAC學習,目的MAC轉發’。從語文的語法角度來講,可能還有些問題,就再修改一下 ‘根據源MAC進行學習,根據目的MAC進行轉發’。總之,根據個人習慣了。本人比較喜歡 ‘源MAC學習,目的MAC轉發’的口訣。
    稍微解釋一下。
    所謂的‘源MAC學習’,是指交換機根據收到的以太網幀的幀頭中的源MAC地址來建立自己的MAC地址表,‘學習’是業內的習慣說法,就如同在淘寶上買東西都叫‘寶貝’一樣。
    所謂的‘目的MAC轉發’,是指交換機根據收到的以太網幀的幀頭中的目的MAC地址和本地的MAC地址表來決定如何轉發,確定的說,是如何交換。
    這個過程大家應該是耳熟能詳了。但爲了與後面的VLAN描述對比方便,這裏還是簡單的舉個例子。
Figure 1-1:
|-------------------------------|
| SW1 (Ethernet Switch) |
|-------------------------------|
| |
|port1 |port 2
| |
|-------| |-------|
| PC1| | PC2|
|-------| |-------|

    簡單描述一下PC1 ping PC2的過程:(這裏假設,PC1和PC2位於同一個IP網段,IP地址分別爲IP_PC1和IP_PC2,MAC地址分別爲MAC_PC1和MAC_PC2)
    1). PC1首先發送ARP請求,請求PC2的MAC。目的MAC=FF:FF:FF:FF:FF:FF(廣播);源MAC=MAC_PC1。
    SW1收到該廣播數據幀後,根據幀頭中的源MAC地址,首先學習到了PC1的MAC,建立MAC地址表如下:
    MAC地址 端口
    MAC_PC1 PORT 1

    2). 由於ARP請求爲廣播幀,所以,SW1向除了PORT1之外的所有UP的端口廣播。
    注意,該幀沒有任何變化。換句話說,交換機沒有對幀做任何修改。這就是傳說中的透明傳輸。

    3). PC2收到該ARP請求幀,本地建立ARP表項,同時單播回送ARP應答幀。目的MAC=MAC_PC1;源MAC=MAC_PC2。
    SW1收到該單播幀手,根據幀頭中的源MAC地址,學習到了PC2的MAC,建立MAC地址表如下:
    MAC地址 端口
    MAC_PC1 PORT 1
    MAC_PC2 PORT 2

    4). SW1根據幀頭中的目的MAC地址(MAC_PC1)將數據幀從PORT 1轉發。

    5). PC1收到ARP響應,ARP交互過程成功。接下來進行單播PING包交互。
    SW1根據數據幀的目的MAC進行透明轉發單播幀,同時刷新本地MAC地址表的老化定時器。

2. 802.1Q VLAN的基本原理

    嚴格來說,802.1Q VLAN不是一個協議,因爲互連的設備之間沒有協議層面的報文交互。802.1Q VLAN只定義了數據幀的封裝格式,即,在以太網幀頭中插入了4個字節的VLAN字段。其主要內容爲VLAN TAG,緊隨其後的數據類型和802.1p報文優先級的標識。


    本人所理解的VLAN技術要點主要有兩點:1.支持VLAN的交換機的內部交換原理;2.設備之間(交換機之間,交換機與路由器之間,交換機與主機之間)交互時,VLAN TAG的添加和移除。下面就按照這個思路來描述。

2.1 支持VLAN的交換機的交換原理
    引入VLAN概念後,數據幀只在相應的VLAN進行交換。用通俗一點的話來講,一個交換機被虛擬出了多個邏輯交換機,每一個VLAN內的端口都是一個邏輯上的交換機。用專業一點的話來講,一個交換機被劃分了多個不同的廣播域,每一個VLAN內的端口,在同一個廣播域內。
    引入VLAN後的交換原理與傳統的交換原理相比,並沒有本質上的改變,同樣遵循‘源MAC學習,目的MAC轉發’的基本原則。唯一不同的是,學習和轉發都只在同一個VLAN中進行,數據幀不能跨VLAN交換或轉發。

2.1.1 數據幀該在哪個VLAN中進行交換?
    前面提到,支持VLAN的交換機將數據幀限制在同一個VLAN中進行交換,那麼數據幀到底該在哪個VLAN中交換呢?
    如果收到的數據幀攜帶了VLAN信息 (通常稱爲’TAGED數據幀‘,前面已經介紹了帶VLAN TAG的以太幀格式),該VLAN信息中的VLAN TAG就是交換該幀的VLAN
    如果收到的數據幀沒有攜帶VLAN信息(通常稱爲‘ UNTAGED數據幀‘),收到該幀的端口的PVID就是交換該幀的VLAN
    該規則在2.2.3節中有詳細的描述。
    根據上面的原則,也定義了PVID的概念。當端口收到一個UNTAGED數據幀時,無法確定在哪個VLAN中進行交換,PVID定義了在這種情形下交換該幀的VLAN。從某種意義上講,可以把PVID理解爲端口的default VLAN。在支持VLAN的交換機中,每個端口都有一個PVID值,該值有一個缺省值,當然你也可以更改它。

2.1.2 MAC地址學習和MAC地址表
引入VLAN概念後,MAC地址的學習也在相應的VLAN中進行從某種意義上理解,一臺交換機有多張MAC地址表,每個VLAN一張表,在交換數據幀進行查表時,只需要在相應的VLAN中進行查找
    很顯然,MAC地址表項中,增加了VLAN TAG屬性。
    VLAN MAC地址 端口
    VLAN1 MAC_PC1 PORT 1
    VLAN1 MAC_PC2 PORT 2
    VLAN2 MAC_PC1 PORT 1
    VLAN2 MAC_PC2 PORT 2

2.2 VLAN TAG的添加和移除規則
    爲了保證設備之間的互聯互通,需要理解VLAN TAG的添加和移除規則。也就是說,交換機在轉發數據幀時,什麼時候應該打TAG,什麼時候應該不打TAG,什麼時候又會丟棄數據幀。
    爲什麼要有這麼‘複雜’(其實也沒那麼複雜)的規則呢?爲什麼不把所有的數據幀都打上TAG呢,這樣不是簡單多了?其實,這樣做也是爲了適應不同設備的工作原理,有些設備是不支持VLAN TAG的

2.2.1 典型設備
    先介紹一下幾種典型的設備:
PC:大部分的PC(專用的,或用於測試的除外)是工作在應用層的,缺省情況下是不支持(其實也不需要)VLAN TAG的。也就是說,PC發出的都是UNTAGED數據幀。
Router:路由器是支持VLAN TAG的。也就是說,路由器可以發出TAGED數據幀,也可以發出UNTAGED數據幀。需要說明的是路由器是處理數據包的三層信息的,對於二層信息(包括VLAN信息),路由器只是檢查其有效性,之後將其剝離。這個過程就是我們常說的‘終結’,也就是說,路由器會終結掉報文的VLAN信息的
Switch:這裏的switch是指以太網交換機。VLAN技術就是主要針對於交換機提出的,所以,在討論VLAN概念時都是立足於交換機來討論。很顯然,交換機既支持收發TAGED數據幀,也支持收發UNTAGED數據幀。從嚴格意義上講,引入VLAN後,交換機的行爲不再是‘透明傳輸’,因爲數據幀經過交換機後可能發生了變化

瞭解了幾種典型設備的工作原理後,就應該覺得交換機上TAG的添加和移除原則的必要性了。

2.2.2 VLAN中的端口屬性
一個VLAN可以包含多個端口,而一個端口也可以屬於多個VLAN。一個端口在一個VLAN中有不同的屬性,TAG的添加和移除原則就是根據這個屬性而定的。
TAGED:如果一個端口在一個VLAN中的屬性是TAG的,那麼,從該端口轉發出去的數據幀就是TAGED。(當然,該數據幀是在該VLAN中交換的)
UNTAGED:如果一個端口在一個VLAN中的屬性是UNTAG的,那麼,從該端口轉發出去的數據幀就是UNTAGED。(當然,該數據幀是在該VLAN中交換的)

2.2.3 交換機收發數據幀的處理總結
    我們分幾種情況討論交換機的接收和發送處理:接收端口和發送端口在VLAN中屬性;收到的數據幀是TAG的還是UNTAG的。

    1). 端口接收到數據幀
        a). 如果是TAG的數據幀,檢查該接收端口是否在該VLAN(數據幀中所攜帶的VLAN TAG)中
            - 接收端口在該VLAN中,則在該VLAN中根據交換原理(即,'源MAC學習,目的MAC轉發'的原理)交換該數據包
            - 接收端口不在該VLAN中,丟棄該數據幀
        b). 如果是UNTAG的數據幀,檢查該接收端口是否在某個VLAN中的屬性是UNTAG
            - 接收端口在某個VLAN中的屬性是UNTAG的,則在該VLAN中根據交換原理交換該數據包
            - 接收端口在任何VLAN中的屬性都不是UNTAG的,丟棄該數據包
注:根據這個原理可知,一個端口最多在一個VLAN中的屬性是UNTAG的,否則,收到一個UNTAG的數據幀之後,就無法確定在哪個VLAN中進行交換。其實,端口UNTAG所在的VLAN,就是2.1.1節中所提到的PVID的概念

    2). 端口發送數據幀
        a).檢查該端口在該VLAN(就是交換該數據幀的VLAN)中的屬性
            - 該端口在該VLAN種的屬性是TAG的,發送的數據幀爲TAG的數據幀
            - 該端口在該VLAN種的屬性是UNTAG的,發送的數據幀爲UNTAG的數據幀
注:由於數據已經被交換到該端口,說明該端口肯定在該VLAN裏

2.2.4 典型配置
簡單介紹一下,交換機連接不同典型設備時的常用配置。
1). 連接PC
上面介紹了在通常情況下,PC只支持收發UNTAG的數據幀,所以,連接PC的端口只需要加入一個VLAN,而且,在該VLAN中的屬性爲UNTAG。
2). 連接Router
路由器既支持收發TAG數據幀,也支持收發UNTAG數據幀。通常情況下,不同的VLAN數據幀都能通過該端口與路由器互通。所以連接路由器的端口可以屬於多個VLAN,而且,只能在一個VLAN中的屬性是UNTAG的,在其他的VLAN中都是TAG的。
3). 連接Switch
也就是交換機的級聯。通常情況下是不同性能的交換機進行級聯。這種情況和連接路由器的情況基本相同。

2.2.5 思科交換機的端口類型
    TAG和UNTAG應該是一般性的說法,但討論路由交換技術時,不能忽略思科技術,因爲它畢竟是這個行業的引導者(你也可以說它是先入爲主)。
    通常情況下,理解VLAN的概念都是以VLAN爲立足點,然後將端口加入該VLAN,並賦予端口某種屬性。這種思路似乎不適用于思科的交換技術
    在思科的交換機上,都是以端口爲立足點的,然後配置該端口的類型和所屬的VLAN。
    這裏介紹思科的兩種端口類型,Access和Trunk。理解了這兩種類型,也就理解了思科交換的VLAN基本原理。

1). Access端口
    思科的Access端口是爲了連接PC(終端設備)而設計的。由於大部分終端設備都不支持(其實也不需要)VLAN TAG的,所以連接終端設備的端口只需要在一個VLAN中,而且是UNTAG的。Access端口就是這樣的。
    如果將端口配置爲Access模式,該端口就只能在一個VLAN中(也就是Access VLAN),而且該端口在該VLAN中的屬性是UNTAG的。從某種意義上說,該VLAN也就是該端口的PVID。

2). Trunk端口
    思科的Trunk端口是爲了連接上行設備(路由器,交換機等支持多VLAN的設備)。通常情況下,上行端口需要匯聚多個VLAN的流量,所以該端口應該屬於多個VLAN
    如果將端口配置爲Trunk模式,該端口可以屬於多個VLAN,在思科技術中,習慣稱該端口可以允許多個VLAN通過。該端口在一個VLAN中是UNTAG的,也就是該端口的PVID,在思科技術中,稱爲Native VLAN。該端口在其他的VLAN中都是TAG的

    可以說,思科在VLAN的一般性原理上多增加了一層開發。如果理解了其本質原理,可以看出是和2.2.3節完全吻合的。

2.3 交換機對VLAN的支持的發展歷程
    從技術發展爲產品總是需要一個過程,在接觸過早期交換機的童鞋們應該會知道,當時的交換機對VLAN的支持有兩種模式,SVL和IVL。
SVL: Shared VLAN Learning 共享式VLAN學習
 IVL: Independent VLAN Learning 獨立VLAN學習
    從通俗而簡單的角度來說,IVL就是每個VLAN有一個MAC-端口映射表,同一個MAC可以出現在多個表裏面(也就是不同的VLAN裏面);而SVL是在交換機內建一張大表,映射關係是MAC-VLAN-端口,而且,一個MAC在表中只出現一次,只屬於一個VLAN。
    顯然,SVL應該更容易實現一點,看起來是一種打補丁的實現方式,貌似不是真正的VLAN。早期的VLAN交換機中,有很多是SVL模式的。
    我們前面2.1和2.2節所介紹的原理,都是針對IVL來講的。

    從網絡上看到一位仁兄從專業的角度上總結了SVL和IVL的工作原理,非常準確而精闢,故我就不再加以潤色,直接引用了。
IVL,網上大部分資料都說爲每個VLAN建一個表,看起來好像有很多表,其實這裏所說的表是指邏輯上的表,實際上在交換機中還是隻有一個表,如果將VID相同的記錄都提取出來組成一個表,那麼就一個物理上的表在邏輯上就可以認爲是多個表了。

2.3.1 IVL (Independent VLAN Learning)
    在MAC表中以MAC+VID爲主鍵進行儲存。這樣,同一個MAC就可能由於VID的不同而在MAC表中存在多條記錄。
    1).根據MAC+VID在MAC表中尋找,找不到轉3)
    2).向找到的port轉發packet,end.
    3).向packet攜帶的vid對應的整個VLAN的port轉發,end.

2.3.2 SVL(Shared VLAN Learning)
    在MAC表中以MAC爲主鍵進行儲存,也就是說同一個MAC在SVL方式下只能存在一個記錄在MAC表中。
    1).在MAC中先根據MAC尋找相應的記錄,找不到轉4)
    2).記錄中的VID與packet中攜帶的VID一樣,得到相應的port;不一樣轉5)
    3).將packet轉發到相應的port,end.
    4).向packet攜帶的vid對應的整個VLAN的port轉發,end.
    5).drop,end.

    這個過程還是需要一點基礎的,如果看的有點虛無縹緲,大可以略過該節,因爲當今市場上,很少看到SVL的交換機了。

發佈了31 篇原創文章 · 獲贊 24 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章