原理
在公网中,设备只根据外层VLAN Tag对报文进行转发,并将报文的源MAC地址表项学习到外层Tag所在VLAN的MAC地址表中,而用户的私网VLANTag在传输过程中将被当做报文中的数据部分来进行传输。QinQ使得运营商可以用一个VLAN为含有多个VLAN的用户网络服务。举例来说,用户网络A的私网VLAN为VLAN1~10,用户网络B的私网为VLAN1~20。运营商为用户网络A分配的VLAN为VLAN3,为用户网络B分配的VLAN为VLAN 4。当用户网络A的带VLAN Tag的报文进入运营商网络时,报文外面会被封装上一层VLAN ID为3的VLAN Tag;当用户网络B的带VLAN Tag的报文进入运营商网络时,报文外面会被封装上一层VLAN ID为4的VLAN Tag。这样,不同用户网络的报文在公网传输时被完全分开,即使两个用户网络的VLAN范围存在重叠,在公网传输时也不会产生混淆。
802.1Q中定义的Tag域只有12个比特用于表示VLAN ID,所以设备最多可以支持4094个VLAN。而在实际应用中,尤其是在城域网中,需要大量的VLAN来隔离用户,4094个VLAN远远不能满足需求。因此诞生了QinQ技术
QinQ报文有固定的格式,就是在802.1Q的标签之上再打一层802.1Q标签,QinQ报文比正常的802.1Q报文多4个字节。这4个字节用作外层标签,即运营商网络的公网VLAN Tag。原802.1Q的Tag用作内层标签,即私网VLAN Tag
在QinQ封装中,各个设备厂商的内层TPID(Tag Protocol Identifier,标签协议标识)(即内层Etype)的取值为0x8100,但是对于外层TPID(即外层EType)的取值,各个厂商所使用的值可以是不相同的。
基本QinQ
基于端口方式实现。开启端口的基本 QinQ功能后,当该端口接收到报文,设备会为该报文打上本端口缺省 VLAN的 VLAN Tag。如果接收到的是已经带有 VLAN Tag的报文,该报文就成为双 Tag的报文;如果接收到的是不带 VLAN Tag的报文,该报文就成为带有端口缺省 VLAN Tag的报文。
灵活QinQ
灵活 QinQ 是对 QinQ 的一种更灵活的实现,它是基于端口与 VLAN 相结合的方式实现的,可以实现以下功能:
为具有不同内层 VLAN ID的报文添加不同的外层 VLAN Tag。
指定外层标签的User Priority
指定外层标签的TPID(即外层EType)
基本QinQ:对进入二层QinQ接口的所有帧都加上相同的外层Tag。
灵活QinQ:对进入二层QinQ接口的帧,可以根据不同的内层Tag而加上不同的外层Tag,对于用户VLAN的划分更加细致。
配置基本QinQ(二层):
如下图,通过配置基本QinQ,实现客户网络在运营商网络中的传输。
这里写图片描述
图:基本QinQ配置拓扑
配置文件:
LSW1和LSW4配置相同:
<SW1>dis current-configuration
#
sysname SW1
#
vlan batch 10 20
#
interface GigabitEthernet0/0/1
port link-type access
port default vlan 10
#
interface GigabitEthernet0/0/2
port link-type access
port default vlan 20
#
interface GigabitEthernet0/0/3
port link-type trunk
port trunk allow-pass vlan 10 20
#
LSW3和LSW4配置相同:
[SW2]dis current-configuration
#
sysname SW2
#
vlan batch 100
#
interface GigabitEthernet0/0/1
port link-type dot1q-tunnel //使能二层QinQ功能
port default vlan 100 //划分接口到VLAN100
#
interface GigabitEthernet0/0/2
port link-type trunk
port trunk allow-pass vlan 100
#
配置灵活QinQ(二层):
拓扑如上,LSW1和LSW4配置同上。
LSW2和LSW3配置如下:
[SW2]dis current-configuration
#
sysname SW2
#
vlan batch 100 200
#
interface GigabitEthernet0/0/1
qinq vlan-translation enable
//开启QinQ的VLAN转换功能
port hybrid untagged vlan 100 200
//定义接口出方向剥离VLAN100和VLAN200的标签
port vlan-stacking vlan 10 stack-vlan 100
//接口收到来自VLAN10的数据帧后叠加一层VLAN100的外层标签
port vlan-stacking vlan 20 stack-vlan 200
//接口收到来自VLAN20的数据帧后叠加一层VLAN200的外层标签
#
interface GigabitEthernet0/0/2
port link-type trunk
port trunk allow-pass vlan 100 200
#
原文地址:https://blog.51cto.com/13562306/2445294