19 QinQ技术(Vlan两层封装)

news2024/9/23 7:23:06

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/1
 port link-type dot1q-tunnel
 port default vlan 100

interface GigabitEthernet0/0/3
 port link-type trunk
 port trunk allow-pass vlan 100 200 300 400
 qinq 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/1
 qinq vlan-translation enable
 port hybrid untagged vlan 101
 port 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.coloradmin.cn/o/1698616.html

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

相关文章

Stream流常用操作

一、中间操作 中间操作是返回一个新的流,并在返回的流中包含所有之前的操作结果。它们总是延迟计算,这意味着它们只会在终止操作时执行,这样可以最大限度地优化资源使用。 1. filter(过滤) filter()方法接受一个谓词(一个返回boo…

Vue.js条件渲染与列表渲染指南

title: Vue.js条件渲染与列表渲染指南 date: 2024/5/26 20:11:49 updated: 2024/5/26 20:11:49 categories: 前端开发 tags: VueJS前端开发数据绑定列表渲染状态管理路由配置性能优化 第1章:Vue.js基础与环境设置 1.1 Vue.js简介 Vue.js (读音:/vju…

每日一问-如何设置VS Code 中 Markdown粘贴图片的位置

VS Code内的markdown编辑器应该算是比较好用的,但是有一个问题一直困扰着我,就是在编辑markdown文件时,粘贴图片的位置问题。默认情况下,VS Code会将粘贴的图片放在markdown文件的同级目录下,这样会导致markdown文件的…

【代码随想录——回溯算法二周目】

1. 组合总和 var (path []intres [][]int )func combinationSum(candidates []int, target int) [][]int {path make([]int, 0)res make([][]int, 0)dfs(candidates,target,0,0)return res }func dfs(candidates []int, target int,tempTarget int,start int) {if tempTarg…

1、Introduction to Python【Python简介】

主要目的是回顾一下主要的Python基础知识,当作复习。 1、使用Type查看变量属性 a 10 print(type(a)) 2、向列表中加入元素 fam [lisa, 1.74] fam [emma, 1.79]# fam [lisa, 1.74, emma, 1.79] 3、删除列表中某个元素 del(fam[index]) 4、列表具有唯一性 …

ASP.NET MVC 快速入门(图文版)

今年是2024年了,没有多少人在ASP.NET 去做开发,都使用ABP框架 ,不过我们仍然需要了解ASP.NET MVC 的一个开发流程 MVC概述 MVC是当前比较流行的WEB程序开发模式之一,ASP.NET MVC是.Net对MVC的一种实现。MVC(Model View…

CobaltStrike渗透框架进阶之扩展脚本和MSF联动

CobaltStrike扩展脚本 扩展是Cobaltstrike一个极为重要的模块,它有效地丰盈了cobaltstrike的功能 选择菜单栏的CobaltStrike–>脚本管理器,点击load,然后选择cna扩展文件即可,旁边的unload为去除该扩展,&#xff…

【iOS开发】—— KVC

【iOS开发】—— KVC 一. KVC的定义key和keyPath的区别用法: 批量复制操作字典模型相互转化KVC的其他方法 KVC原理赋值原理取值原理 一. KVC的定义 KVC(Key-value coding)键值编码,就是指iOS的开发中,可以允许开发者通…

3D牙科网格分割使用基于语义的特征学习与图变换器

文章目录 3D Dental Mesh Segmentation Using Semantics-Based Feature Learning with Graph-Transformer摘要方法实验结果 3D Dental Mesh Segmentation Using Semantics-Based Feature Learning with Graph-Transformer 摘要 本文提出了一种新颖的基于语义的牙科网格分割方…

小程序怎么改名

经常有商家想要对自己的小程序进行重命名,改名可能是为了更好地与品牌形象以及业务相匹配,也可能是为了更好地吸引用户。那么如何才能更名呢? 一、准备几个新名字。 在决定改名之前,首先要确定几个新的小程序名字。为什么要准备…

CCF20231201——仓库规划

CCF20231201——仓库规划 代码如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {int n,m,a[1001][11],b[1001]{0};cin>>n>>m;for(int i1;i<n;i){for(int j1;j<m;j)cin>>a[i][j];}for(int i1;i<n;i){bool foundfals…

Excel必知必会

文章目录 基础概念数据格式选择区域内指定格式数据多行筛选数据转换数据格式固定首行和首列在滚动时一直显示指定列数据符合预期批量填充公式 函数VLOOKUP函数 基础概念 数据格式 文本&#xff0c;数值&#xff08;默认值0&#xff09;&#xff0c;&#xff08;逻辑值&#x…

ciscn2024(上传一下,有侵权什么的问题的话联系删除)

Web Simple_php 这个Simple_php一点儿也不Simple (⋟﹏⋞) 源码放这儿了&#xff1a; <?phpini_set(open_basedir, /var/www/html/); error_reporting(0);if(isset($_POST[cmd])){$cmd escapeshellcmd($_POST[cmd]); if (!preg_match(/ls|dir|nl|nc|cat|tail|more|flag…

部署ELK日志分析系统——超详细

ELK日志分析系统 文章目录 ELK日志分析系统资源列表基础环境一、环境准备二、部署Elasticsearch软件2.1、安装Elasticsearch软件2.2、加载系统服务2.3、更改Elasticsearch主配置文件2.4、创建数据存放路径并授权2.5、启动Elasticsearch2.6、查看节点信息 三、安装Elasticsearch…

如何使用GPT-4o?

GPT-4o的时代已经到来&#xff01;昨天分享群有小伙伴询问怎么使用GPT-4o&#xff1f; 在接下来的几周&#xff0c;OpenAI将陆续向所有用户开放GPT-4o的访问权限。无论是ChatGPT Free、Plus还是Team的用户&#xff0c;都能享受到GPT-4o带来的创新体验&#xff08;企业版也已经…

Go语言之GORM框架(二) ——GORM的单表操作

前言 在上一篇文章中&#xff0c;我们对Gorm进行了介绍&#xff0c;而在这一篇文章中我们主要介绍GORM的单表查询与Hook函数,在进行今天的内容之前我们先事先说明一下&#xff0c;下面我们对单表进行操作的表结构如下&#xff1a; type Student struct {ID uint gorm:&qu…

贪心-AcWing 1522. 排成最小的数字-XMUOJ石板序列

题目 思路 getline() 是 C 标准库中的一个函数&#xff0c;用于从输入流中读取一行文本&#xff0c;并将其存储为字符串。它可以从标准输入、文件流、字符串流等不同类型的输入流中读取数据。C中istringstream、ostringstream、stringstream详细介绍和使用_c istringstream-CS…

智能合约语言(eDSL)—— 并行化方案 2

这个并行算法最初其实是在aptos上实现的&#xff0c;aptos上使用的是move虚拟机&#xff0c;后来我把它移植到我们链上了&#xff0c;但是wasm虚拟机。还是费了不少事情。 目前evm并行也比较火&#xff0c;像monad&#xff0c;sei等。经过调研发现&#xff0c;其实evm的并行&am…

代码随想录|Day42|动态规划 part07|● 70. 爬楼梯 (进阶)● 322. 零钱兑换 ● 279.完全平方数

70. 爬楼梯 &#xff08;进阶&#xff09; 322. 零钱兑换 class Solution: def climbStairs(self, n: int) -> int: if n < 1: return n dp [0] * (n 1) dp[0] 0 dp[1] 1 dp[2] 2 for i in range(3, n 1): dp[i] dp[i - 1] dp[i - 2] return dp[n] 279.完全平方数…