19 QinQ技术(Vlan两层封装)

1 什么是QinQ?

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数量,实现对用户的精细化管理。

2 为什么需要QinQ?

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资源问题;

二是满足业务精细化管理的需求。

QinQ应用场景有哪些?

在企业网中,可以不同的业务封装不同VLAN Tag,使不同的业务按需获取不同的资源。如下图所示,PC、VOIP、IPTV由于应用场景和需求不同,在企业内部属于不同的VLAN,访问公网时,针对不同的内层VLAN Tag添加不同的外层VLAN Tag。

  • PC:内层VLAN Tag对应的VLAN ID是101,外层VLAN Tag对应的VLAN ID是1001
  • VOIP:内层VLAN Tag对应的VLAN ID是301,外层VLAN Tag对应的VLAN ID是2001
  • IPTV:内层VLAN Tag对应的VLAN ID是501,外层VLAN Tag对应的VLAN ID是3001

在运营商网络中,为节省运营商公网VLAN ID资源,用户在使用运营商网络传输报文时,内层使用不同的VLAN ID区分不同部门,外层使用相同的VLAN ID。如下图所示,不同区域部门的用户需要跨越运营商网络相互通信,为节省运营商VLAN ID,用户报文在运营商网络中转发时,统一都添加一层VLAN ID为3的Tag。

QinQ报文格式

QinQ报文有固定的格式,就是在802.1Q的标签之上再打一层802.1Q标签**,QinQ报文比802.1Q报文多四个字节。这四个字节用作外层标签**,即运营商网络的公网VLAN Tag。原802.1Q的Tag用作内层标签,即私网VLAN Tag。QinQ报文封装格式如下图所示。

如下图所示,通过对802.1Q封装和QinQ封装的报文抓包,可以明显看出QinQ报文比802.1Q多了一层802.1Q标签。

QinQ有哪些实现方式?

根据识别报文的方式和添加外层标签的位置,QinQ的实现方式可以分为下面两种。

  • 基于接口的QinQ封装

    也叫做基本QinQ或QinQ隧道(QinQ Tunnel),就是对接口收到的所有报文都添加一层VLAN** ID相同的外层Tag。**

  • 基于流的QinQ封装

    也叫做灵活QinQ,首先对进入接口的报文根据指定规则分类,然后对于不同类型的报文选择封装何种外层Tag。

    例如:当同一企业的不同业务使用不同的VLAN ID时,可以根据VLAN ID进行对报文进行分类。假设PC上网的VLAN ID范围是101~200;IPTV的VLAN ID范围是201~300;大客户的VLAN ID范围是301~400。设备收到业务报文后,可以根据VLAN ID范围对不同的业务添加不同的外层Tag。对PC上网业务封装上外层Tag 100,对IPTV封装上外层Tag 300,对大客户封装上外层Tag 500。

    常见的对报文分类的方式包括如下几种:

    • 根据报文原有的VLAN ID进行分类,即根据报文原有内层VLAN ID添加不同的外层VLAN Tag。
    • 根据报文原有的VLAN Tag中的802.1p优先级进行分类,即根据报文原有内层VLAN的802.1p优先级添加不同的外层VLAN Tag。
    • 根据流策略进行精细分类,即根据QoS策略添加不同的外层VLAN Tag。该方式能够针对业务类型提供差别服务。

QinQ是如何工作的?

在QinQ典型组网中,有两个重要的设备角色:CE(Customer Edge)设备和PE(Provider Edge )设备。CE设备与用户相连,对用户报文封装第一层VLAN Tag,即内层VLAN Tag;PE设备是CE设备的下游设备,对CE设备转发过来的报文封装第二层VLAN Tag,即外层VLAN Tag。

如下图所示,部门A和部门B分布在不同的办公点,部门A和部门B通过运营商网络相互通信,部门A和部门B分别使用VLAN 10和VLAN 20进行通信,该企业仅申请到一个公网VLAN 3。当CE1和CE3对应的部门A的用户相互通信时,CE1用户发送到CE3用户的报文,VLAN Tag的添加和剥离流程如下。

  1. CE1收到用户报文时,对用户报文封装第一层VLAN Tag,对应的VLAN ID是10。
  2. PE1收到CE1转发的用户报文时,对用户报文再封装一层VLAN Tag,对应的VLAN ID是3。
  3. 报文携带两层VLAN Tag(内层VLAN Tag的VLAN ID是10,外层VLAN Tag的VLAN ID是3),从PE1设备传输到PE2设备。
  4. PE2收到报文从对应出接口转发报文时,会剥离掉外层VLAN ID是3的VLAN Tag。
  5. CE3收到报文时,报文仅携带一层VLAN ID为10的VLAN Tag。CE3设备转发报文时,会剥离掉这层VLAN ID为10的 VLAN Tag。

CE3用户发送到CE用户的报文,VLAN Tag的添加和剥离流程正好与上面流程相反。

QinQ相关技术

VLAN Mapping

如上描述,通过QinQ技术可以实现两个VLAN相同的二层用户网络通过骨干网络互联,但是通过QinQ技术需要增加额外的报文开销(增加一层VLAN Tag)。通过VLAN Mapping技术也可以实现两个VLAN相同的二层用户网络通过骨干网络互联。

一侧用户网络的带有VLAN Tag的二层报文进入骨干网后,骨干网边缘设备将用户网络的VLAN(称为C-VLAN)修改为骨干网中可以识别和承载的VLAN(称为S-VLAN),传输到另一侧之后,边缘设备再将S-VLAN修改为C-VLAN。这样就可以很好的实现两个用户网络二层无缝连接。

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

VXLAN

VXLAN(Virtual eXtensible Local Area Network),也称为虚拟可扩展LAN,顾名思义,VXLAN是一种扩展VLAN的网络虚拟技术。VXLAN作为NVO3技术之一,本质上也属于一种VPN技术,能够在任意路由可达的网络上叠加二层虚拟网络,通过VXLAN网关实现VXLAN网络内部的互通,同时,也可以实现与传统的非VXLAN网络的互通。另外,VXLAN通过引入了类似VLAN ID的用户标识,VXLAN网络标识VNI(VXLAN Network Identifier),由24比特组成,支持多达16M的VXLAN段,解决云计算中海量租户隔离的问题。VXLAN的相关信息,请参考VXLAN配置指南(S系列交换机)。

QinQ标签添加和剥离流程

QinQ报文

QinQ封装格式

不同部门添加相同VLAN Tag

不同业务添加不同VLAN Tag

3 基本QinQ配置思路

4 基本命令解析

interface GigabitEthernet0/0/1port link-type dot1q-tunnelport default vlan 100interface GigabitEthernet0/0/3port link-type trunkport trunk allow-pass vlan 100 200 300 400qinq protocol 9100
  1. 接口 GigabitEthernet0/0/1 的配置:
    • port link-type dot1q-tunnel: 设置接口的链路类型为dot1q-tunnel,这通常意味着接口被配置为支持QinQ封装,允许在数据包上应用两个VLAN标签。
    • port default vlan 100: 设置接口的默认VLAN为100,这意味着通过这个接口发送的未标记VLAN的数据包将被分配到VLAN 100。
  2. 接口 GigabitEthernet0/0/3 的配置:
    • port link-type trunk: 设置接口的链路类型为trunk,这允许接口携带多个VLAN标签的数据包,通常用于连接交换机或路由器。
    • port trunk allow-pass vlan 100 200 300 400: 允许通过这个trunk接口传递VLAN 100、200、300和400的数据包。这意味着这些VLAN的数据包可以在这个接口上进出。
    • qinq protocol 9100: 这个命令可能用于指定QinQ封装的特定协议或服务类型。在某些设备中,protocol 9100可能是一个服务实例标识符,用于区分或识别特定的服务流量。然而,具体的9100值的含义可能依赖于设备的具体实现和配置上下文。

5 灵活的QinQ配置

6 命令解析

interface GigabitEthernet0/0/1qinq vlan-translation enableport hybrid untagged vlan 101port vlan-stacking vlan 101 stack-vlan 600
  1. qinq vlan-translation enable:
    • 此命令启用了VLAN翻译功能。VLAN翻译允许一个接口将接收到的VLAN标签映射或转换为不同的VLAN标签,然后再转发出去。这在服务提供商环境中非常有用,因为它允许服务提供商在不干扰客户VLAN设置的情况下,管理自己的VLAN标签。
  2. port hybrid untagged vlan 101:
    • port hybrid命令配置接口为混合端口,这意味着接口可以同时传输标记和未标记的VLAN数据包。
    • untagged vlan 101指定了当接口接收到未标记的VLAN数据包时,它们将被分配到VLAN 101。
  3. port vlan-stacking vlan 600 stack-vlan 101:
    • port vlan-stacking命令配置接口以支持VLAN堆叠,也就是QinQ技术。
    • vlan 600指定了内部VLAN标签,即数据包原有的VLAN标签。
    • stack-vlan 101指定了外部VLAN标签,即在内部VLAN标签之上添加的V

执行命令 port vlan-stacking vlan vlan-id1 [ to vlan-id2 ] stack-vlan vlan-id3 [ remark-8021p 8021p-value1 ] 是用于配置灵活QinQ(Flexible QinQ)的命令。灵活QinQ是一种网络技术,它允许对经过特定接口的VLAN数据包进行再封装,将原有的VLAN标签(内部标签)保留,并添加一个新的VLAN标签(外部标签)。这在服务提供商环境中非常有用,因为它可以允许多个客户的VLAN在服务提供商的网络上进行传输,同时每个客户的流量都有自己的唯一标识。

下面是命令参数的详细解释:

  • port vlan-stacking: 开始VLAN堆叠配置的命令。
  • vlan vlan-id1 [ to vlan-id2 ]: 指定一个或一系列内部VLAN ID。vlan-id1是起始的VLAN ID,如果需要指定一个范围,可以使用to vlan-id2
  • stack-vlan vlan-id3: 指定要添加到内部VLAN标签之上的外部VLAN ID。
  • [ remark-8021p 8021p-value1 ]: 这是一个可选参数,用于设置封装后的外部VLAN标签的802.1p优先级。8021p-value1是优先级值,范围通常是0到7。

仅配置灵活QinQ意味着在接口上仅启用了VLAN堆叠功能,而没有启用VLAN翻译或其他类型的VLAN操作。灵活QinQ允许对匹配特定内部VLAN ID的数据包进行操作,将它们封装在指定的外部VLAN ID中,同时保留原始的内部VLAN标签。

例如,如果有一个命令如下:

port vlan-stacking vlan 10 to 20 stack-vlan 100 remark-8021p 5

这个命令的含义是:

  • 对于内部VLAN ID在10到20范围内的所有数据包,
  • 在这些数据包上添加一个外部VLAN ID为100的标签,
  • 并将这个新标签的802.1p优先级设置为5。

请注意,具体的命令语法和功能可能会根据不同的网络设备和操作系统版本有所不同。在实际应用中,应参考具体的设备手册或命令参考文档来确保正确配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/841802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工具使用-网络性能测试工具(iperf)-TCP 和 UDP 的吞吐量-包转发率参数的理解

时间戳:2024年5月26日15:18:39 iperf 和 netperf 都是最常用的网络性能测试工具,测试 TCP 和 UDP 的吞吐量。它们都以客户端和服务器通信的方式,测试一段时间内的平均吞吐量。 接下来,我们就以 iperf 为例,看一下 TC…

MyBatis进阶(<if><trim><where><set><foreach><include>标签的使用)

目录 < if >标签 < trim >标签 < where >标签 < set >标签 < foreach >标签 < include >标签 < if >标签 非必填字段 xml实现 <insert id"insertUserByCondition">INSERT INTO userinfo (username,passwor…

【力扣一轮】202.快乐数 1.两数之和

202.快乐数 力扣链接 代码随想录链接 思路 看到这一题没思路&#xff0c;直接看题解。 发现其中一个难点在于“无限循环”&#xff0c;这个字眼可以转换成退出条件。退出条件就有两种&#xff0c;一种是这个数字是快乐数&#xff0c;一种是这个数字不是快乐数。 如果是快…

【vue嵌套iframe】实现项目重构

vue嵌套iframe 创建 iframe 通用组件添加页面及路由进阶&#xff1a;vue 与 iframe 的双向通讯代码下载 适用于使用vue重构及vue访问其他服务页面 基于vue3示例页面添加嵌套iframe的页面 创建 iframe 通用组件 IframeTemplate.vue 页面布局 <template><div class…

9.2 Go语言入门(包和导入)

Go语言入门&#xff08;包和导入&#xff09; 目录一、包和导入1. 包&#xff08;Package&#xff09;1.1 包的定义1.2 包的作用1.3 main 包1.4 非 main 包 2. 导入&#xff08;Import&#xff09;2.1 导入标准库2.2 导入第三方包2.3 导入本地包2.4 导入别名2.5 导入并调用初始…

mysql授权用户

mysql授权用户只能看到某张表单表 要实现MySQL中的用户只能看到某张表&#xff0c;可以通过创建一个新的数据库用户&#xff0c;并且只授予该用户对特定表的权限。以下是实现这一功能的步骤和示例代码&#xff1a; 创建新用户并设置密码。 授予该用户对特定数据库的权限。 授…

国内最受欢迎的7大API供应平台对比和介绍||电商API数据采集接口简要说明

本文将介绍7款API供应平台&#xff1a;聚合数据、百度APIStore、Apix、数说聚合、通联数据、HaoService、datasift 。排名不分先后&#xff01; 免费实用的API接口 第一部分 1、聚合数据&#xff08;API数据接口_开发者数据定制&#xff09; 2、百度API Store(API集市_APIStore…

数据库系统原理实验报告6 | 视图

整理自博主本科《数据库系统原理》专业课自己完成的实验报告&#xff0c;以便各位学习数据库系统概论的小伙伴们参考、学习。 专业课本&#xff1a; ​ ———— 本次实验使用到的图形化工具&#xff1a;Heidisql ​ 目录 一、实验目的 二、实验内容 1&#xff0e;根据EDUC数…

妙解设计模式之适配器模式

适配器模式的概念 适配器模式是一种结构设计模式&#xff0c;它允许将接口不兼容的类通过一个适配器类进行适配&#xff0c;使得这些类可以一起工作。适配器模式通常用于以下情况&#xff1a; 当一个接口的实现类已经存在&#xff0c;但是另一个接口需要的是不兼容的时候。当…

揭秘C++ String容器:字符串操作的艺术

目录 ​编辑 引言 一、初识std::string&#xff1a;构造与初始化 二、字符串的操纵艺术&#xff1a;拼接、查找与替换 三、访问与遍历&#xff1a;字符的细腻触感 四、大小与容量&#xff1a;动态调整的智慧 五、进阶功能&#xff1a;探索更多可能 结语 引言 在C标准库…

ssms执行建表后如何自动刷新所有SQL SERVER表

在 SQL Server Management Studio (SSMS) 中&#xff0c;当你通过 T-SQL 脚本创建表后&#xff0c;通常需要手动刷新对象资源管理器以查看新表。SSMS 并没有提供自动刷新的选项&#xff0c;但你可以使用以下几种方法来解决这个问题&#xff1a; 手动刷新&#xff1a;在对象资源…

网络工程师基础知识:

网络工程师基础知识&#xff1a; 1.最基本的7层协议&#xff1a; 来源&#xff1a; 通过网络网线和报文的这些机制让全世界的数据通过二进制流来进行沟通 从下而上&#xff1a; 物理层 数据链路层 网络层 传输层 表示层 会话层 应用层 基本的一个数据报文&#xff1a; 数据链…

Java 8

这次我学习了第八次Java课程 这次课在假期&#xff0c;包含了两天的一大波内容 对于编写项目过程中有许多的 辅助类 System System.out.println() 打印 Scanner Scanner sc new Scanner(System.in) 赋值 Random 随机数 Math 数学运算 日期 要想使用日期方法就要引入包Date 1…

人工智能为犯罪地下世界带来了巨大的生产力提升

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Java 18 新特性详解

Java 18 新特性详解 Java 18 作为 Oracle 推出的又一重要版本&#xff0c;继续秉持着 Java 平台“创新但不破坏”的原则&#xff0c;带来了多项旨在提升开发效率、性能和安全性的新特性。本篇文章将深入解析 Java 18 引入的主要特性&#xff0c;并探讨它们如何影响开发者的工作…

详解 Scala 的集合类型

一、集合简介 1. 类型 序列 Seq&#xff1a;类似于 Java 中的 List 接口集 Set&#xff1a;类似于 Java 中的 Set 接口映射 Map&#xff1a;类似于 Java 中的 Map 接口所有的集合都扩展自 Iterable 特质 2. 不可变集合 位于 scala.collection.immutable 包&#xff0c;指该集…

Runtime,你学会了吗?

作为Java开发者,我们经常听到关于Runtime类的提及,但很少有人深入了解它的作用和用法。 Runtime类是Java标准库中的一个关键类,提供了与运行时环境交互的方法。 本文将深入探讨Runtime类的背景、用途、常用方法以及最佳实践,帮助程序员们更好地利用这一重要工具。 1. 背…

ISSCC论文详解 2023 16.1 MulTCIM 存内计算在多模态领域的应用前沿论文

多模态模型&#xff0c;是指具备理解来自不同模态&#xff08;如视觉、自然语言、语音等&#xff09;的混合信号能力的神经网络模型&#xff0c;是当今人工智能模型发展的重要方向之一。本文将要介绍的文献题目为《16.1 MulTCIM: A 28nm 2.24μJ/Token Attention-Token-Bit Hyb…

一些常见的程序设计问题

秒杀 redis缓存库存 1.判断库存名额是否充足&#xff0c;2.进行扣减 为了防止超卖&#xff0c;必须保证这两部的原子性 库存扣减后发送mq消息&#xff0c;去异步执行创建订单流程&#xff0c;创建订单失败会造成少卖。可加重试机制&#xff0c;对多次重试依旧失败的&#xff…

刷题记录第九十九天-与排序相关的题-第K大的数和逆序对的数量

求第K大的数—利用快速排序的思想 class Solution { public:int partition(vector<int>& num, int l, int r){swap(num[l],num[lrand()%(r-l1)]);int x num[l];int il1, jr;while(i<j){while(i<r&&num[i]<x){i;}while(num[j]>x){j--;}if(i>…