以下内容摘自今年元月全新上市的《Cisco/H3C交换机配置与管理完全手册》(第2版),其姊妹篇——《Cisco/H3C交换机高级配置与管理技术手册》也正在全国热销中。
在此篇文章( http://winda.blog.51cto.com/55153/729941 )中,笔者介绍了H3C交换机Spuer VLAN的聚合原理,本节接着要介绍Super VLAN中的Sub VLAN(从VLAN)间主机的三层通信原理。
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代理。下面具体进行介绍。
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。
VLAN 2内的主机A与VLAN 3内的主机B的通信过程如下:(假设主机A的ARP表中没有主机B的对应ARP表项,并且在担当网关的交换机上启用了Sub VLAN间的ARP代理功能)。
图20-7 通过ARP代理实现不同Sub VLAN间三层互通的示例
(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二层通信中,无论是数据帧进入接口,还是从接口发出都不会有针对Super VLAN的报文,也不会把报文的VLAN ID改为Super VLAN对应的VLAN ID,而是保持报文中原来的VLAN ID不变,因为在Super VLAN中根本没有端口(这是关键)。现以如图20-8所示的例子进行说明。
从Host A侧GE0/0/1进入设备Switch1的帧会被打上VLAN2的标记,在设备Switch1中这个标记不会因为VLAN 2是VLAN 10的Sub VLAN而变为VLAN 10的标记。这样,该数据帧从Trunk类型的接口GE0/0/3出去时,依然是携带VLAN2的标记。也就是说,Switch1本身不会发出VLAN 10的报文,就算其他设备有VLAN 10的报文发送到该设备上,这些报文也会因为Switch1上没有VLAN 10对应物理端口而被丢弃。
【经验之谈】由于Super VLAN中是不允许有物理端口的,所以在配置过程中需要注意Super VLAN和Trunk链路的配置次序问题。如果先配置了Super VLAN,再配置Trunk接口时,Trunk的VLAN许可表项里也会自动滤除了Super VLAN。如在如图20-8中,虽然Switch1的GE0/0/3允许所有的VLAN通过,但是也不会有作为Super VLAN的VLAN 10的报文从该接口进出。但是,如果先配好了Trunk端口,并允许所有VLAN通过,则在此设备上将无法配置Super VLAN。本质原因是有物理端口的VLAN都不能被配置为Super VLAN。而允许所有VLAN通过的Trunk端口是所有VLAN的端口,这样一来,任何VLAN都不能被配置为Super VLAN。这一点一定要谨记。在本示例中,对于Switch1而言,有效的VLAN只有VLAN2和VLAN3,所有的数据帧都在这两个VLAN中转发的。
图20-8 通过ARP代理实现Sub VLAN与外部网络的二层通信的示例
3. Sub VLAN与外部网络的三层通信
下面以图20-9所示的例子介绍通过ARP代理实现Sub VLAN与外部网络的三层通信原理。在示例中,Switch1上配置了Super VLAN 10,Sub VLAN 2和Sub VLAN 3,并配置一个普通的VLAN 30;Switch2上配置两个普通的VLAN 30和VLAN 20。假设Super VLAN 10中的Sub VLAN 2下的主机A想访问与Switch2相连的主机C,则会经过以下下流程如下:(假设Swith1上已配置了去往1.1.3.0/24网段的路由,Swith2上已配置了去往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)Switch1在收到该主机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)Switch1在收到主机A发送的报文后,根据所设置的路由进行三层转发,下一跳地址为1.1.2.2,出接口为Switch2中的VLANIF30接口,把报文发送给Switch2。
(5)Switch2在收到该报文后通过直连出接口VLANIF20(注意,在同一台交换机上直接的多个网段之间是不存在跳数的,可直接进行三层转发),把报文发送给主机C。
(6)主机C在收到主机A发送的报文后,发送响应报文,经过Switch2上的VLANIF30接口进行三层转发到达Switch1的VLANIF30接口。
(7)Switch1在收到该报文后再通过Super VLAN 10这个网关接口,把报文发送给主机A。
这样就完成了Sub VLAN与外部网络的整个三层通信。
本文转自王达博客51CTO博客,原文链接http://blog.51cto.com/winda/942413如需转载请自行联系原作者
茶乡浪子