QinQ
7.3.1 QinQ技术诞生的背景
——《华为交换机学习指南》
QinQ最初主要是为扩展VLAN ID空间而产生的,但随着城域以太网的发展以及运营商精细化运作的要求,QinQ的双层标签又有了进一步的使用场景。它的内、外层标签可以代表不同的信息,如内层标签代表用户,外层标签代表业务。另外,QinQ数据帧带着两层标签穿越运营商网络,内层标签透明传送,也可以看作是一种简单、实用的VPN技术。因此它又可以作为核心MPLS VPN在城域以太网VPN的延伸,最终形成端到端的VPN技术。由于QinQ方便易用的特点,现在已经在各运营商中得到了广泛的应用,如QinQ技术在城域以太网解决方案中和多种业务相结合。特别是灵活QinQ(Selective QinQ/VLAN Stacking)的出现,使得QinQ业务更加受到了运营商的推崇和青睐。
我们知道,普通VLAN中的一个VLAN标签是用来区分用户的,但如果想要同时区分用户和业务类型,那么怎么办呢?如图7-11是一个总公司下面连接了两个分支子公司,而各分支子公司中已对不同部门的员工采用了VLAN进行区分,但两个子公司的部门VLAN ID规划是重叠的。这样如果数据帧中只采用一层VLAN标签,总公司就无法区分数据是来自哪个子公司的也就无法针对不同子公司的数据进行任何处理了。
图7-11 QinQ典型应用示例
为了解决这个问题,我们可以设想在总公司的交换机上为各子公司创建了不同的VLAN。这样当连接对应子公司的总公司交换机端口收到数据帧后再在数据帧外面添加一层VLAN标签(此时数据帧中就有两层VLAN标签了,原来的VLAN标签称之为内层VLAN标签,新添加的称之为外层VLAN标签),如为子公司1和子公司2的数据帧分别添加的外层VLAN标签为VLAN 10和VLAN 20,这样就可实现在总公司中对来自不同子公司的数据进行区分了,也可以对来自这两个子公司的数据提供不同的服务,即差分服务了。
另外,在基于传统的802.1Q协议的二层局域网互联模式中,当两个用户网络需要通过服务提供商(ISP)互相访问时(如在城域以太网中),ISP必须为每个接入用户创建不同的VLAN。这种配置方法一方面使得用户的VLAN在骨干网络上可见,存在一定的安全隐患,同时因为一一对应的VLAN ID,也消耗了大量服务提供商的VLAN ID资源。这对较大的ISP来说是无法承受的,因为只有4094个VLAN ID可用),当接入的用户数目很多时可能使ISP网络的VLAN ID不够用。另外,采用这种普通VLAN部署方式下,不同的ISP接入用户就不能使用相同的VLAN ID,否则就无法实现不同接入用户间的隔离,这时用户的VLAN ID只能由ISP统一规划,导致用户没有自己规划VLAN的权利。
通过QinQ技术可以有效地解决以上问题,因为它可以为许多不同内层VLAN标签用户使用同一个外层VLAN标签进行封装,解决了ISP的VLAN ID资源不足的问题。另外,通过外层VLAN标签对内层VLAN标签的屏蔽作用,使得用户自己的内层VLAN ID部署可以由用户自己作主,而不必由ISP来统一部署。
这个双层VLAN标签可以当作单层VLAN标签使用,即仅使用新添加的外层公网VLAN标签,内层私网VLAN可以作为数据来传输,如在本章后面将要介绍的2 to 1的VLAN映射中;当然也可以作为双层VLAN标签来使用(如在本章后面将要介绍的2 to 2的VLAN映射中),整个数据帧中的VLAN标签由内、外双层VLAN标签共同决定,这样一来,就相当于可以使用的VLAN ID数量达到了4094×4094个了,以此来达到扩展VLAN空间的目的。通过这样的双层VLAN标签封装,可以使私网VLAN ID可以在公网上透传,既解决了用户VLAN ID的安全性问题和由用户自己规划私网VLAN ID的需求问题,又解决了ISP的VLAN ID空间不足的问题,因为在ISP中可以为需要相互访问的用户配置相同的外层VLAN,也只需为来自同一用户网络的不同VLAN提供一个VLAN ID。
7.3.2 QinQ封装和终结
QinQ是在传统802.1Q VLAN标签头基础上再增加一层新的802.1Q VLAN标签头,如图7-12所示。由此可知,QinQ帧比传统的802.1Q帧多了四个字节,即新增的802.1Q VLAN标签。
图7-12 传统802.1Q帧和QinQ帧格式比较
QinQ帧封装的过程就是把单层802.1Q标签的数据帧转换成双层802.1Q标签的数据帧。封装过程主要发生在城域网侧连接用户的交换机端口上进行的。根据不同的VLAN标签封装依据,QinQ可以分为“基本QinQ”和“灵活QinQ”两种类型。具体说明如下。
1. 基本QinQ封装
“基本QinQ封装”是将进入一个端口的所有流量全部封装一个相同的外层VLAN标签,是一种基于端口的QinQ封装方式,也称“QinQ二层隧道”。开启端口的基本QinQ功能后,当该端口接收到已经带有VLAN标签的数据帧时,则该数据帧就将封装成双层标签的帧;如果接收到的是不带VLAN标签的数据帧,则该数据帧将封装成为带有端口缺省VLAN的一层标签的帧。
从以上介绍可以看出,基本QinQ的VLAN标签封装不够灵活,很难有效地区分不同的用户业务,因为它对进入同一个交换机端口的所有数据帧都封装相同的外层VLAN标签。但在需要较多的VLAN时,可以使用这个基本QinQ功能,这样可以减少对VLAN ID的需求,因为进入同一个端口的所有数据帧都封装同一个外层VLAN标签。
如在图7-13所示的网络中,企业部门1(Department1)有两个办公地,部门2(Department2)有三个办公地,两个部门的各办公地分别和网络中的PE1、PE2相连,部门1和部门2可以任意规划自己的VLAN。这样,可在PE1和PE2上通过如下思路配置QinQ二层隧道功能,使得每个部门的各个办公地网络可以互通,但两个部门之间不能互通。
l 在PE1上,对于进入端口Port1和Port2的用户(都属于部门1)数据帧都封装外层VLAN 10,对于进入端口Port3中用户(属于部门2)数据帧都封装外层VLAN 20。
l 在PE2上,对于进入端口Port1和Port2的用户(都属于部门2)数据帧都封装外层VLAN 20。
l PE1上的端口Port4和PE2上的端口Port3允许VLAN 20的用户数据帧通过,以便实现连接在PE1的Port3上部门2的用户与连接在PE2的Port1和Port2上部门2的用户互通。
这种基本QinQ封装就相当于用一个外层的VLAN标签映射同类用户的多个内层VLAN标签,以减少ISP端设备VLAN ID的使用量。
图7-13 基本QinQ典型应用示例
2. 灵活QinQ封装
“灵活QinQ”是对QinQ的一种更灵活的实现,是基于端口封装与基于VLAN封装的结合方式。除了能实现所有基本QinQ的功能外,灵活QinQ对于同一个端口接收的数据帧还可以根据不同的内层VLAN标签执行不同的外层标签封装。它又可分为以下三个子类:
l 基于VLAN ID的灵活QinQ:它是基于数据帧中不同的内层标签的VLAN ID来添加不同的外层标签。即具有相同内层标签的帧添加相同的外层VLAN标签,具有不同内层标签的帧添加不同的外层VLAN标签。这就要求不同用户的内层VLAN ID或VLAN ID范围绝对不能重叠或交叉。华为S系列交换机中的S2700、S3700、S5700、S6700仅支持基于VLAN ID的灵活QinQ功能。
l 基于802.1p优先级的灵活QinQ:它是基于数据帧中不同的内层标签的802.1p优先级来添加不同的外层标签。即具有相同内层VLAN 802.1p优先级的帧添加相同的外层标签,具有不同内层VLAN 802.1p优先级的帧添加不同的外层标签。这就要求不同用户的内层VLAN的802.1p优先级或802.1p优先级范围绝对不能重叠或交叉。基于802.1p优先级的灵活QinQ在华为S系列交换机中仅S7700、S9300和S9700系列支持。
l 基于流策略的灵活QinQ:它是根据所定义的QoS策略为不同的数据帧添加不同的外层标签。基于流策略的灵活QinQ是基于端口与VLAN相结合的方式实现的,能够针对业务类型提供差别服务。基于流策略的灵活QinQ在华为S系列交换机中仅S7700、S9300和S9700系列支持。
以上三种灵活QinQ的配置方法将在本章后面具体介绍。
当同一用户的不同业务需要使用不同的VLAN ID时,可以根据VLAN ID区间进行分流。现假设PC上网的VLAN ID范围是101~200;IPTV的VLAN ID范围是201~300;大客户的VLAN ID范围是301~400。面向用户的端口在收到用户数据后根据用户VLAN ID范围,对PC上网业务封装上外层标签100,对IPTV封装上外层标签300,对大客户封装上外层标签500。
【说明】QinQ封装一般在交换式端口上进行,但也可以在路由子接口上进行(QinQ终结只能在路由子接口上进行)。此种方法可以通过一个子接口来透传多个标识用户的VLAN ID,这种子接口也叫QinQ Stacking子接口。这种封装方式也是基于流的QinQ封装方式,但QinQ Stacking子接口只能和L2VPN业务结合起来才有意义,不支持三层转发功能。
在如图7-14所示的网络中,企业的部门1有多个办公地,部门2也有多个办公地。部门1的网络中使用VLAN 2~VLAN 500;部门2的网络中使用VLAN 500~VLAN 4094。PE1的Port1端口会同时收到两个部门不同VLAN区间的用户数据帧。
图7-14 灵活QinQ典型应用示例
此时可根据图中标识的各办公地的用户VLAN ID范围在PE1和PE2上通过如下思路配置基于VLAN的灵活QinQ功能,使得每个部门的各个办公地网络可以互通,但两个部门之间不能互通。具体配置思路如下:
l 对于进入PE1的Port1端口的用户数据帧,依据其VLAN ID的不同添加对应的外层VLAN标签。如VLAN ID在2~500之间,则封装VLAN ID为10的外层标签;如VLAN ID在1000~2000之间,则封装VLAN ID为20的外层标签;
l 对于进入PE1的Port2端口的用户数据帧,如果VLAN ID在100~500之间,则封装VLAN ID为10的外层标签;
l 对于进入PE2的Port1端口的用户数据帧,如VLAN ID在1000~4094之间,则封装VLAN ID为20的外层标签;
l 对于进入PE2的Port2端口的用户数据帧,如果VLAN ID在500~2500之间,则封装VLAN ID为20的外层标签;
l 在PE1和PE2的Port3端口上允许VLAN 20的帧通过,以便实现连接在PE1的Port1端口下连接的部门2用户与连接在PE2的Port1和Port2的部门2的用户互通。
从以上可以看出,灵活QinQ比基本QinQ的外层标签封装更加灵活,可可以根据用户数据帧中的原来的VLAN ID范围来确定封装不同的外层标签,这样更有方便了对相同网络中不同业务的用户数据流提供差分服务。
3. QinQ/Dot1q终结子接口
QinQ/Dot1q终结是指设备对数据帧的双层或者单层VLAN标签进行识别,根据后续的转发行为对帧中的双层或者单层VLAN标签进行剥离,然后继续传送。也就是这些VLAN标签仅在此之前生效,后面的数据传输和处理不再依据帧中的这些VLAN标签。
【经验之谈】VLAN终结的实质包括两个方面:
l 对接口收到的VLAN报文,去除VLAN标签后进行三层转发或其他处理。从设备其它接口转发出去的报文是否带有VLAN标签由对应的端口类型及其数据发送规则决定。
l 对接口发送的报文,又将相应的VLAN标签信息添加到报文中后再发送。
终结一般在路由子接口上执行,即终结子接口,如我们在单臂路由中就要配置路由子接口的802.1Q的VLAN终结。如果路由子接口是对数据帧的单层VLAN标签终结,那么该子接口称为Dot1q 终结子接口;如果路由子接口是对数据帧的双层VLAN标签终结,那么该子接口称为QinQ终结子接口。QinQ终结子接口根据终结的用户VLAN标签的类型,通常分为两种子接口:
l 明确的QinQ终结子接口:两层VLAN标签为固定的值。
l 模糊的QinQ终结子接口:两层VLAN标签为范围值,即:终结的内、外层标签都为一个VLAN ID范围值。
QinQ的更多相关文章
- QinQ技术浅析
作者: | 上传时间:2009-11-16 | 关键字: QinQ技术(也称Stacked VLAN 或Double VLAN)是指将用户私网VLAN标签封装在公网VLAN标签中,使报文带着两 ...
- 灵活QinQ配置
华为交换机灵活QinQ配置列子 配置vlan2 为内层vlan vlan100 为外层vlan #用户端 Gi // qinq vlan-translation enable port hybrid ...
- QinQ封装及终结详解
以下内容摘自正在当当网.京东网.卓越网.互动出版网预售,即将正式发售的<华为交换机学习指南>一书(全书近千页).本书是由华为官方授权,国内第一本,也是唯一一本华为交换机权威学习指南,是华为 ...
- QinQ 简介
QinQ 是一种二层隧道协议,通过将用户的私网报文封装上外层 VLAN Tag,使其携带两层 VLAN Tag 穿越公网,从而为用户提供了一种比较简单的二层VPN隧道技术.QinQ 的实现方式可分为两 ...
- 华为Qinq的配置
作者:邓聪聪 qinq(dot1q in dot1q)是一种二层环境中的二层vpn技术,用于二层ISP网络将相同客户网络中的vlan帧,再打一层vlan-tag的手段实现同一个客户的不同站点之间的数据 ...
- Ethernet、VLAN、QinQ
以太网帧格式: 各字段解释: DMAC:目的MAC地址,该字段确定帧的接收者. SMAC:源MAC地址,该字段标识发送帧的工作站. Type:上层协议类型(0x0800:IP;0x0808:ARP;0 ...
- QinQ 技术解析
目录 1. 概述 2. QinQ 的产生背景 3. QinQ的作用及原理 4. QinQ 技术的优点 5. QinQ 的报文结构 6. QinQ的实现方式 (1) 基本QinQ (2) 灵活QinQ ...
- 使用eNSP配置QinQ
参考链接:https://blog.csdn.net/alone_map/article/details/52217094 本文主要记录使用华为eNSP模拟器来实现配置QinQ,并对QinQ的报文进行 ...
- EtherType
EtherType is a two-octet field in an Ethernet frame. It is used to indicate which protocol is encaps ...
随机推荐
- [原创]django+ldap+memcache实现单点登录+统一认证
前言 由于公司内部的系统越来越多,为了方便用户使用,通过django进行了单点登录和统一认证的尝试,目前实现了django项目的单点登录和非django项目的统一认证,中间波折挺多,涉及的技术包括dj ...
- 卷积神经网络提取特征并用于SVM
模式识别课程的一次作业.其目标是对UCI的手写数字数据集进行识别,样本数量大约是1600个.图片大小为16x16.要求必须使用SVM作为二分类的分类器. 本文重点是如何使用卷积神经网络(CNN)来提取 ...
- UITableViewCell单元格的删除、插入、移动
UITableViewDelegate的方法 设置编辑模式中得cell的编辑样式(删除或插入) - (UITableViewCellEditingStyle)tableView:( ...
- 让Lua支持Linq吧
第一次接触Linq是在使用C#的时候,这种语法,在处理列表数据非常方便.如果想了解Linq的更多内容可以百度一下Linq,不过你不了解也没关系,让我在Lua中给你展示一下Linq的魅力.简单点说,Li ...
- 关于c#在DataTable中根据条件删除某一行
我们经常会将数据源放在DataTable里面,但是有时候也需要移除不想要的行,下面的代码告诉你们 DataTable dts: DataRow[] foundRow; ...
- WebService 概念和工作原理(一)
今天我们一起来学习WebService.它到底是干啥用的? Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集) ...
- PHP HTTP请求
stream_context_create 1.curl仍然是最好的HTTP库,没有之一. 可以解决任何复杂的应用场景中的HTTP 请求2. 文件流式的HTTP请求比较适合处理简单的HTTP POST ...
- querySelector系列方法相比 getElementsBy 系列方法有什么区别?
querySelector 和 querySelectorAll 相比下面这些方法有什么区别? getElementsByTagName getElementsByClassName getElem ...
- 实现下来ScrollView放大轮播图
创建工程,创建一个UIScrollView属性,并遵循其协议: #define kWidth self.view.frame.size.width//屏幕宽 #define kHeight self. ...
- 自定义UITabBarController标签视图控制器
首先创建一个类,继承自UItabBarController 然后在.m文件中: 这里我有两个宏定义: #define WIDTH (myView.frame.size.width / 4) //我在写 ...