QinQ 技術解析


1. 概述

QinQ技術〔也稱Stacked VLAN 或Double VLAN〕。標准出自IEEE 802.1ad,其實現將用戶私網VLAN Tag封裝在公網VLAN Tag中,使報文帶着兩層VLAN Tag穿越運營商的骨干網絡(公網)。

2. QinQ 的產生背景

IEEE802.1Q中定義的VLAN Tag域中只有12個比特位用於表示VLAN ID,所以設備最多可以支持4094個VLAN。在實際應用中,尤其是在城域網中,需要大量的VLAN來隔離用戶,4094個VLAN遠遠不能滿足需求。

3. QinQ的作用及原理

設備提供的端口QinQ特性是一種簡單、靈活的二層VPN技術,它通過在運營商網絡邊緣設備上為用戶的私網報文封裝外層VLAN Tag,使報文攜帶兩層VLAN Tag穿越運營商的骨干網絡(公網)。
在公網中,設備只根據外層VLAN Tag對報文進行轉發,並將報文的源MAC地址表項學習到外層Tag所在VLAN的MAC地址表中,而用戶的私網VLAN Tag在傳輸過程中將被當作報文中的數據部分來進行傳輸。
QinQ特性使得運營商可以用一個VLAN為含有多個VLAN的用戶網絡服務。如圖1所示,用戶網絡A的私網VLAN為VLAN 1~10,用戶網絡B的私網VLAN為VLAN 1~20。運營商為用戶網絡A分配的VLAN為VLAN 3,為用戶網絡B分配的VLAN為VLAN 4。當用戶網絡A的帶VLAN Tag的報文進入運營商網絡時,報文外面會被封裝上一層VLAN ID為3的VLAN Tag;當用戶網絡B的帶VLAN Tag的報文進入運營商網絡時,報文外面會被封裝上一層VLAN ID為4的VLAN Tag。這樣,不同用戶網絡的報文在公網傳輸時被完全分開,即使兩個用戶網絡的VLAN范圍存在重疊,在公網傳輸時也不會產生混淆。

4. QinQ 技術的優點

  1. 擴展VLAN,對用戶進行隔離和標識不再受到限制。
  2. QinQ內外層標簽可以代表不同的信息,如內層標簽代表用戶,外層標簽代表業務,更利於業務的部署。
  3. QinQ封裝、終結的方式很豐富,幫助運營商實現業務精細化運營。
    • 解決日益緊缺的公網VLAN ID 資源問題
    • 用戶可以規划自己的私網VLNA ID
    • 提供一種較為簡單的二層VPN解決方案
    • 使用戶網絡具有較高的獨立性

5. QinQ 的報文結構

字段 長度 含義
Destination address 6字節 目的MAC地址。
Source address 6字節 源MAC地址。
Type 2字節 長度為2字節,表示幀類型。設備可以根據這個字段判斷對它接受與否。取值為0x8100時表示802.1Q Tag幀。如果不支持802.1Q的設備收到這樣的幀,會將其丟棄。對於內層VLAN tag,該值設置為0x8100;對於外層VLAN tag,有下列幾種類型0x8100:思科路由器使用、0x88A8:Extreme Networks switches使用、0x9100:Juniper路由器使用、0x9200:Several路由器使用
PRI 3比特 Priority,長度為3比特,表示幀的優先級,取值范圍為0~7,值越大優先級越高。用於當交換機阻塞時,優先發送優先級高的數據包。
CFI 1比特 CFI (Canonical Format Indicator),長度為1比特,表示MAC地址是否是經典格式。CFI為0說明是經典格式,CFI為1表示為非經典格式。用於區分以太網幀、FDDI(Fiber Distributed Digital Interface)幀和令牌環網幀。在以太網中,CFI的值為0。
VID 12比特 LAN ID,長度為12比特,表示該幀所屬的VLAN。在VRP中,可配置的VLAN ID取值范圍為1~4094。
Length/Type 2字節 指后續數據的字節長度,但不包括CRC檢驗碼。
Data 42~1500字節 負載(可能包含填充位)。
CRC 4字節 用於幀內后續字節差錯的循環冗余檢驗(也稱為FCS或幀檢驗序列)。

說明:
接口的MTU值默認為1500字節。當為報文加上外層VLAN Tag后,報文的長度會增加4個字節,建議用戶適當增加運營商網絡中各接口的MTU(Maximum Transmission Unit,最大傳輸單元)值,至少為1504字節

QinQ 抓包示例:

6. QinQ的實現方式

QinQ可分為兩種:基本QinQ 和 靈活QinQ。

(1) 基本QinQ

基本QinQ是基於端口方式實現的。開啟端口的基本QinQ功能后,將進入此端口的所有流量全部封裝一個相同的外層 VLAN 標簽。如果接收到的是已經帶有VLAN Tag的報文,該報文就成為雙Tag的報文;如果接收到的是不帶VLAN Tag的報文,該報文就成為帶有端口缺省VLAN Tag的報文。

如圖所示,企業部門1(Department1)有兩個辦公地,部門2(Department2)有三個辦公地,兩個部門的各辦公地分別和網絡中的PE1、PE2相連,部門1和部門2可以任意規划自己的VLAN。這樣,可在PE1和PE2上通過如下思路配置QinQ二層隧道功能,使得每個部門的各個辦公地網絡可以互通,但兩個部門之間不能互通。

  • 在PE1上,對於進入端口Port1和Port2的用戶(都屬於部門1)數據幀都封裝外層VLAN 10,對於進入端口Port3中用戶(屬於部門2)數據幀都封裝外層VLAN 20
  • 在PE2上,對於進入端口Port1和Port2的用戶(都屬於部門2)數據幀都封裝外層VLAN 20
  • PE1上的端口Port4和PE2上的端口Port3允許VLAN 20的用戶數據幀通過,以便實現連接在PE1的Port3上部門2的用戶與連接在PE2的Port1和Port2上部門2的用戶互通

這種基本QinQ封裝就相當於用一個外層的VLAN標簽映射同類用戶的多個內層VLAN標簽,以減少ISP端設備VLAN ID的使用量。

(2) 靈活QinQ

靈活QinQ是對QinQ的一種更靈活的實現,它是基於端口與VLAN相結合的方式實現的。除了能實現所有基本QinQ的功能外,對於同一個端口接收的報文還可以根據不同的VLAN做不同的動作。它可以分為以下三個子類:

  • 基於VLAN ID的靈活QinQ: 它是基於數據幀中不同的內層標簽的VLAN ID來添加不同的外層標簽。即具有相同內層標簽的幀添加相同的外層VLAN標簽,具有不同內層標簽的幀添加不同的外層VLAN標簽。這就要求不同用戶的內層VLAN ID或VLAN ID范圍不能重疊或交叉。
  • 基於802.1p優先級的靈活QinQ: 它是基於數據幀中不同的內層標簽的802.1p優先級來添加不同的外層標簽。即具有相同內層VLAN 802.1p優先級的幀添加相同的外層標簽,具有不同內層VLAN 802.1p優先級的幀添加不同的外層標簽。這就要求不同用戶的內層VLAN的802.1p優先級或802.1p優先級范圍不能重疊或交叉。
  • 基於流策略的靈活QinQ: 它是根據所定義的QoS策略為不同的數據幀添加不同的外層標簽。基於流策略的靈活QinQ是基於端口與VLAN相結合的方式實現的,能夠針對業務類型提供差別服務。

如圖所示,企業的部門1有多個辦公地,部門2也有多個辦公地。部門1的網絡中使用VLAN 2~VLAN 500;部門2的網絡中使用VLAN 500~VLAN 4094。PE1的Port1端口會同時收到兩個部門不同VLAN區間的用戶數據幀。

此時可根據圖中標識的各辦公地的用戶VLAN ID范圍在PE1和PE2上通過如下思路配置基於VLAN的靈活QinQ功能,使得每個部門的各個辦公地網絡可以互通,但兩個部門之間不能互通。具體配置思路如下:

  • 對於進入PE1的Port1端口的用戶數據幀,依據其VLAN ID的不同添加對應的外層VLAN標簽。如VLAN ID在2~500之間,則封裝VLAN ID為10的外層標簽;如VLAN ID在1000~2000之間,則封裝VLAN ID為20的外層標簽;
  • 對於進入PE1的Port2端口的用戶數據幀,如果VLAN ID在100~500之間,則封裝VLAN ID為10的外層標簽;
  • 對於進入PE2的Port1端口的用戶數據幀,如VLAN ID在1000~4094之間,則封裝VLAN ID為20的外層標簽;
  • 對於進入PE2的Port2端口的用戶數據幀,如果VLAN ID在500~2500之間,則封裝VLAN ID為20的外層標簽;
  • 在PE1和PE2的Port3端口上允許VLAN 20的幀通過,以便實現連接在PE1的Port1端口下連接的部門2用戶與連接在PE2的Port1和Port2的部門2的用戶互通。

可以看出,靈活QinQ比基本QinQ的外層標簽封裝更加靈活,可可以根據用戶數據幀中的原來的VLAN ID范圍來確定封裝不同的外層標簽,這樣更有方便了對相同網絡中不同業務的用戶數據流提供差分服務。

7. QinQ/Dot1q終結子接口

QinQ/Dot1q終結是指設備對數據幀的雙層或者單層VLAN標簽進行識別,根據后續的轉發行為對幀中的雙層或者單層VLAN標簽進行剝離,然后繼續傳送。也就是這些VLAN標簽僅在此之前生效,后面的數據傳輸和處理不再依據幀中的這些VLAN標簽。
VLAN終結的實質包括兩個方面:

  • 對於接口收到的VLAN報文,去除VLAN標簽后進行三層轉發或其他處理。從設備其它接口轉發出去的報文是否帶有VLAN標簽由對應的端口類型及其數據發送規則決定。
  • 對於接口發送的報文,又將相應的VLAN標簽信息添加到報文中后再發送。

終結一般在路由子接口上執行,即終結子接口,如我們在單臂路由中就要配置路由子接口的802.1Q的VLAN終結。如果路由子接口是對數據幀的單層VLAN標簽終結,那么該子接口稱為Dot1q 終結子接口;如果路由子接口是對數據幀的雙層VLAN標簽終結,那么該子接口稱為QinQ終結子接口。QinQ終結子接口根據終結的用戶VLAN標簽的類型,通常分為兩種子接口:

  • 明確的QinQ終結子接口:兩層VLAN標簽為固定的值。
  • 模糊的QinQ終結子接口:兩層VLAN標簽為范圍值,即:終結的內、外層標簽都為一個VLAN ID范圍值。

注意:

Dot1q終結子接口和QinQ終結子接口不支持透傳不帶VLAN的報文,收到不帶VLAN的報文會直接丟棄。

8. TPID(Tag Protocol Identifier)

標簽協議標識TPID(Tag Protocol Identifier)是VLAN Tag中的一個字段,表示VLAN Tag的協議類型,IEEE 802.1Q協議規定該字段的取值為0x8100。

IEEE802.1Q協議定義的以太網幀的VLAN Tag。802.1Q Tag位於SA(Source Address)和Length/Type之間。通過檢查對應的TPID值,設備可確定收到的幀承載的是運營商VLAN標記還是用戶VLAN標記。接收到幀之后,設備將配置的TPID值與幀中TPID字段的值進行比較。如果二者匹配,則該幀承載的是對應的VLAN標記。例如,如果幀承載TPID值為0x8100的VLAN標記,而用戶網絡VLAN標記的TPID值配置為0x8200,設備將認為該幀沒有用戶VLAN標記。也就是說,設備認為該幀是Untagged報文。

另外,不同運營商的系統可能將QinQ幀外層VLAN標記的TPID設置為不同值。為實現與這些系統的兼容性,可以修改TPID值,使QinQ幀發送到公網時,承載與特定運營商相同的TPID值,從而實現與該運營商設備之間的互操作性。以太網幀的TPID與不帶VLAN標記的幀的協議類型字段位置相同。為避免在網絡中轉發和處理數據包時出現問題,不可將TPID值設置為下表中的任意值:

協議類型及對應值描述表:

協議類型 對應值
ARP 0x0806
RARP 0x8035
IP 0x0800
IPv6 0x86DD
PPPoE 0x8863/0x8864
MPLS 0x8847/0x8848
IPX/SPX 0x8137
LACP 0x8809
802.1x 0x888E
HGMP 0x88A7
設備保留 0xFFFD/0xFFFE/0xFFFF

9. QinQ 配置

配置基本QinQ(二層)

如下圖,通過配置基本QinQ,實現客戶網絡在運營商網絡中的傳輸

配置文件:
LSW1 與 LSW4配置相同:

<SW1>dis current-configuration 
#
sysname SW1
#
vlan batch 10 20 //批量創建 vlan 10 與 vlan 20
#
interface GigabitEthernet0/0/1
 port link-type access
 port default vlan 10
#
interface GigabitEthernet0/0/2
 port link-type access
 port default vlan 20
#
interface GigabitEthernet0/0/3
 port link-type trunk
 port trunk allow-pass vlan 10 20
#

LSW2 與 LSW3配置相同:

[SW2]dis current-configuration 
#
sysname SW2
#
vlan batch 100
#
interface GigabitEthernet0/0/1
 port link-type dot1q-tunnel //使能二層QinQ功能
 port default vlan 100 //划分接口到VLAN100
#
interface GigabitEthernet0/0/2
 port link-type trunk
 port trunk allow-pass vlan 100
#

配置靈活QinQ(二層)

拓撲如上,LSW1和LSW4配置同上

LSW2 與 LSW3配置如下:

[SW2]dis current-configuration 
#
sysname SW2
#
vlan batch 100 200
#
interface GigabitEthernet0/0/1
qinq vlan-translation enable
//開啟QinQ的VLAN轉換功能
port hybrid untagged vlan 100 200
//定義接口出方向剝離VLAN100和VLAN200的標簽
port vlan-stacking vlan 10 stack-vlan 100
//接口收到來自VLAN10的數據幀后疊加一層VLAN100的外層標簽
port vlan-stacking vlan 20 stack-vlan 200
//接口收到來自VLAN20的數據幀后疊加一層VLAN200的外層標簽
#
interface GigabitEthernet0/0/2
 port link-type trunk
 port trunk allow-pass vlan 100 200

注:

  1. 靈活QinQ只能用在hybrid接口,trunk口無法實現。
  2. 基本QinQ可配置多層,而靈活QinQ只能配置兩層,想要配多層,第三層開始得結合配置基本QinQ。

[參考文獻]

  1. 百度百科 QinQ.
  2. H3C QinQ技術介紹 http://www.h3c.com/cn/d_200805/605855_30003_0.htm
  3. QinQ封裝及終結詳解 https://www.cnblogs.com/virusolf/p/4893344.html
  4. QinQ基礎知識 https://blog.csdn.net/qq_38265137/article/details/80404320


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM