QinQ技术浅析
QinQ技术(也称Stacked VLAN 或Double VLAN)是指将用户私网VLAN标签封装在公网VLAN标签中,使报文带着两层VLAN标签穿越运营商的骨干网络,在公网中只根据外层VLAN标签传播,私网VLAN标签被屏蔽,这样,不仅对数据流进行了区分,而且由于私网VLAN标签被透明传送,不同的用户VLAN标签可以重复使用,只需要外层VLAN标签的在公网上唯一即可,实际上也扩大了可利用的VLAN标签数量。
QinQ的标准是IEEE802.1ad(IEEE802.1ad的全称是:Virtual Bridged Local Area Networks Amendment 4: Provider Bridges)该标准是在2006年5月份才形成正式标准的,所以当前我们常见的各厂商实现的QinQ和该标准有较大的不同,但各厂商的实现均大同小异。
本文分为两大部分,第一部分主要介绍当前常见的QinQ的各个方面,第二部分介绍802.1ad以及该标准同当前我们所常见的QinQ的区别。
1 QinQ
1.1 QinQ的产生
1、随着三层交换机的不断成熟和大量应用,许多企业网和小型城域网用户都倾向于使用三层交换机来搭建骨干网,由于以下三个原因,这些用户一般都不愿意使用基于MPLS或者IP协议的VPN:
- 配置、维护工作相对比较繁杂;
- 许多厂商的三层交换机不支持MPLS功能,如果用户搭建基于MPLS的VPN,势必要淘汰这些设备,浪费资源;
- 支持MPLS功能的单板一般价格昂贵,小型用户难以承受。
而QinQ可以提供一种廉价、简洁的二层VPN解决方案,不需要信令协议的支持,可以通过纯静态配置实现,而且只需要网络边缘设备支持QinQ,内部只需要可以支持802.1Q的设备即可,所以越来越多的小型用户倾向于使用该功能构建自己的VPN网络。
2、运营商在通过Ethernet提供Internet接入业务时需要对客户标识,做到精细化管理,而且随着新业务的开展(如Triple-Play、Wholesale、VPN),运营商还需要对业务进行细分,以区别提供不同的管道、QoS策略。原有基于802.1Q只有4096个vlan标识不能满足这样的需要,QinQ正好可以扩展这样的标识,同时还可以利用不同的VLAN来区分运营商的服务和不同的客户。利用QinQ提供接入时具用以下的优点:
- · 可以解决日益紧缺的公网VLAN ID资源问题;
- · 用户可以规划自己的私网VLAN ID,不会导致与公网VLAN ID冲突;
- · 提供一种较为简单的二层VPN解决方案;
- · 使用户网络具有较高的独立性,在服务提供商升级网络时,用户网络不必更改原有的配置;
- · 可以按不同层次的VLAN ID来区分不同的业务;
- · QinQ技术上完全可以多层嵌套,没有限制,仅受Ethernet报文长度的限制,具有很好的扩充性。
本文分为两个部分,第一部分介绍当前常见的QinQ的实现及应用,第二部分介绍802.1ad的基本概念和知识以及同常见的QinQ的异同。
1.2 QinQ报文封装
QinQ的报文封装就是在原有802.1Q报文中的TAG头上再加上一层TAG封装,用来扩展VLAN的范围,如图1所示:
图1 QinQ报文封装
1.3 QinQ的报文转发过程
在通过QinQ实现简单的二层VPN过程中报文是按如下方式转发:
图2 QinQ报文转发过程
图2中在运营商网中使用VLAN20来标识客户A、VLAN30标识客户B,当客户A的报文到达运营商的边缘交换机时,边缘交换机均给客户A的报文打上一个外层标签(VLAN20),然后在VLAN20中转发,不会转发到VLAN30,报文在离开运营商网络时再剥离掉外层的标签,转发到用户A的网络,从而实现一个简单二层VPN功能。
1.4 QinQ报文的TPID值可调功能
TPID(Tag Protocol Identifier,标签协议标识)是VLAN Tag中的一个字段,IEEE 802.1Q协议规定该字段的取值为0x8100。IEEE 802.1Q协议定义的以太网帧的Tag报文结构如下:
图3 IEEE 802.1Q报文结构
通常在QinQ中设备的内外层标签的TPID值均采用协议规定的0x8100,但是某些厂商的设备将QinQ报文外层Tag的TPID值设置为0x9100或0x9200,为了和这些设备兼容,并提供较高的灵活性,我司支持QinQ功能的交换机基本上均提供了QinQ报文TPID值可调功能(需要注意有的设备整机支持,有的设备是端口支持),能修改QinQ设备的外层标签的TPID值。(在本文的802.1ad部分我们将会看到802.1ad所规定的TPID为0x88a8,所以当设备同标准802.1ad设备作QinQ对接时也需要TPID可调功能)。
1.5 灵活QinQ(Selective QinQ)
在前面我们所讲的QinQ中,通常是以物理端口来划分用户或用户网络,当多个不同用户以不同的VLAN接入到同一个端口时则无法区分用户。另外前面的QinQ方案是一种简单二层VPN的应用,在运行营商接入环境中往往需要根据用户的应用或接入地点(设备)来区分用户,基于这种应用产生了灵活QinQ方案。
简单讲灵活QinQ就是根据用户报文的Tag或其他特征(IP/MAC等),给用户报文打上相应的外层Tag,以达到区分不同用户或应用的目的。
当前灵活QinQ主要应用在运营商的接入网络中,在运营商网络中给接入用户分配一个VLAN,以达到便于问题追踪和防止不同用户间互访,用外层标签区分用户的应用;或在接入的环境中用外层标签来区分不同的接入地点,用内外两层标签唯一标识出一个接入用户。在这样的应用中需要BRAS/SR设备支持QinQ的应用(能够终结双Tag)。
下面我们以S9500为例,看一下灵活QinQ的应用场景:
在S9500上实施QinQ,并在S9500上进行业务分流,分流的方式是利用灵活QinQ功能,灵活QinQ分流的依据有下面几种:
1) 根据端口的VLAN区间分流:比如PC的VLAN范围1~1000,STB的VLAN范围1001~2000,网吧的VLAN范围2001~3000;
2) 根据报文的协议号分流:比如PC采用PPPoE、STB采用IPoE,这些终端都通过一个VLAN上行,可以根据PPPoE和IPoE报文不同的协议号作为QinQ的分流依据;
3) 根据报文的目标IP地址分流:对于相同源IP地址,相同报文封装不同的业务应用报文,比如PC上的SoftPhone产生的报文,需要根据报文目的IP地址实施灵活QinQ进行业务分流;
4) 根据QinQ的内层标签的区间,在某些级联交换机的组网模式中,下连的交换机已经实施了基于端口的QinQ,为了实现业务分流,可以根据QinQ的内层VLAN标签的区间实施灵活QinQ进行业务分流。 上述应用场景可以用图4来直观的加以描述:
图4 灵活QinQ对多业务的识别标记
1.6 BPDU Tunnel(L2 Protocol Tunnel)
QinQ网络中,运营商网络对客户透明,当客户和运营商网络之间的连接有冗余时必然导致环路问题,如QinQ应用示意图2中的A客户。这就需要运营商网络能透明传输STP/RSTP/MSTP报文,这样客户可以跨运营商网络构建自己的STP树,切断冗余链路。另外为了保证客户全网VLAN配置的一致性,动态VLAN协议如GVRP、VTP等也要求通过运营商网络透传,如果客户使用GMRP作组播应用的话,GMRP报文也要求透传。同时在透传这些报文时,需要区分开不同用户的二层协议报文。
我们知道以上这些BPDU报文是桥设备的二层控制报文(基本上是以LLC封装的),是与设备全局相关的,不带VLAN Tag,所以需要一种机制来传输用户的二层控制报文,从而引入了BPDU Tunnel (Cisco:Layer 2 Protocol Tunneling)的概念,通过Tunnel来传播用户的二层控制报文。
通常BPDU Tunnel是这样实现的:当Tunnel端口收到一个用户的BPDU后,把目的MAC修改为一个组播MAC,然后再给协议报文打上用户所属VLAN的Tag信息,组播MAC保证报文在VLAN内广播,同时标识这个报文是个BPDU-Tunnel报文,交换机在收到这个报文时上送CPU处理,还原其BPDU身份,并根据报文中用户所属的VLAN信息,把报文送到相应的客户网络。
当前我司的实现就采取了上述这种方法,收到用户的BPDU报文后,给这个报文的目的MAC修改为:01-00-0c-cd-cd-d0,再加上运营商分配该用户的VLAN Tag,如图5所示:
图5 BPDU-Tunnel报文封装
2 802.1ad
IEEE 802.1ad的全称是“Virtual Bridged Local Area Networks Amendment 4: Provider Bridges”,该协议的目标是业务提供商在为客户提供业务时使客户间的服务相互独立,没有相互依赖关系,同时尽量做到业务提供商透明地为客户提供业务。该标准描述了业务提供商(运营商)如何利用和扩展802.1Q在一个统一的网络中为相互独立的客户提供以太网业务。
2.1 标准化过程
该协议于2002年12月第一稿,中间历经了多个Draft,并于2006年5月形成正式标准(Amendment to IEEE Std 802.1Q-2005)。文档可从这里获得:http://tech/article.php/4360;
2.2 基本概念
• C-VLAN:Customer VLAN,是用户网络内部使用的VLAN;
• S-VLAN:Service VLAN,服务提供商网络中使用的VLAN,该VLAN标识VPN用户或者是用户的业务;
• Customer Bridge:Customer网络中的Bridge,只能识别C-VLAN;
• Provider Bridge:服务提供商网络中的Bridge,根据处理内容的不同又分为S-VLAN Bridge和Provider Edge Bridge。其中S-VLAN Bridge只能识别S-VLAN; Provider Edge Bridge可以同时识别C-VLAN和S-VLAN;
• C-VLAN Component:在Bridge内可识别、插入、删除C-VLAN的实体,每个端口一个,对C-VLAN的操作互相独立(两个端口上接收到相同的C-VLAN,但由于属于不同的客户最后的处理结果会不同);
• S-VLANComponent:在Bridge内可识别、插入、删除S-VLAN的实体,由于在一个Bridge内不存在相同的S-VLAN属于不同服务提供商的情况,因此在一个桥内只有一个S-VLAN的实体。
2.3 报文格式
802.1ad的报文格式,基本同前面我们所讲的QinQ报文格式一致,主要的区别就是802.1ad中重新定义了TPID的值和把原来的CFI位修改为DEI(丢弃标识)位。
图6 802.1ad报文封装
同前面所述的QinQ相比,在802.1ad中明确规定了用户报文和运营商报文的TPID值,从而可以简单的区分用户报文和运营商报文:
Tag Type |
Name |
Value |
C-VLAN Tag |
IEEE 802.1Q Tag Protocol Type(802.1Q Tag Type) |
81-00 |
S-VLAN Tag |
IEEE 802.1Q Server Tag Type(802.1Q S-Tag Type) |
88-a8 |
表格 1 802.1ad Ethernet Type allocations
同时标准中对S-VLAN的TCI位修改为DEI(Drop Eligible Indicator),丰富了QoS特性,当用户报文进入运营商网络时会打上以88a8标识的外层标签,在离开运营商网络时会剥离这个外层标签。
2.4 802.1ad如何解决Tunnel问题
在传统的QinQ Tunnel中是通过修改原协议报文的目的地址及加上用户所属VLAN标识来传递用户L2协议报文的(这样做的缺点在于需要在边缘设备上对报文进行修改加重设备CPU的负担)。
在802.1ad中为C-VLAN及S-VLAN分配了不同的保留地址,在S-VLAN中处理C-VLAN中的协议报文和处理普通的数据报文一样,从而不需要Tunnel就可以透明传输用户二层协议报文。
Assignment |
Value |
Bridge Group Address |
01-80-C2-00-00-00 |
IEEE 802.3 Full Duplex PAUSE operation |
01-80-C2-00-00-01 |
IEEE 802.1X PAE address |
01-80-C2-00-00-03 |
Provider Bridge Group Address |
01-80-C2-00-00-08 |
Provider Bridge GVRP Address |
01-80-C2-00-00-0D |
IEEE 802.1AB Link Layer Discovery Protocol multicast address |
01-80-C2-00-00-0E |
表格 2:保留的地址
Spanning Tree Protocol
Provider网络的STP操作和Customer网络的STP操作完全独立运行,相互不关联。在Provider网络内部采用不同的Bridge Group Address(01-80-C2-00-00-08),对于用户的BPDU报文(01-80-C2-00-00-00)作为普通数据报文透传,不进行识别和处理。Provider网络边缘的C-VLAN component端口可以参与用户STP拓扑的计算和用户BPDU的处理。
GVRP
Provider网络的GVRP操作和Customer网络的GVRP的操作完全独立运行,相互不关联。在Provider网络内部采用不同的Provider Bridge GVRP Address(01-80-C2-00-00-0D),对于用户GVRP报文(01-80-C2-00-00-21)以及其他的GARP保留地址作为普通数据报文透传,不进行识别和处理。Provider网络边缘的C-VLAN component端口可以参与用户的GARP报文的处理。
2.5 802.1ad对灵活QinQ的支持
802.1ad对灵活QinQ的支持同当前常见的灵活QinQ基本一致,在802.1ad中提供了两种确定用户所属S-VLAN的方式:
1、基于端口(Port-based service interface),在这种模式下用户是根据接入的端口来选择S-VLAN(Service Instance)的
2、基于C-VLAN(C-Tagged service interfaces),在这种模式下是根据用户使用的C-VID来先择S-VLAN(Service Instance),即同当前我们所见的灵活QinQ类似。
QinQ技术浅析的更多相关文章
- [转]STUN和TURN技术浅析
[转]STUN和TURN技术浅析 http://www.h3c.com.cn/MiniSite/Technology_Circle/Net_Reptile/The_Five/Home/Catalog/ ...
- 爬虫技术浅析 | WooYun知识库
爬虫技术浅析 | WooYun知识库 爬虫技术浅析 好房通ERP | 房产中介软件最高水准领导者 undefined
- 爬虫技术浅析 | z7y Blog
爬虫技术浅析 | z7y Blog 爬虫技术浅析
- 手机微硬盘读取速度>50MB/s eMMC技术浅析
转载:http://mobile.zol.com.cn/296/2968659_all.html#p2968659 手机微硬盘读取速度>50MB/s 在开始今天的话题之前,请大家随笔者一起时光倒 ...
- SafeSEH原理及绕过技术浅析
SafeSEH原理及绕过技术浅析 作者:magictong 时间:2012年3月16日星期五 摘要:主要介绍SafeSEH的基本原理和SafeSEH的绕过技术,重点在原理介绍. 关键词:SafeSEH ...
- QinQ 技术解析
目录 1. 概述 2. QinQ 的产生背景 3. QinQ的作用及原理 4. QinQ 技术的优点 5. QinQ 的报文结构 6. QinQ的实现方式 (1) 基本QinQ (2) 灵活QinQ ...
- STUN和TURN技术浅析
转自:http://blog.csdn.net/yu_xiang/article/details/9227023 在现实Internet网络环境中,大多数计算机主机都位于防火墙或NAT之后,只有少部分 ...
- 分布式网站架构后续:zookeeper技术浅析
Zookeeper是hadoop的一个子项目,虽然源自hadoop,但是我发现zookeeper脱离hadoop的范畴开发分布式框架的运用 越来越多.今天我想谈谈zookeeper,本文不谈如何使用z ...
- java编译期优化与执行期优化技术浅析
java语言的"编译期"是一段不确定的过程.由于它可能指的是前端编译器把java文件转变成class字节码文件的过程,也可能指的是虚拟机后端执行期间编译器(JIT)把字节码转变成机 ...
随机推荐
- css3新单位学习
vw,vh,vmin,vmax vw 1vw = 视窗width*1% vh 1vh = 视窗heihgt*1% 如果视窗的宽度小于高度,1vmin = 1vw,如果视窗宽度大于高度,1vmin = ...
- 五步掌握OOM框架AutoMapper基本使用
本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文地址 www.cnblogs.com/tdws 写在前面 OOM顾名思义,Object-Object-Mapping实体间相互转换,Aut ...
- [译]Google官方关于Android架构中MVP模式的示例
概述 该示例(TODO-MVP)是后续各种示例演变的基础,它主要演示了在不带架构性框架的情况下实现M-V-P模式.其采用手动依赖注入的方式来提供本地数据源和远程数据源仓库.异步任务通过回调处理. 注意 ...
- java范型集合中的成员排序
范型集合中的类是JsonObject,不是自定义类,如果是自定义类就直接取要比较的字段值. ArrayList<JSONObject> TList = new ArrayList<J ...
- 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署
少啰嗦,直接装 看过上一篇分布式文件系统 - FastDFS 简单了解一下的朋友应该知道,本次安装是使用目前余庆老师开源的最新 V5.05 版本,是余庆老师放在 Github 上的,和目前你能在网络上 ...
- quartz CronExpression表达式
一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素.按顺序依次为1.秒(0~59)2.分钟(0~59)3.小时(0~23)4.天(月)(0~31,但是你需要考虑你月的天数)5.月(0~11 ...
- composer 出现 configuration does not allow connection to http.......
出现这样的问题是,镜像使用的是http,而原地址是需要https,所以配置下关掉https就好了. 我们来个全局设置的方法: composer config -g secure-http false ...
- NodeJs端口被占用的情况
在NodeJs运行的时候,我们往往会遇到一个问题:“端口被占用”,这个问题,我们的处理办法有哪些呢? 这里我只介绍一下linux下的方法: 1.使用nodeme(忘记是不是这个啦,回去查下,这个要安装 ...
- HTTP、HTTP2
HTTP.HTTP2.0.SPDY.HTTPS 你应该知道的一些事 原文链接:http://www.alloyteam.com/2016/07/httphttp2-0spdyhttps-readi ...
- 检索Google Maps地图位置(小训练)
名称:检索地图位置 内容:地图初期显示和检索显示 功能:根据条件检索地图的经度与纬度 1.在这之前我们需要创建一个表(Accoun__c),添加一个重要的字段地理位置情報,它会默认的给你两个字段经度和 ...