PS:前天晚上看了一篇关于MPLS的文章,里面提到华为S8016 QinQ,不知道什么意思,只是猜到它可能也是一种新型的Vlan技术,今天回学校上网找到了关于华为S8016 QinQ的资料。
一、概述

QinQ是对基于802.1 Q封装的隧道协议的一种形象化的称呼,其核心思想是将用户私网VLAN tag封装到公网VLAN tag上,报文带着两层tag穿越服务商的骨干网络,从而为用户提供一种较为简单的二层***隧道。QinQ协议是一种简单而易于管理的协议,它不需要信令的支持,仅仅通过静态配置即可实现,特别适用于小型的,以三层交换机为骨干的企业网或小规模城域网。

近年来,随着三层交换机的不断成熟和大量应用,许多企业网和小型城域网用户都倾向于使用三层交换机来搭建骨干网,由于以下三个原因,这些用户一般都不愿意使用基于MPLS或者IP协议的***:

配置、维护工作相对比较繁杂;
许多厂商的三层交换机不支持MPLS功能,如果用户搭建基于MPLS的***,势必要淘汰这些设备,浪费资源;
支持MPLS功能的单板一般价格昂贵,小型用户难以承受。
Quidway S8016(以下简称S8016)的QinQ特性正好满足了这部分用户的需求,它提供了一种廉价、简洁的二层***解决方案,越来越多的小型用户倾向于使用该功能构建自己的***网络。

QinQ协议在解决小型城域网或企业网方案时,具有以下优点:

可以解决日益紧缺的公网VLAN ID资源问题;
用户可以规划自己的私网VLAN ID,不会导致与公网VLAN ID冲突;
提供一种较为简单的二层***解决方案;
使用户网络具有较高的独立性,在服务提供商升级网络时,用户网络不必更改原有的配置。
二、QinQ的基本原理



图1 基于802.1 Q协议的互联模式

图1为基于传统的802.1Q协议的网络,假设某用户的网络1和网络2位于两个不同地点,并分别通过服务提供商的PE1、PE2接入骨干网,如果用户需要将网络1的VLAN200-300和网络2的VLAN200-300互联起来,那么必须将CE1、PE1、P和PE2、CE2的相连端口都配置为 Trunk属性,并允许通过VLAN200-300,这种配置方法必须使用户的VLAN在骨干网络上可见,不仅耗费服务提供商宝贵的VLAN ID资源(一般只有4094个VLAN ID资源),而且还需要服务提供商管理用户的VLAN号,用户没有自己规划VLAN的权利。

为了解决上述问题,QinQ协议向用户提供一个唯一的公网VLAN ID,将用户私网VLAN tag封装在这个新的公网VLAN ID中,依靠它在公网中传播,用户私网VLAN ID在公网中被屏蔽,从而大大地节省了服务提供商紧缺的VLAN ID资源,如图2所示。



图2 QinQ协议的典型组网图

与图1的配置不同,这里PE设备的端口不再需要Trunk VLAN200-300,而是配置成VLAN 3的接入端口,并使能QinQ功能。但是,CE端口仍然需要Trunk VLAN200-300,使CE、PE之间的连接成为一条非对称的连接(Asymmetrical Link)。

对此,公网只需要向用户分配一个VLAN号3,无论用户网内部规划了多少个私网VLAN ID,当带有tag的用户报文进入服务提供商的骨干网络时,都统一地强行插入新分配的公网VLAN号,通过该公网VLAN号穿过骨干网络,报文到达骨干网另一侧PE设备后,剥离公网VLAN tag,还原用户报文,然后再传送给用户的CE设备。因此,在骨干网中传递的报文具有两层802.1Q tag头,一个是公网tag,一个是私网tag,具体报文转发流程如下:

1、由于CE1的出端口为Trunk端口,因此用户发往PE1的报文均携带用户私网的VLAN tag(范围是200-300),报文如表1(a)所示。



表1(a)

2、进入PE1后,由于入端口为QinQ的接入端口,PE1不理会用户私网的VLAN tag,而是将入端口缺省VLAN 3的tag强行插入用户报文,如表1(b)。



表1(b)

3、在骨干网,报文沿着Trunk VLAN 3的端口传播,用户私网的tag在骨干网中保持透明状态,直至到达网络边缘设备PE2。

4、PE2发现与CE2相连的端口为VLAN 3的接入端口,按照传统802.1Q协议剥掉VLAN 3的tag头,恢复成用户的原始报文,然后发送给CE2,如表1(c)所示。



表1(c)

从转发流程可以看出,QinQ协议非常简洁,无需信令来维持隧道的建立,通过静态配置即可实现。

三、QinQ的典型组网应用

下面通过一个典型的组网方案来说明QinQ协议的应用。

如图3所示,该网有两个用户,用户1需要将自己在A点的VLAN 1-100和D点的VLAN 1-100连接起来,用户2需要将自己在B点的VLAN 1-200和C点的VLAN 1-200连接起来,传统的802.1Q组网是不可能实现这一需求的,因为两个用户所使用的VLAN ID号有冲突,但是QinQ协议可轻易地实现这一需求。



图3 QinQ的典型组网范例

在图3中,中间的网络为服务提供商的网络,它由四台S8016或其他支持QinQ协议的设备组成,通过环状连接实现备份链路,使能STP协议。这四台设备之间通过Trunk端口连接,可透传任意VLAN报文,为了达到自动VLAN学习的目的,还可启动GVRP协议。需要注意的是,所有这些二层协议只能在网络侧的端口使能,而不能在用户接入端口上使能,避免用户私有网络受到服务提供商网络的干扰。

用户1使用VLAN 30的QinQ端口进行接入,用户2使用VLAN 40的QinQ端口进行接入,保证它们在公网上通过Trunk端口进行传输,互不影响。

用户可在私网内部运行STP协议,实现链路备份。例如,用户1的A点使用了两条链路连到S8016,STP可自动地将一条链路断开,避免形成环路。注意,此时S8016的两个QinQ接入端口均不能使能STP协议,这是因为它们属于用户私网拓扑,与公网无关。

四、QinQ和VPLS协议的配合

VPLS(Virtual Private LAN Service)协议约定:一条VC链路只允许将用户分布在不同地点的两个VLAN连接起来,如果用户需要连接分布于异地的多个VLAN,则需要多条VC 连接。例如,图4中的VLAN 100和VLAN101,需要两条VC连接才能完成连接任务。如果用户网络中有几十个或上百个VLAN需要连接,那么耗费的VC资源将十分可观。

尽管S8016 VPLS可对两个具有不同VLAN ID号的VLAN实现连接,应用非常灵活,但在同一个PE上,不同用户的VLAN ID不能相同,否则会产生冲突,对VLAN的规划仍存在着一定的限制。

QinQ协议可以弥补这一缺陷。如图4所示,将PE1的用户接入端口配置为VLAN 2的QinQ接入端口,将PE2的用户接入端口配置为VLAN 3的QinQ接入端口,然后只需一条VC链路将两个VLAN连接起来,用户即可随意规划自己的VLAN,而不必顾及服务提供商。事实上,所有用户VLAN 的流量都从该VC链路通过,从而大大地节省了公网的VC资源。



图4 QinQ协议增强了VPLS功能

五、QinQ特性对QoS的支持

Quidway S8016的QinQ特性对QoS提供了有力的支持。

首先,在QinQ使能的情况下,S8016仍可根据用户报文的MAC地址、IP地址、端口号、公网VLAN ID等域进行复杂的流分类,分类过后的动作可以是丢弃、重定向,也可以根据用户的要求进行限流。

其次,QinQ完全支持802.1p的八个优先级。当报文从私网进入公网时,S8016可将用户私网tag上的802.1p优先级映射到公网tag上,从而保证用户报文能够在公网上获得统一的二层QoS保证。相反,当报文从公网进入用户私网时,S8016可将公网tag中的802.1p优先级反向映射到私网tag上,从而保证报文在私网上仍能得到QoS保证。

六、总结

从本文的阐述可以看出,QinQ协议不仅仅是一种二层隧道协议,而且配合S8016的其它特性,还可解决用户组网过程中遇到的大量问题。本文关于QinQ 应用的表述,仅仅限于冰山一角,如QinQ嵌套等大量应用,还有待于读者在实践中不断挖掘和发扬。可以说,小巧、简单的特性赋予了QinQ协议强大的生命力,相信在未来的网络中,QinQ的应用将越来越广泛。