介绍
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的映射,达到二层互通和统一管理的目的