VLAN Aggregation
产生背景
交换网络中,VLAN技术以其对广播域的灵活控制和部署方便而得到了广泛的应用。但是在一般的三层交换机中,通常是采用一个VLAN对应一个三层逻辑接口的方式实现广播域之间的互通,这样导致了IP地址的浪费。例如,设备内VLAN划分如图5-10所示。
VLAN |
子网 |
网关地址 |
可用地址数 |
可用服务器数 |
实际需求 |
---|---|---|---|---|---|
2 |
10.1.1.0/28 |
10.1.1.1 |
14 |
13 |
10 |
3 |
10.1.1.16/29 |
10.1.1.17 |
6 |
5 |
5 |
4 |
10.1.1.24/30 |
10.1.1.25 |
2 |
1 |
1 |
如表5-4所示,VLAN2预计未来有10个服务器地址的需求,给其分配一个掩码长度是28的子网10.1.1.0/28,其中10.1.1.0为子网号,10.1.1.15为子网定向广播地址,这两个地址都不能用作服务器地址,此外,10.1.1.1作为子网缺省网关地址也不可作为服务器地址,剩下范围在10.1.1.2~10.1.1.14的地址可以被服务器使用,共13个。这样,尽管VLAN2只需要10个地址,但是按照子网划分却要分给它13个地址。
同理,VLAN3预计未来有5个服务器地址的需求,至少需要分配一个掩码长度是29的子网10.1.1.16/29。VLAN4预计未来只有1个服务器,则分配一个掩码长度是30的子网10.1.1.24/30。
上述VLAN一共需要10+5+1=16个地址,但是按照普通VLAN的编址方式,即使最优化的方案也需要占用16+8+4=28个地址,浪费了将近一半的地址。而且,如果VLAN2后来并没有10台服务器,而实际只接入了3台服务器,那么多出来的地址也会因不能再被其他VLAN使用而被浪费掉。
同时,这种划分也给后续的网络升级和扩展带来了很大不便。假设VLAN4今后需要再增加2台服务器,而又不愿意改变已经分配的IP地址。并且在10.1.1.24后面的地址已经分配给了其他人的情况下,只能再给VLAN4的新用户重新分配一个的29位掩码的子网和一个新的VLAN。这样VLAN4中的客户虽然只有3台服务器,但是却被分配在两个子网中,并且也不在同一个VLAN内,不利于网络管理。
综上所述,很多IP地址被子网号、子网定向广播地址、子网缺省网关地址消耗掉,而不能用于VLAN内的服务器地址。同时,这种地址分配的约束也降低了编址的灵活性,使许多闲置地址也被浪费掉。为了解决这一问题VLAN Aggregation就应运而生。
实现原理
VLAN Aggregation(VLAN聚合,也称Super VLAN)技术就是在一个物理网络内,用多个VLAN隔离广播域,使不同的VLAN属于同一个子网。它引入了Super-VLAN和Sub-VLAN的概念。
- Super-VLAN:和通常意义上的VLAN不同,它只建立三层接口,与该子网对应,而且不包含物理接口。可以把它看作一个逻辑的三层概念—若干Sub-VLAN的集合。
- Sub-VLAN:只包含物理接口,用于隔离广播域的VLAN,不能建立三层VLANIF接口。它与外部的三层交换是靠Super-VLAN的三层接口来实现的。
一个Super-VLAN可以包含一个或多个保持着不同广播域的Sub-VLAN。Sub-VLAN不再占用一个独立的子网网段。在同一个Super-VLAN中,无论服务器属于哪一个Sub-VLAN,它的IP地址都在Super-VLAN对应的子网网段内。
这样,Sub-VLAN间共用同一个三层接口,既减少了一部分子网号、子网缺省网关地址和子网定向广播地址的消耗,又实现了不同广播域使用同一子网网段地址的目的。消除了子网差异,增加了编址的灵活性,减少了闲置地址浪费。
仍以表5-4所示例子进行说明。用户需求不变。仍旧是VLAN2预计未来有10个服务器地址的需求,VLAN3预计未来有5个服务器地址的需求,VLAN4预计未来有1个服务器地址的需求。
按照VLAN Aggregation的实现方式,新建VLAN10并配置为Super-VLAN,给其分配一个掩码长度是24的子网10.1.1.0/24,其中10.1.1.0为子网号,10.1.1.1为子网网关地址如图5-11所示。Sub-VLAN(VLAN2、VLAN3、VLAN4)的地址划分如表5-5所示。
VLAN |
子网 |
网关地址 |
可用地址数 |
可用服务器数 |
实际需求 |
---|---|---|---|---|---|
2 |
10.1.1.0/24 |
10.1.1.1 |
10 |
10.1.1.2~10.1.1.11 |
10 |
3 |
5 |
10.1.1.12~10.1.1.16 |
5 |
||
4 |
1 |
10.1.1.17 |
1 |
VLAN Aggregation的实现中,各Sub-VLAN间的界线也不再是从前的子网界线了,它们可以根据其各自服务器的需求数目在Super-VLAN对应子网内灵活的划分地址范围。
从表5-5中可以看到,VLAN2、VLAN3和VLAN4共用同一个子网(10.1.1.0/24)、子网缺省网关地址(10.1.1.1)和子网定向广播地址(10.1.1.255)。这样,普通VLAN实现方式中用到的其他子网号(10.1.1.16、10.1.1.24)和子网缺省网关(10.1.1.17、10.1.1.25),以及子网定向广播地址(10.1.1.15、10.1.1.23、10.1.1.27)就都可以用来作为服务器IP地址使用。
这样,3个VLAN一共需要10+5+1=16个地址,实际上在这个子网里就刚好分配了16个地址(10.1.1.2~10.1.1.17)。这16个服务器地址加上子网号(10.1.1.0)、子网缺省网关(10.1.1.1)和子网定向广播地址(10.1.1.255),一共用去了19个IP地址,网段内仍剩余255-19=236的地址可以被任意Sub-VLAN内的服务器使用。
VLAN间通信
概述
VLAN Aggregation在实现不同VLAN间共用同一子网网段地址的同时也带来了Sub-VLAN间的三层转发问题。
普通VLAN实现方式中,VLAN间的服务器可以通过各自不同的网关进行三层转发来达到互通的目的。但是VLAN Aggregation方式下,同一个Super-VLAN内的服务器使用的是同一个网段的地址和共用同一个网关地址。即使是属于不同的Sub-VLAN的服务器,由于它们同属一个子网,彼此通信时只会做二层转发,而不会通过网关进行三层转发。而实际上不同的Sub-VLAN的服务器在二层是相互隔离的,这就造成了Sub-VLAN间无法通信的问题。
解决这一问题的方法就是使用Proxy ARP。
关于Proxy ARP的原理,请参见《IP业务》中的“ARP”。
不同Sub-VLAN间的三层互通
如果主机处于同一物理网络相同网段但属于不同的VLAN,主机间要进行三层互通,则需要在关联这些VLAN的接口上使能VLAN间Proxy ARP功能。
如图5-12所示,HostA和HostB是Switch下的两个用户,HostA和HostB处于相同网段,但HostA属于VLAN 3,HostB属于VLAN 2。由于HostA和HostB属于不同的Sub-VLAN,HostA和HostB不能直接实现二层互通。通过在Switch的VLANIF 4上使能VLAN间Proxy ARP功能,可以解决上述问题。
- HostA发送ARP请求报文,请求目的主机HostB的MAC地址。
- Switch收到此ARP请求报文后,检查报文的目的IP地址,发现并不是自己本机的IP,因此确定该报文请求的不是自己的MAC地址。然后,Switch检查是否存在到达HostB的ARP表:
- 如果有HostB对应的ARP表项,且该表项中的VLAN信息与接收报文的端口的VLAN信息不同,则判断关联VLAN的接口是否使能了VLAN间Proxy ARP功能:
如果使能了VLAN间Proxy ARP功能,则将VLANIF 4的MAC地址发送给HostA。
HostA收到Switch发送的ARP响应报文后,认为此报文是HostB发送的ARP响应报文。HostA从报文中学习Switch设备VLANIF 4的MAC地址,并使用此MAC地址向HostB发送数据报文。
- 如果没有使能VLAN间Proxy ARP功能,则丢弃该ARP请求报文。
- 如果没有HostB对应的ARP表项,则丢弃HostA发送的ARP请求报文,同时判断关联VLAN的接口是否使能了VLAN间Proxy ARP功能:
- 如果使能了VLAN间Proxy ARP功能,则在VLAN 2内广播发送ARP请求报文,该请求报文的目的IP地址为HostB的IP地址。收到HostB发送的ARP响应报文后,生成相应的ARP表项。
- 如果没有使能VLAN间Proxy ARP功能,则不执行任何操作。
- 如果有HostB对应的ARP表项,且该表项中的VLAN信息与接收报文的端口的VLAN信息不同,则判断关联VLAN的接口是否使能了VLAN间Proxy ARP功能:
Sub-VLAN与外部网络的二层通信
在基于接口的VLAN二层通信中,无论是数据帧进入接口还是从接口发出都不会有针对Super-VLAN的报文。如图5-13所示。
从ServerA侧Port1进入设备Switch1的帧会被打上VLAN2的Tag,在设备Switch1中这个Tag不会因为VLAN2是VLAN10的Sub-VLAN而变为VLAN10的Tag。该数据帧从Trunk类型的接口Port3出去时,依然是携带VLAN2的Tag。
也就是说,设备Switch1本身不会发出VLAN10的报文。就算其他设备有VLAN10的报文发送到该设备上,这些报文也会因为设备Switch1上没有VLAN10对应物理接口而被丢弃。
Super-VLAN中是不存在物理接口的,这种限制是强制的,表现在:如果先配置了Super-VLAN,再配置Trunk接口时,Trunk的VLAN allowed表项里就自动滤除了Super VLAN。
如图5-13所示,虽然Switch1的Port3允许所有的VLAN通过,但是也不会有做为Super-VLAN的VLAN10的报文从该接口进出。
如果先配好了Trunk接口,并允许所有VLAN通过,则在此设备上将无法配置Super VLAN。本质原因是有物理接口的VLAN都不能被配置为Super VLAN。而允许所有VLAN通过的Trunk接口是所有VLAN的tagged接口,当然任何VLAN都不能被配置为Super VLAN。
对于设备Switch1而言,有效的VLAN只有VLAN2和VLAN3,所有的数据帧都在这两个VLAN中转发的。
Sub-VLAN与外部网络的三层通信
如图5-14所示,Switch1上配置了Super-VLAN 4,Sub-VLAN 2和Sub-VLAN 3,并配置一个普通的VLAN10;Switch2上配置两个普通的VLAN 10和VLAN 20。假设Super-VLAN 4中的Sub-VLAN 2下的服务器A想访问与Switch2相连的服务器C,通信过程如下:(假设Switch1上已配置了去往10.1.3.0/24网段的路由,Switch2上已配置了去往10.1.1.0/24网段的路由)- 服务器A将服务器C的IP地址(10.1.3.2)和自己所在网段10.1.1.0/24进行比较,发现服务器C和自己不在同一个子网。
- 服务器A发送ARP请求给自己的网关,请求网关的MAC地址。
- Switch1收到该ARP请求后,查找Sub-VLAN和Super-VLAN的对应关系,从Sub-VLAN 2发送ARP应答给服务器A。ARP应答报文中的源MAC地址为Super-VLAN 4对应的VLANIF4的MAC地址。
- 服务器A学习到网关的MAC地址。
- 服务器A向网关发送目的MAC为Super-VLAN 4对应的VLANIF4的MAC、目的IP为10.1.3.2的报文。
- Switch1收到该报文后进行三层转发,下一跳地址为10.1.2.2,出接口为VLANIF10,把报文发送给Switch2。
- Switch2收到该报文后进行三层转发,通过直连出接口VLANIF20,把报文发送给服务器C。
- 服务器C的回应报文,在Switch2上进行三层转发到达Switch1。
- Switch1收到该报文后进行三层转发,通过Super-VLAN,把报文发送给服务器A。