20.3.2 Sub VLAN 主机的三层通信原理
《Cisco/H3C交换机配置与管理完全手册(第二版)》第20章H3C 交换机隔离用户VLAN和超VLAN 配置与管理,本章介绍的H3C 交换机上的两种特殊的VLAN 配置与管理非常重要,也非常实用。本节为大家介绍Sub VLAN 主机的三层通信原理。
AD:
20.3.2 Sub VLAN 主机的三层通信原理
我们在前面已经说到,Super VLAN(也就是VLAN 聚合)方案中,在实现不同Sub VLAN 间共用同一子网网段地址的同时也带来了Sub VLAN 间的三层转发问题。因为在普通VLAN 中,VLAN 间的主机可以通过各自不同的网关(也就是它们自己的VLAN 接口IP 地址)进行三层转发来达到互通的目的。但是在Super VLAN 方案中,各Sub VLAN 是不允许配置VLAN 接口IP 地址的,同一个Super VLAN 内的所有主机使用的是同一个网段的地址和共用同一个网关地址,即使是属于不同的Sub VLAN 的主机。由于它们同属一个子网,彼此通信时只会做二层转发,而不会通过网关进行三层转发。而实际上不同的Sub VLAN 的主机在二层又是相互隔离的(这是继承普通VLAN 的属性),这就造成了Sub VLAN 间无法通信(包括二层通信和三层通信)的问题。
解决这一问题的方法就是使用ARP 代理,下面进行具体介绍。
解决这一问题的方法就是使用ARP 代理,下面进行具体介绍。
1.不同Sub VLAN 间的三层互通
例如,在如图20-7 所示的网络中,Super VLAN(VLAN 10)包含Sub VLAN(VLAN 2 和VLAN 3)。VLANIF10:1.1.1.1/24 表示Super VLAN 10 的VLAN 接口IP 地址为1.1.1.1/24。
图20-7 通过ARP 代理实现不同Sub VLAN 间三层互通的示例 |
VLAN 2 内的主机A 与VLAN 3 内的主机B 的通信过程如下(假设主机A 的ARP 表中没有主机B 的对应ARP 表项,并且在担当网关的交换机上启用了Sub VLAN 间的ARP 代理功能):
(1)主机A 将主机B 的IP 地址(1.1.1.3)和自己所在网段1.1.1.0/24 进行比较,发现主机B和自己在同一个子网,但是主机A 的ARP 表中没有主机B 的对应表项,于是主机A 发送ARP 广播,请求主机B 的MAC 地址。
(2)由于主机B 并不在VLAN 2 的广播域内,无法接收到主机A 的这个ARP 请求。但由于在网关上启用了Sub VLAN 间的ARP 代理功能,而且网关是在Sub VLAN 中,是允许接收其下面各Sub VLAN 报文的,所以当网关收到主机A 的ARP 请求后开始在路由表中查找,发现ARP 请求中的主机B 的IP 地址(1.1.1.3)为直连接口路由,则网关向所有其他Sub VLAN 接口发送一个ARP 广播,请求主机B 的MAC 地址。
(3)当主机B 收到网关发送的ARP 广播后,对此请求进行ARP 应答。
(4)在网关收到主机B 的应答后,就把自己的MAC 地址当作主机B 的MAC 地址回应给主机A。
(5)主机A 收到网关发来的响应后就认为主机B 的MAC 地址就是网关的MAC 地址,于是主机A 之后要发给主机B 的报文都先发送给网关,由网关做三层转发。
主机B 发送报文给主机A 的过程和上述的主机A 到主机B 的报文流程类似,不再赘述。
2.Sub VLAN 与外部网络的二层通信
在基于端口的VLAN 二层通信中,无论是数据帧进入接口还是从接口发出都不会有针对SuperVLAN 的报文,也不会把报文的VLAN ID 改为Super VLAN 对应的VLAN ID,而是保持报文中原来的VLAN ID 不变,因为在Super VLAN 中根本没有端口(这是关键)。现在以如图20-8 所示的例子进行说明。
图20-8 通过ARP 代理实现Sub VLAN 与外部网络的二层通信的示例 |
从Host A 侧GE0/0/1 进入设备Switch 1 的帧会被打上VLAN 2 的标记,在设备Switch 1 中这个标记不会因为VLAN 2 是VLAN 10 的Sub VLAN 而变为VLAN 10 的标记。这样,该数据帧从Trunk 类型的接口GE0/0/3 出去时,依然是携带VLAN 2 的标记。也就是说,Switch 1 本身不会发出VLAN 10 的报文,就算其他设备有VLAN 10 的报文发送到该设备上,这些报文也会因为Switch 1 上没有VLAN 10 对应的物理端口而被丢弃。
由于Super VLAN 中是不允许有物理端口的,所以在配置过程中需要注意Super VLAN 和Trunk 链路的配置次序问题。如果先配置了Super VLAN,再配置Trunk 接口时,Trunk 的VLAN 许可表项里也会自动滤除了Super VLAN。如在图20-8 中,虽然Switch 1 的GE0/0/3 允许所有的VLAN 通过,但是也不会有作为Super VLAN 的VLAN 10 的报文从该接口进出。但是,如果先配好了Trunk 端口,并允许所有VLAN 通过,则在此设备上将无法配置Super VLAN。本质原因是有物理端口的VLAN 都不能被配置为Super VLAN。而允许所有VLAN 通过的Trunk 端口是所有VLAN 的端口,这样一来,任何VLAN 都不能被配置为Super VLAN。这一点一定要谨记。在本示例中,对于Switch 1 而言,有效的VLAN 只有VLAN 2 和VLAN 3,所有的数据帧都是在这两个VLAN 中转发的。
3.Sub VLAN 与外部网络的三层通信
下面以图20-9 所示的例子介绍通过ARP 代理实现Sub VLAN 与外部网络的三层通信的原理。在示例中,Switch 1 上配置了Super VLAN 10、Sub VLAN 2 和Sub VLAN 3,并配置一个普通的VLAN 30;Switch 2 上配置两个普通的VLAN 30 和VLAN 20。假设Super VLAN 10 中的SubVLAN 2 下的主机A 想访问与Switch 2 相连的主机C,则会经过如下流程(假设Switch 1 上已配置了去往1.1.3.0/24 网段的路由,Switch 2 上已配置了去往1.1.1.0/24 网段的路由):
图20-9 通过ARP 代理实现Sub VLAN 与外部网络的三层通信的示例 |
(1)主机A 将主机C 的IP 地址(1.1.3.2)和自己所在网段1.1.1.0/24 进行比较,发现主机C和自己不在同一个子网。于是,主机A 向自己的网关(Super VLAN 10 接口)发送一个ARP 请求(其实它不仅是给网关发送了这个请求,而是向整个VLAN 2 中节点发送了这个请求),请求网关的MAC 地址。
(2)Switch 1 在收到该主机A 发送的ARP 请求后,查找Sub VLAN 和Super VLAN 的对应关系,以源MAC 地址为Super VLAN 10 对应的VLANIF10 的MAC 地址作为目的主机C 的目的MAC 地址从Sub VLAN 2 发送ARP 应答给主机A。
(3)这样主机A 就以网关MAC 地址作为主机C 的MAC 地址记录在MAC 表项。然后主机A 向网关发送以Super VLAN 10 对应的VLANIF10 的MAC 地址作为目的MAC 地址,主机C 的IP地址1.1.3.2 作为目的IP 地址的报文。
(4)Switch 1 在收到主机A 发送的报文后,根据所设置的路由进行三层转发,下一跳地址为1.1.2.2,出接口为Switch 2 中的VLANIF30 接口,把报文发送给Switch 2。
(5)Switch 2 在收到该报文后通过直连出接口VLANIF20(注意,在同一台交换机上直接的多个网段之间是不存在跳数的,可直接进行三层转发)把报文发送给主机C。
(6)主机C 在收到主机A 发送的报文后,发送响应报文,经过Switch 2 上的VLANIF30 接口进行三层转发到达Switch 1 上的VLANIF30 接口。
(7)Switch 1 在收到该报文后再通过Super VLAN 10 这个网关接口把报文发送给主机A。这样就完成了Sub VLAN 与外部网络的整个三层通信。
【责任编辑:云霞 TEL:(010)68476606】