工作中需要了解QinQ的知識,找到了一篇不錯的文章,轉載一下。
原文地址如下:https://blog.csdn.net/qq_38265137/article/details/80404320
QinQ簡介
定義:
QinQ(802.1Q-in-802.1Q)技術是一項擴展VLAN空間的技術,通過在802.1Q標簽報文的基礎上再增加一層802.1Q的Tag來達到擴展VLAN空間的功能,可以使私網VLAN透傳公網。由於在骨干網中傳遞的報文有兩層802.1Q Tag(一層公網Tag,一層私網Tag),即802.1Q-in-802.1Q,所以稱之為QinQ協議。
##目的:
隨着以太網技術在網絡中的大量部署,利用802.1Q VLAN對用戶進行隔離和標識受到很大限制。因為IEEE802.1Q中定義的VLAN Tag域只有12個比特,僅能表示4096個VLAN,無法滿足以太網中標識大量用戶的需求,於是QinQ技術應運而生。
QinQ是通過在原有的802.1Q報文的基礎上增加一層802.1Q標簽來實現的,使得VLAN數量增加到4094×4094,擴展了VLAN空間。
隨着以太網的發展以及精細化運作的要求,QinQ的雙層標簽又有了進一步的使用場景。它的內外層標簽可以代表不同的信息,如內層標簽代表用戶,外層標簽代表業務。另外,QinQ報文帶着兩層Tag穿越公網時,內層Tag透明傳送,也是一種簡單、實用的VPN技術。因此它又可以作為核心MPLS VPN在以太網VPN的延伸,最終形成端到端的VPN技術。
優點:
- 擴展VLAN,對用戶進行隔離和標識不再受到限制。
- QinQ內外層標簽可以代表不同的信息,如內層標簽代表用戶,外層標簽代表業務,更利於業務的部署。
- QinQ封裝、終結的方式很豐富,幫助運營商實現業務精細化運營。
- 解決日益緊缺的公網VLAN ID 資源問題
- 用戶可以規划自己的私網VLNA ID
- 提供一種較為簡單的二層VPN解決方案
- 使用戶網絡具有較高的獨立性
原理描述
基本原理:
QinQ是指在802.1Q VLAN的基礎上增加一層802.1Q VLAN標簽,從而拓展VLAN的使用空間。在公網的傳輸過程中,設備只根據外層VLAN Tag轉發報文,並根據報文的外層VLAN Tag進行MAC地址學習,而用戶的私網VLAN Tag將被當作報文的數據部分進行傳輸。
QinQ報文:
QinQ報文有固定的格式,就是在802.1Q的標簽之上再打一層802.1Q標簽,QinQ報文比802.1Q報文多四個字節。
字段解釋:
字段 | 長度 | 含義 |
---|---|---|
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或幀檢驗序列)。 |
報文示例:
QinQ封裝:
QinQ封裝是指如何把單層Q報文轉換成雙層Q報文。
根據不同的封裝數據,QinQ可以分為幾種不同類型,包括基本QinQ和靈活QinQ兩大類。其中基本QinQ是指基於接口的QinQ,靈活QinQ包括基於VLAN ID的QinQ和基於802.1p優先級的QinQ,具體如下:
-
基於接口的QinQ封裝
基於接口的封裝是指進入一個接口的所有流量全部封裝一個相同的外層VLAN Tag,封裝方式不夠靈活,用戶業務區分不夠細致,這種封裝方式也稱作基本QinQ。
-
基於VLAN ID的QinQ封裝(靈活QinQ)
基於VLAN ID的QinQ封裝可以對不同的數據流選擇是否封裝外層Tag、封裝何種外層Tag,因此這種封裝方式也稱作靈活QinQ。
例如:當同一用戶的不同業務使用不同的VLAN ID時,可以根據VLAN ID區間進行分流。假設PC上網的VLAN ID范圍是101~200;IPTV的VLAN ID范圍是201~300;VoIP的VLAN ID范圍是301~400。根據VLAN ID范圍,對PC上網業務封裝上外層Tag 100,對IPTV封裝上外層Tag 300,對VoIP封裝上外層Tag 500。
-
基於802.1p優先級的QinQ封裝(基於流的靈活QinQ)
基於802.1p優先級的QinQ封裝可以對不同優先級的數據流選擇是否封裝外層Tag、封裝何種外層Tag,因此這種封裝方式也稱作靈活QinQ。
例如:當同一用戶的不同業務使用不同的優先級,如語音、視頻、數據等。可以根據優先級為這些業務建立不同的數據傳輸通道,方便對業務進行區分。
QinQ的實現方式:
QinQ的實現方式可分為以下兩種:
-
基本QinQ
- 如果收到的是帶有VLAN Tag的報文,該報文就成為帶雙Tag的報文。
- 如果收到的是不帶VLAN Tag的報文,該報文就成為帶有本端口缺省VLAN Tag的報文。
-
靈活QinQ
- 為具有不同內層VLAN ID的報文添加不同的外層VLAN Tag。
- 根據報文內層VLAN的802.1p優先級標記外層VLAN的802.1p優先級和添加不同的外層VLAN Tag。
通過使用靈活QinQ技術,在能夠隔離運營商網絡和用戶網絡的同時,又能夠提供豐富的業務特性和更加靈活的組網能力。
QinQ/Dot1q終結子接口:
終結主要是指設備對報文的單層或者雙層Tag進行識別,然后根據后續的轉發行為對單層或者雙層Tag進行剝離或繼續傳送。
終結一般在路由子接口上執行,即:終結子接口。
QinQ技術在和MPLS/IP核心網連接時,根據不同的情況,會用到不同的終結方法。
- 如果路由子接口是對報文的單層Tag終結,那么該子接口稱為Dot1q終結子接口。
- 如果路由子接口是對報文的雙層Tag終結,那么該子接口稱為QinQ終結子接口。
注意:
Dot1q終結子接口和QinQ終結子接口不支持透傳不帶VLAN的報文,收到不帶VLAN的報文會直接丟棄。
基本QinQ:
基本QinQ,是基於接口方式實現的。開啟接口的基本QinQ功能后,當該接口接收到報文,設備會為該報文打上配置的外層Tag。如果接收到的是已經帶有VLAN Tag的報文,則為其加上外層VLAN Tag;如果接收到的是不帶VLAN Tag的報文,則先為其加上內層VLAN Tag,再加上外層Tag。
靈活QinQ:
- 基於VLAN ID的靈活QinQ:為具有不同內層VLAN ID的報文添加不同的外層VLAN Tag。
- 基於802.1p優先級的靈活QinQ:根據報文的原有內層VLAN的802.1p優先級添加不同的外層VLAN Tag。
靈活QinQ功能是對基本QinQ功能的擴展,它比基本QinQ的功能更靈活。二者之間的主要區別是:
- 基本QinQ:對進入二層QinQ接口的所有幀都加上相同的外層Tag。
- 靈活QinQ:對進入二層QinQ接口的幀,可以根據不同的內層Tag而加上不同的外層Tag,對於用戶VLAN的划分更加細致。
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 |
QinQ配置
配置基本QinQ(二層):
如下圖,通過配置基本QinQ,實現客戶網絡在運營商網絡中的傳輸。
配置文件:
LSW1和LSW4配置相同:
<SW1>dis current-configuration # sysname SW1 # vlan batch 10 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 #
LSW3和LSW4配置相同:
[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 #
注:
- 靈活QinQ只能用在hybrid接口,trunk口無法實現。
- qing protocol 9100 \只會修改針對內層VLAN TAG的以太類型的改寫,用於不同廠商的設備互通。華為默認為8100,可配置范圍為0x0600~0xFFFF。
- **基本QinQ可配置多層,而靈活QinQ只能配置兩層,**想要配多層,第三層開始得結合配置基本QinQ。
參考文檔:華為HedEx文檔