• 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
  • 相关阅读:
    Python笔试题(递归)
    MYSQL经典面试题
    Linux常用命令
    HTTP协议相关面试题
    Flask面试题
    史上最全DVWA 笔记
    ssh root Permission denied
    odoo Reference 选择model 然后选择record
    定体, 定压, 定温, 绝热 Q E A 公式
    Vmware Bluetooth
  • 原文地址:https://www.cnblogs.com/sxiszero/p/11240106.html
Copyright © 2020-2023  润新知