介绍

QinQ(802.1Q-in-802.1Q),也叫做VLAN Stacking或Double VLAN,由IEEE 802.1ad标准定义,
是一项扩展VLAN空间的技术,通过在802.1Q标签报文的基础上再增加一层802.1Q的Tag来达到扩展VLAN空间的目的。
一般应用在骨干网中,通过将用户私网VLAN Tag封装在公网VLAN Tag中,使报文带着两层VLAN Tag穿越运营商的骨干网络(公网),扩充VLAN数量,实现对用户的精细化管理。

QINQ实现方式

QinQ可分为两种:基本QinQ和灵活QinQ。
(1) 基本QinQ
基本QinQ是基于端口方式实现的。开启端口的基本QinQ功能后,当该端口接收到报文,设备会为该报文打上本端口缺省VLAN的VLAN Tag。如果接收到的是已经带有VLAN Tag的报文,该报文就成为双Tag的报文;如果接收到的是不带VLAN Tag的报文,该报文就成为带有端口缺省VLAN Tag的报文。
(2) 灵活QinQ
灵活QinQ是对QinQ的一种更灵活的实现,它是基于端口与VLAN相结合的方式实现的。除了能实现所有基本QinQ的功能外,对于同一个端口接收的报文还可以根据不同的VLAN做不同的动作,可以实现以下功能:

  • 为具有不同内层VLAN ID的报文添加不同的外层VLAN Tag。(基本只能固定一个)
  • 根据报文的原有内层VLAN的802.1p优先级标记外层VLAN报文的802.1p优先级。
  • 可以在添加外层VLAN Tag的同时对内层用户VLAN ID进行修改。(标签替换)

为什么?

IEEE 802.1Q中定义的VLAN ID只有12个比特,仅能表示4096个VLAN域,随着网络规模的扩大,4096个VLAN域已无法满足网络扩容的需求,为此,IEEE 802.1ad中在原有的802.1Q报文的基础上增加一层802.1Q Tag(也叫做VLAN Tag或标签),使VLAN数量增加到4094×4094,这种双层Tag的报文就叫做QinQ报文。

随着以太网的进一步发展以及运营商精细化运作的要求,QinQ的双层Tag又有了新的应用场景。它的内外层Tag可以代表不同的信息,如内层Tag代表用户,外层Tag代表业务。另外,QinQ报文带着两层Tag穿越运营商网络,内层Tag透明传送,也是一种简单、实用的VPN技术。

所以,QinQ产生的两大背景是:一是解决日益紧缺的VLAN ID资源问题;二是满足业务精细化管理的需求。

报文结构

        +-----------+-----------+-----------+-----------+-------------+------------------+----------+        |   DMAC    |   SMAC    |   ETPE    |    TAG    |  LEN/ETYPE  |       Data       |   FCS    |        |  6 Bytes  |  6 Bytes  |  2 Bytes  |  2 Bytes  |   2 Bytes   |  Variable length | 4 Bytes  |        +-----------+-----------+-----------+-----------+-------------+------------------+----------+                                |                       |                              |     |                      |                           |            |                      |                        |                   |                       |                        |                       |                       |+-----------+-----------+-----------+-----------+-----------+-----------+-------------+------------------+----------+|   DMAC    |   SMAC    |   ETPE    |    TAG    |   ETPE    |    TAG    |  LEN/ETYPE  |       Data       |   FCS    ||  6 Bytes  |  6 Bytes  |  2 Bytes  |  2 Bytes  |  2 Bytes  |  2 Bytes  |   2 Bytes   |  Variable length | 4 Bytes  |+-----------+-----------+-----------+-----------+-----------+-----------+-------------+------------------+----------+                        |           |           |                     |           |                    |                  |           |                            |               |           |                                       |               +-----------+--------------+---------+--------------+               |   0x8100  |   Priority   |   CFI   |  VLAN ID     |               +-----------+--------------+---------+--------------+                                          

基本QinQ

灵活QinQ

VLAN Mapping (VLAN 映射/ vlan-translation)

VLAN Mapping通过修改报文携带的VLAN Tag来实现不同VLAN的相互映射。

目的

在某些场景中,两个VLAN相同的二层用户网络通过骨干网络互联,为了实现用户之间的二层互通,以及二层协议(例如MSTP等)的统一部署,需要实现两个用户网络的无缝连接,此时就需要骨干网可以传输来自用户网络的带有VLAN Tag的二层报文。而在通常情况下,骨干网的VLAN规划和用户网络的VLAN规划是不一致的,所以在骨干网中无法直接传输用户网络的带有VLAN Tag的二层报文。

解决这个问题的方法有两个,其中一个是通过QinQ或者VPLS等二层隧道技术,将用户带有VLAN Tag的二层报文封装在骨干网报文中进行传输,可以实现用户带有VLAN Tag的二层报文的透传。但是这种方法一方面需要增加额外的报文开销(增加一层封装),另外一方面,二层隧道技术可能会对某些二层协议报文的透传支持不是非常完善。另外一种方法就是通过VLAN Mapping技术,一侧用户网络的带有VLAN Tag的二层报文进入骨干网后,骨干网边缘设备将用户网络的VLAN(C-VLAN)修改为骨干网中可以识别和承载的VLAN(S-VLAN),传输到另一侧之后,边缘设备再将S-VLAN修改为C-VLAN。这样就可以很好的实现两个用户网络二层无缝连接。

在另一种场景中,如果由于规划的差异,导致两个直接相连的二层网络中部署的VLAN ID不一致。但是用户又希望可以把两个网络作为单个二层网络进行统一管理,例如用户二层互通和二层协议的统一部署。此时也可以在连接两个网络的交换机上部署VLAN Mapping功能,实现两个网络之间不同VLAN ID的映射,达到二层互通和统一管理的目的

参考

https://info.support.huawei.com/info-finder/encyclopedia/zh/QinQ.html

https://support.huawei.com/enterprise/zh/doc/EDOC1100197875/10f2c347

http://www.h3c.com/cn/d_200805/605855_30003_0.htm

http://www.h3c.com/cn/d_201904/1173020_30005_0.htm

https://www.cisco.com/c/zh_cn/support/docs/smb/switches/cisco-350-series-managed-switches/smb5822-configure-vlan-mapping-on-a-switch-through-the-cli.html?dtid=osscdc000283