产生背景:

交换网络中, VLAN 技术以其对广播域的灵活控制和部署方便而得到了广泛的应用。但是在一般的三层交换机中,通常是采用一个VLAN 对应一个三层逻辑接口的方式实现广播域之间的互通,这样导致了IP 地址的浪费。例如,设备内 VLAN划分如图所示。

如表所示, VLAN2 预计未来有10 个主机地址的需求,给其分配一个掩码长度是 28的子网1.1.1.0/28,其中1.1.1.0 为子网号, 1.1.1.15为子网定向广播地址,这两个地址都不能用作主机地址,此外 1.1.1.1作为子网缺省网关地址也不可作为主机地址,剩下范围在 1.1.1.2~1.1.1.14的地址可以被主机使用,共 13 个。这样,尽管VLAN2 只需要 10个地址,但是按照子网划分却要分给它 13个地址。

同理, VLAN3 预计未来有5 个主机地址的需求,至少需要分配一个掩码长度是 29的子网 1.1.1.16/29。VLAN4预计未来只有 1 个主机,则分配一个掩码长度是30 的子网 1.1.1.24/30。

上述 VLAN 一共需要10+5+1=16个地址,但是按照普通 VLAN 的编址方式,即使最优化的方案也需要占用16+8+4=28个地址,浪费了将近一半的地址。而且,如果 VLAN2 后来并没有10 台主机,而实际只接入了 3台主机,那么多出来的地址也会因不能再被其他 VLAN 使用而被浪费掉。

同时,这种划分也给后续的网络升级和扩展带来了很大不便。假设 VLAN4今后需要再增加 2 台主机,而又不愿意改变已经分配的IP 地址。并且在 1.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,不能建立三层 VLAN 接口。它与外部的三层交换是靠 Super-VLAN 的三层接口来实现的。

一个 Super-VLAN 可以包含一个或多个保持着不同广播域的Sub-VLAN。Sub-VLAN不再占用一个独立的子网网段。在同一个 Super-VLAN 中,无论主机属于哪一个Sub-VLAN,它的 IP地址都在Super-VLAN 对应的子网网段内。

这样, Sub-VLAN 间共用同一个三层接口,既减少了一部分子网号、子网缺省网关地址和子网定向广播地址的消耗,又实现了不同广播域使用同一子网网段地址的目的。消除了子网差异,增加了编址的灵活性,减少了闲置地址浪费。

仍以表所示例子进行说明。用户需求不变。仍旧是VLAN2 预计未来有 10个主机地址的需求,VLAN3 预计未来有5 个主机地址的需求,VLAN4预计未来有 1 个主机地址的需求。

按照 VLANAggregation 的实现方式,新建 VLAN10 并配置为Super-VLAN,给其分配一个掩码长度是 24的子网 1.1.1.0/24,其中1.1.1.0 为子网号, 1.1.1.1为子网网关地址如图所示。Sub-VLAN(VLAN2、VLAN3、 VLAN4)的地址划分如表 所示。

VLAN Aggregation 的实现中,各Sub-VLAN 间的界线也不再是从前的子网界线了,它们可以根据其各自主机的需求数目在Super-VLAN 对应子网内灵活的划分地址范围。

从表中可以看到, VLAN2、VLAN3 和 VLAN4共用同一个子网(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 一共需要 10+5+1=16个地址,实际上在这个子网里就刚好分配了 16 个地址给(1.1.1.2~1.1.1.17)。这16 个主机地址加上子网号(1.1.1.0)、子网缺省网关(1.1.1.1)和子网定向广播地址(1.1.1.255),一共用去了19 个 IP地址,网段内仍剩余 255-19=236的地址可以被任意 Sub-VLAN 内的主机使用。

VLAN 间通信

VLAN Aggregation 在实现不同VLAN 间共用同一子网网段地址的同时也带来了 Sub-VLAN间的三层转发问题。

普通VLAN 实现方式中, VLAN间的主机可以通过各自不同的网关进行三层转发来达到互通的目的。但是 VLANAggregation 方式下,同一个 Super-VLAN 内的主机使用的是同一个网段的地址和共用同一个网关地址。即使是属于不同的Sub-VLAN 的主机,由于它们同属一个子网,彼此通信时只会做二层转发,而不会通过网关进行三层转发。而实际上不同的Sub-VLAN的主机在二层是相互隔离的,这就造成了 Sub-VLAN间无法通信的问题。

解决这一问题的方法就是使用ARP Proxy。

·不同 Sub-VLAN 间的三层互通

例如,Super-VLAN(VLAN10)包含Sub-VLAN(VLAN2和 VLAN3),具体组网如图所示。

ARP Proxy 实现不同Sub-VLAN 间的三层互通组网图

VLAN2 内的主机A 与 VLAN3内的主机 B 的通信过程如下:(假设主机A 的 ARP表中无主机 B 的对应表项并且网关上使能了Sub-VLAN 间的 ARPProxy)。

  1. 主机A 将主机 B的 IP 地址(1.1.1.3)和自己所在网段1.1.1.0/24 进行比较,发现主机B和自己在同一个子网,但是主机 A 的ARP 表中无主机 B的对应表项。

  2. 主机A 发送 ARP广播,请求主机 B 的MAC 地址。

  3. 主机 B并不在 VLAN2 的广播域内,无法接收到主机A 的这个 ARP请求。

  4. 由于网关上使能 Sub-VLAN 间的 ARP Proxy,当网关收到主机A 的 ARP请求后,开始在路由表中查找,发现 ARP 请求中的主机B 的 IP地址(1.1.1.3)为直连接口路由,则网关向所有其他Sub-VLAN 接口发送一个 ARP广播,请求主机 B 的MAC 地址。

  5. 主机 B收到网关发送的 ARP 广播后,对此请求进行ARP 应答。

  6. 网关收到主机 B的应答后,就把自己的 MAC 地址当作B 的 MAC地址回应给主机 A。

  7. 网关和主机 A的 ARP 表项中都存在主机B 的对应表项。

  8. 主机A 之后要发给 B的报文都先发送给网关,由网关做三层转发。主机B 发送报文给主机 A的过程和上述的 A 到B 的报文流程类似,不再赘述。

·Sub-VLAN 与外部网络的二层通信

在基于接口的VLAN 二层通信中,无论是数据帧进入接口还是从接口发出都不会有针对Super-VLAN的报文。如图所示。

从 HostA 侧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。

如图所示,虽然 Switch1 的Port3 允许所有的 VLAN通过,但是也不会有做为Super-VLAN 的VLAN10 的报文从该接口进出。

§如果先配好了 Trunk 接口,并允许所有VLAN 通过,则在此设备上将无法配置 SuperVLAN。本质原因是有物理接口的VLAN 都不能被配置为 SuperVLAN。而允许所有VLAN 通过的Trunk 接口是所有 VLAN的 tagged 接口,当然任何VLAN 都不能被配置为 SuperVLAN。

对于设备 Switch1 而言,有效的VLAN 只有 VLAN2和 VLAN3,所有的数据帧都在这两个VLAN中转发的。

如图 所示, Switch1 上配置了Super-VLAN 4,Sub-VLAN 2 和Sub-VLAN 3,并配置一个普通的 VLAN10;Switch2 上配置两个普通的 VLAN10 和 VLAN 20。假设Super-VLAN 4 中的Sub-VLAN2 下的主机 A 想访问与Switch2 相连的主机 C,通信过程如下:(假设Switch1 上已配置了去往 1.1.3.0/24网段的路由, Switch2 上已配置了去往1.1.1.0/24 网段的路由)

  1. 主机 A将主机 C 的IP 地址(1.1.3.2)和自己所在网段1.1.1.0/24 进行比较,发现主机C和自己不在同一个子网。1. 主机 A发送 ARP 请求给自己的网关,请求网关的MAC 地址。

  2. Switch1 收到该ARP 请求后,查找 Sub-VLAN和Super-VLAN的对应关系,从 Sub-VLAN2发送 ARP 应答给主机A。ARP应答报文中的源 MAC 地址为Super-VLAN 4 对应的VLANIF4的 MAC 地址。

  3. 主机 A学习到网关的 MAC 地址。

  4. 主机 A向网关发送目的 MAC 为Super-VLAN 4 对应的VLANIF4 的 MAC、目的IP 为1.1.3.2的报文。

  5. Switch1 收到该报文后进行三层转发,下一跳地址为1.1.2.2,出接口为 VLANIF10,把报文发送给Switch2。

  6. Switch2 收到该报文后进行三层转发,通过直连出接口VLANIF20,把报文发送给主机C。

  7. 主机 C的回应报文,在 Switch2 上进行三层转发到达Switch1。

  8. Switch1 收到该报文后进行三层转发,通过Super-VLAN,把报文发送给主机 A。