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
posted @ 2019-07-25 10:36  SXISZERO  阅读(6317)  评论(0编辑  收藏  举报