802.1Q VLAN原理

weixin_34198583發表於2012-06-15

802.1Q VLAN原理

802.1Q VLAN 技術原理     在資料通訊和寬頻接入裝置裡,只要涉及到二層技術的,就會遇到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報文優先順序的標識。
Figure 2-1 乙太網幀格式
|-----------------------------------------------------------------------------|
| DMAC(6bytes) | SMAC(6bytes) | Ether-Type(2bytes) | DATA |
|-----------------------------------------------------------------------------|
Figure 2-2 帶VLAN TAG的乙太網幀格式
|-------------------------------------------------------------------------------------------------|
| DMAC(6bytes) | SMAC(6bytes) | Ether-Type(0x8100) | VLAN(4bytes) | DATA |
|-------------------------------------------------------------------------------------------------|
Figure 2-3 VLAN TAG的格式
|---------------------------------------------------------------------------------|
| PRI(3bits) | CFI(1bit) | TAG(12bits) | Ether-Type(2bytes) | DATA |
|---------------------------------------------------------------------------------|
PRI:幀優先順序,就是通常所說的802.1p。
CFI:規範標識位,0為規範格式,用於802.3或EthII。
TAG:就是我們通常說的VLAN ID
Ether-Type:標識緊隨其後的資料型別。
 本人所理解的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.2.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的交換機了。

 

相關文章