一、概述
由于VLAN本身的基本特性的限制,致使在VLAN的使用过程中又遇到了一些问题。如在普通VLAN间的通信过程中需要为每个VLAN配置一个VLANIF接口IP地址,同时需要为每个VLAN单独使用一个IP子网,这样就会导致整个公司网络的IP子网数可能非常多,最终也将导致IP地址浪费的现象非常严重。
为了解决这一问题,就诞生了一种可以聚合多个不配置VLANIF接口的超级VLAN(Super-VLAN)技术,即本章就是介绍VLAN聚合(VLAN Aggregation)技术,这个超级VLAN可以包含多个位于同一IP子网的VLAN,并且只需要使用一个VLANIF接口IP地址作为各成员VLAN的共同网关即可实现同一超级VLAN内不同成员VLAN间,以及与外部网络间的通信。
华为S系列交换机对本项拓展VLAN特性的支持情况比较复杂,如S1700系列全部不支持、S2700系列中仅S2700EI子系列在部分VRP版本中支持,其他系列也有许多子系列、许多VRP版本不支持。
1、普通VLAN部署的不足
在普通的VLAN部署中,一般是采用一个VLAN对应一个三层VLANIF逻辑接口的方式实现VLAN间的三层互通。结果就导致了IP地址的浪费,因为这样部署后每个VLAN都需要使用一个独立的IP子网,而且要为每个VLAN配置一个带有IP地址的VLANIF接口。
如下图1所示,在一个三层交换机上部署了3个VLAN,并为它们创建了三层VLANIF接口,各配置了一个IP地址,以便实现这3个VLAN间的三层通信。现如果VLAN2中预计未来有10个主机地址的需求,则至少要为其分配有给子网掩码长度是28的子网1.1.1.0/28,同时需要为其配置一个缺省网关地址,即VLANIF2的IP地址(假设为1.1.1.1),这样一来该子网中可以分配给主机使用的Ip地址共13个,尽管VLAN2只需要10个地址。
图1
同理,如果VLAN3中预计未来有5个主机地址的需求,至少需要分配一个子网掩码长度是29的子网1.1.1.16/29,也要配置一个缺省网关地址,即VLANIF3的IP地址(假设为1.1.1.17)。如果VLAN4中预计未来只有1个主机,则至少要分配一个子网掩码长度是30的子网1.1.1.24/30,也要配置一个缺省网关地址,即VLAN4的IP地址(假设为1.1.1.25)。此时,这3个VLAN所属子网的IP地址分配如下表格所示
VLAN | 子网 | 网关地址 | 可用地址数 | 可用主机数 | 实际需求 |
2 | 1.1.1.0/28 | 1.1.1.1 | 14 | 13 | 10 |
3 | 1.1.1.16/29 | 1.1.1.17 | 6 | 5 | 5 |
4 | 1.1.1.24/30 | 1.1.1.25 | 2 | 1 | 1 |
从以上介绍可用看出,这3个VLAN一共只需要16个主机IP地址,但是按照以上普通VLAN的编址方式,即使最优化的方案也需要占用28个IP地址,浪费了将近一半的IP地址。而且如果VLAN2后来并没有10台主机。而实际接入了3台主机,那么多出来的地址也会因不能再被其他VLAN使用而浪费掉。
另外,这种划分也给后续的网络升级和拓展带来了很大不便。假设VLAN4今后需要再增加两台主机,但1.1.1.24/30后面的地址已经分配给了其他VLAN,如果又不想改变已经分配的IP地址,则只能再给VLAN4的新用户重新分配一个29位掩码的子网和一个新的VLAN。这样VLAN4中的客户虽然只有3台主机,但是却被分配在两个子网中,并且也不在同一个VLAN内,不利于网络管理。
综上所述,普通VLAN配置方式下,很多IP地址被子网网络地址、子网定向广播地址、子网缺省网关地址(就是各VLANIF接口的IP地址)消耗掉,而不能用于VLAN内的主机。同时,这种地址分配的约束也降低了编址的灵活性,使许多闲置的地址也被浪费掉。为了解决这一问题,就诞生了本章所要介绍的技术--VLAN Aggregation(VLAN聚合)。
2、VLAN聚合的原理
VLAN聚合技术就是把多个不配置三层VLANIF接口、同处于一个IP子网的VLAN(称之为Sub-VLAN)当作一个大的、配置了三层VLANIF接口的VLAN(称之为Super-VLAN)的成员。这些同一IP子网下的多个Sub-VLAN间可用实现用户的二层隔离,同时这些成员VLAN间又可通过上层的Super-VLAN配置的三层VLANIF接口IP地址作为缺省网关在各成员VLAN间,以及与网络中其他VLAN间进行通信。
从上可以看出,在VLAN聚合中涉及到以下两类VLAN。
- Super-VLAN:可以把它看成是一个大的VLAN,或者说它是Sub-VLAN的上层VLAN。但它与通常意义上的VLAN不同,因为它的成员就是下面要介绍的Sub-VLAN,而不是交换机端口(里面不能添加成员交换机端口),但需要创建三层VLANIF接口,并配置IP地址。每个VLAN聚合中只能有一个Super-VLAN。
- Sub-VLAN:它是Super-VLAN的成员,每个VLAN聚合中可以有一个或多个Sub-VLAN。各Sub-VLAN成员都同处于一个IP子网中,用来对同一IP子网中的不同用户进行二层隔离,但不能创建三层VLANIF接口。这些Sub-VLAN中的成员就是各用户所连接的交换机端口,但各个Sub-VLAN中的用户网关IP地址都是Super-VLAN的VLANIF接口IP地址,以实现Sub-VLAN成员间,以及与外部网络的三层通信。
一个Super-VLAN可以包含一个或多个Sub-VLAN,它们的关系可以用下图来表示。在同一个Super-VLAN中,无论主机属于哪一个Sub-VLAN,它的IP地址都在Super-VLAN的VLANIF接口IP地址所对应的IP子网内。这样各Sub-VLAN共用同一个三层VLANIF接口,既减少了一部分子网网络地址、子网缺省网关地址和子网定向广播地址的消耗,又实现了不同广播域(也就是各Sub-VLAN)使用同一IP子网地址的目的。消除了子网的差异,增加了编制的灵活性,减少了闲置地址的浪费。
图2
我们仍以上图1所示的例子进行说明。假设用户需要不变,仍旧是VLAN2预计未来有10个主机地址的需求,VLAN3预计未来有5个主机地址的需求,VLAN4预计未来有1个主机地址的需求。按照VLAN聚合的实现方式,新建VLAN10并配置位Super-VLAN,给其分配一个子网掩码长度是24的子网1.1.1.0/24,并配置其VLANIF接口IP地址为1.1.1.1,如下图所示。此时各Sub-VLAN(VLAN2、VLAN3、VLAN4)的IP地址分配表可见下表格
VLAN | 子网 | 网关地址 | 可用地址数 | 可用主机数 | 实际需求 |
2 | 1.1.1.0/24 | 1.1.1.1 | 10 | 1.1.1.2~1.1.1.11 | 10 |
3 | 1.1.1.0/24 | 1.1.1.1 | 5 | 1.1.1.12~1.1.1.16 | 5 |
4 | 1.1.1.0/24 | 1.1.1.1 | 1 | 1.1.1.17 | 1 |
从图2可用看出,在VLAN聚合的实现中,各Sub-VLAN间的界线也不再是从前的子网界线了(因为它们同处于一个IP子网中),它们可用根据其各自主机的需求数目在Super-VLAN对应子网内灵活地划分地址范围。另外,VLAN2、VLAN3和VLAN4共用同一个IP子网(1.1.1.0/24)、同一个子网缺省网关地址(1.1.1.1)和同一个子网定向广播地址(1.1.1.255)。这样,普通VLAN实现方式中用到的其他子网网络地址(1.1.1.16、1.1.1.24)和子网缺省网关地址(1.1.1.17、1.1.1.25),以及子网定向广播地址(1.1.1.15、1.1.1.23、1.1.1.27)都可以用来作为主机IP地址使用了。
也正因如此,以上这3个VLAN一共需要16个IP地址,再加上子网网络地址(1.1.1.0)、子网缺省网关地址(1.1.1.1)和子网定向广播地址(1.1.1.255),一共用去了19个IP地址,该网段内仍剩余255-19=236个地址可用被任意Sub-VLAN内的主机使用,显得更加灵活更加使用。
二、Sub-VLAN通信原理
在VLAN聚合中,Super-VLAN和Sub-VLAN都存在一些特殊性,如Super-VLAN必须配置三层VLANIF接口,但不能有交换机端口成员
各个Sub-VLAN成员同处Super-VLAN的VLANIF接口IP地址所在的一共IP子网中,必须有交换机端口成员,但都不能配置三层的VLANIF接口。
这也造成了Sub-VLAN之间,或者与外部网络间的二、三层通信也存在一定的特殊性。
1、Sub-VLAN间的三层通信原理
VLAN聚合在实现了不同Sub-VLAN间共用一共IP子网地址的同时,也带来了Sub-VLAN间的三层转发问题。因为在普通VLAN实现方式中,VLAN间的主机可用通过各自不同的网关(即各自的VLANIF接口IP地址)进行三才能转发来达到互通的目的。但是在VLAN聚合方式下,由于同一个Super-VLAN内的所有主机使用的是同一个IP子网中的IP地址和同一个网关IP地址,即使是属于不同的Sub-VLAN的主机,所以这些主机彼此通信时只会进行二层转发,而不会通过网关进行三层转发。而实际上不同的Sub-VLAN的主机在二层是相互隔离的,这就造成了Sub-VLAN间无法实现二层和三层通信的问题。
解决以上问题的方法就是在作为这些Sub-VLAN网关的Super-VLAN的VLAN接口上启用Proxy ARP(ARP代理)功能。如果ARP请求是从一共网络的主机发往同一IP网段,但不在同一物理网络上的另一台主机(如VLAN聚合中的两个Sub-VLAN中的用户主机),那么连接这两个网络的设备(如VLAN聚合中的Super-VLANIF接口)就可以回答该ARP请求,这个过程称为ARP代理(Proxy ARP)。使这个VLANIF接口作为各Sub-VLAN中的主机间通信的代理ARP,代理发送ARP请求报文查找目的主机的MAC地址。
我们继续使用上图中的组网为例进行说明。假设Sub-VLAN2内的主机PC1与Sub-VLAN3内的主机PC2进行通信,在Super-VLAN10的VLANIF接口上启用Proxy ARP。PC1与PC2的通信过程如下
1、PC1将PC2的IP地址(10.1.1.12)和自己所在网段10.1.1.0/24进行比较,发现PC2和自己在同一个IP子网,但是PC1的ARP表中没有PC2的对应表项。于是PC1发送了一个ARP广播报文,请求查找PC2的MAC地址。
2、网关SW1收到PC1的请求报文后,由于网关上使能了Sub-VLAN间的Proxy ARP功能,于是网关要代理源主机PC1使用ARP报文来查找目的主机PC2的MAC地址,暂不对所接收的来自PC1的ARP请求报文进行处理。
3、网关首先使用报文中的目的IP地址(PC2的IP地址)在本地路由表中查找,发现匹配了一条路由,下一跳为直连网段(VLANIF10的10.1.1.0/24),VLANIF10对应Super-VLAN10,于是Super-VLAN10中所有的Sub-VLAN接口代理PC1发送(并不是直接转发PC1发送的ARP请求报文)一个ARP广播报文,请求PC2的MAC地址。
4、PC2收到网关发送的ARP广播后,对网关发送的ARP请求报文进行拆包发现需要请求的对象是自己进行ARP应答,这样网关获知了PC2的MAC地址。此时,网关就可用对原来暂存的来自PC1的ARP请求报文进行应答把自己的MAC地址回应给PC1。
这样,PC1就认为目的IP地址(PC2的IP地址)对应的MAC地址就是网关的MAC地址了,之后要发给PC2的报文都先发送给网关(以网关MAC地址作为目的MAC地址),再由网关进行三层转发。
PC2发送报文给PC1的过程和上述的PC1发送报文给PC2的过程类似。
2、Sub-VLAN与外部网络的二层通信
我们知道,Super-VLAN与各个Sub-VLAN是作为一个整体与外部网络进行通信的,那么作为Super-VLAN成员的Sub-VLAN在实际的VLAN帧传输中又该如何识别和处理帧中的VLAN标签呢?原来,由于Super-VLAN中没有物理端口成员(也就是没有任何一个物理端口加入了Super-VLAN),所以在基于端口划分的VLAN(不能像基于MAC地址、IP子网、协议类型和策略的动态VLAN划分的VLAN,因为这些的VLAN中端口成员可动态加入)的二层通信中,无论是数据帧进入交换机端口还是从交换机端口发出,都不会又针对Super-VLAN的数据帧。
如下图1所示,在SW1上配置了Sub-VLAN2、Sub-VLAN3和Super-VLAN4,SW1的1和2号端口配置为Access接口,3号端口配置为Trunk接口,并允许VLAN2和VLAN3通过;SW2连接SW1的接口配置为Trunk接口,并允许VLAN2和VLAN3通过。从PC1进入SW1的报文会被打上VLAN2的Tag。在SW1中,这个Tag不会因为VLAN2是VLAN4的Sub-VLAN而变为VLAN4的Tag。该报文从SW1的Trunk接口发送出去时,依然是携带着VLAN2的Tag。
图1
也就是说,SW1本身不会发出VLAN4的报文。就算其他设备又VLAN4的报文发送到该设备上,这些报文也会因为SW1上没有VLAN4对应的物理接口而被丢弃。因为SW1的3号接口上根本不允许Super-VLAN4通过。对于其他设备而言,有效的VLANSub-VLAN2和Sub-VLAN3,所有的报文都是在这些VLAN中交互的。这样,SW1上虽然配置了VLAN聚合,但与其他设备的二层通信,不会涉及到Super-VLAN,与正常的二层通信流程一样。
3、Sub-VLAN与外部网络的三层通信原理
前面说过了,所有Sub-VLAN都是通过Super-VLAN的VLANIF接口作为网关与外部网络进行三层通信的。下面以图2所示的示例介绍Sub-VLAN与外部网络的三层通信原理。
在本示例中,SW1上配置了Super-VLAN4、Sub-VLAN2和Sub-VLAN3,并配置了一个普通的VLAN10;SW2上配置两个普通的VLAN10和VLAN20。假设Sub-VLAN2下的主机PC1想要访问与SW2相连的Server,则通信过程如下(假设SW1上已经配置了去往10.1.2.0/24网段的路由,SW2上配置了去往10.1.1.0/24网段的路由,但两交换机没有任何三层转发表项)。
1、PC1将Server的Ip地址(10.1.2.2)和自己所在网段10.1.1.0/4进行比较,发现和自己不在同一个IP子网,于是发送ARP请求给自己的网关(位于SW1上的Super-VLAN4的VLANIF4接口),请求网关的MAC地址,目的MAC为全F(广播报文),目的IP为10.1.1.1。
2、网关SW1收到请求报文后,查找Sub-VLAN和Super-VLAN的对应关系,知道应该回应Super-VLAN4对应的VLANIF4的MAC地址,并知道从Sub-VLAN2的接口回应给PC1。
3、PC1学习到网关的MAC地址后,开始发送目的MAC为Super-VLAN4对应的VLANIF4接口的MAC地址、目的IP为10.1.2.2的报文。
4、SW1收到该报文后,根据Sub-VLAN和Super-VLAN的对应关系以及目的MAC地址判断需要进行三层转发(因为目的MAC地址是自己的接口,但目的IP地址不是),查三层转发表项没有找到匹配项,上送CPU查找路由表,得到下一跳地址为10.1.10.2,出接口为VLANIF10,并通过ARP表项和MAC表项确定出接口,把报文发送给SW2。
5、SW2根据正常的三层转发流程把报文发送给Server。
Server收到PC1的报文后给PC1回应,回应报文的Ip地址为10.1.1.2,但目的MAC为SW2上VLANIF20接口的MAC地址,回应报文的转发流程如下:
1、Server给PC1的回应报文按照正常的三层转发流程到达SW1。到达SW1时,报文的目的MAC为SW1上VLANIF10接口的MAC地址。
2、SW1收到该报文后根据目的MAC地址判断进行三层转发(同样因为目的MAC地址时是自己接口的,但目的IP不是),查三层转发表项没有找到匹配项,上送CPU,CPU查路由表,发现目的IP为10.1.1.2对应的出接口为VLANIF4,查找Sub-VLAN和Super-VLAN的对应关系,并通过ARP表项和MAC表项,知道报文应该从Sub-VLAN2的接口发送给PC1
3、最后来自Server的ARP回应报文到达PC1。
以上就完成了Sub-VLAN与外部网络的三层通信的全过程。
到这里就是本章的全部内容了,感谢大家的浏览观看!本文章中部分内容源自教材《华为交换机学习指南》第二版,大家感兴趣可以购买纸质书籍浏览。