第二章 三层交换
•单臂路由的 缺陷可以归结为以下三点:
•“单臂”本身将成为网络的骨干链路,容易形成网络瓶颈
•子接口依然依托于物理接口,就实际应用而言不灵活
•每次VLAN间转发都需要查看路由表,严重浪费设备资源
•三层交换机的转发原理
三层交换机通过硬件来交换和路由选择数据包。为完成在硬件中处理数据包的高层信息,Cisco Catalyst交换机使用传统的MLS(Multilayer Switching,多层交换)体系结构或基于CEF(Cisco Express Forwarding,Cisco快速转发)的MLS体系结构。传统MLS是一种老式特性,而所有新型的Catalyst交换机都支持CEF多层交换。
•传统的MLS
MLS让ASIC(Application-Specific Integrated Circuit,应用专用集成电路)能够对被路由的数据包执行第2层重写操作。第2层重写操作包括重写源和目标MAC地址,以及写入重新计算得到的循环冗余效验码(CRC)。
支持传统MLS的Catalyst交换机使用一种MLS协议从MLS路由器那里获悉第2层重写信息。使用传统MLS时,第3层引擎(路由处理器)和交换ASIC协同工作,在交换机上建立第3层条目。
使用传统MLS时,交换机将数据流中的第一个数据包转发给第3层引擎,后者以软件交换的方式对数据包进行处理。对数据流中的第一个数据包进行路由处理后,第3层引擎对硬件交换组件进行程序处理,使之为后续的数据包选择路由。
如图所示,处于VLAN1中的主机要将数据包发送给连接在VLAN2中的主机,这个过程需要经过以下几个步骤:

(1)VLAN1的主机将数据包发送给默认网关。三层交换机是主机的网关,因此,三层交换机上的VLAN1的端口接受到主机发来的数据包。这个数据帧中,源MAC地址时VLAN1主机的MAC地址,目标MAC地址是默认网关的MAC地址。
(2)三层交换机的第3层引擎接收到这个数据包,在转发数据包前重写数据帧的2层封装。三层交换机首先要使用ARP协议来获得VLAN2主机的MAC地址。
(3)三层交换机用VLAN2的主机的MAC地址作为发送帧的目标MAC地址来封装数据帧,并重新CRC值。同时,在硬件中创建一个MLS条目,以便能够重写和转发这个流中的后续数据包。
(4)VLAN1主机发送给VLAN2主机的后续数据包直接由三层交换机的ASIC进行处理,ASIC根据刚才创建的MLS条目重写第2层封装,并快速转发数据包。
这个过程常常被称为“一次路由,多次交换”。也就是说,交换机的三层引擎只需要处理数据流中的第一个数据包,而后续的数据全部由硬件来执行转发,这样就是实现了三层交换机的快速转发功能。
•基于CEF的MLS
CEF 是一种基于拓扑的转发模型,可预先将所有路由选择信息加入到转发信息表(FIB)中。这样,交换机就能够快速查找路由选择信息。
CEF主要包含如下两个转发用的信息表:
•转发信息库(FIB):CEF使用FIB来做出基于目标IP前缀的转发决策。从概念上说,FIB类似于路由表,包含路由表中转发信息的镜像。当网络的拓扑发生变化时,路由表将被更新,而FIB也将随之变化。FIB中包含下一跳地址信息,这些信息是根据路由表中的信息得到的。使用基于CEF的MLS时,第3层引擎和硬件交换组件都维护一个FIB。
•邻接关系表:在网络中,如果两个节点之间在数据链路层只有一跳,则它们彼此相邻。除FIB外,CEF还使用邻接关系表来存储第2层编址信息。对于每个FIB条目,邻接关系表中都包含相应的第2层地址。和FIB一样,使用基于CEF的MLS时,第3层引擎和硬件交换组件都维护一个邻接关系表。
如图所示:在使用基于CEF的MLS情况下,连接在VLAN1上的主机A,要通过三层交换机将数据发送给连接在VLAN2上的主机B时,需要经过以下步骤:

(1)主机A发送数据包给自己的默认网关,三层交换机时主机A的网关,因而可接收到这个数据包。
(2)三层交换机查找FIB表,数据包的目标IP地址10.20.20.2,与三层交换机直连。
(3)三层交换机查找邻接关系表,在邻接关系表中,有IP地址与源MAC地址、目标MAC地址的对应关系,并找到转发端口。
(4)三层交换机的硬件交换组件根据邻接关系表重写数据帧的二层封装,并快速转发。
如果三层交换机接收到主机A发送来的数据包,但邻接关系表中没有主机B的二层重写信息,那么三层交换机会将数据包交给三层引擎进行处理。三层引擎会发送ARP请求获取主机B的MAC地址信息。然后,第3层引擎将一个解析后的邻接关系条目加入到自己的邻接关系表中,硬件交换组件也将这条邻接关系条目加入到自己的邻接关系表中。
从上面可以看出,基于CEF的MLS与传统的MLS相比,主要优势是传统的MLS每个数据流的第一个数据包都要进行路由,而基于CEF的MLS在第一次路由后,就会在邻接关系表和FIB表中保存目标信息,那么有数据需要转发时,就可以直接用硬件查找邻接关系表和FIB表。
•虚接口的引入

这里的interface vlan 1实际就是一个虚拟口,大家没有留意的是,我们并没有强调管理这台交换机需要从哪儿实际的物理接口连接到交换机。实际上,无论从哪个物理接口连接,只要该接口可以正常通信且属于VLAN1(默认情况所有接口都属于VLAN1),都可以远程访问管理交换机(当然需要正确的口令),这正是虚接口的最重要特性——只要在交换机上“开启”相关VLAN的虚接口,并配置网关IP地址,属于该VLAN的物理接口都可以动态的充当该VLAN的网关。
•三层交换机的配置
•启动路由功能
三层交换机在默认情况下的配置与二层交换机相同,如果想要在三层交换机上配置路由,首先需要在三层交换机上启动路由功能。配置命令如下:
Switch(config)# ip routing
•配置虚接口的IP地址
其配置命令如下:
Switch(config)# interface vlan vlan-id
Switch(config-if)# ip address ip-address netmask
Switch(config-if)# no shutdown
•配置路由接口
三层交换机的接口在默认情况下是二层接口,如果需要让三层交换机与路由器实验点到点的连接,需要将交换机上的某个接口配置为路由接口,才能为这个接口配置IP地址。配置命令如下:
Switch(config-if)# no switchport
•DHCP中继的配置
SW3L(config-if)# ip helper-address DHCPsrv-IPAddress
DHCPsrv-IPAddress:是DHCP服务器的IP地址。
•三层交换机实现VLAN互通实例

具体步骤:
•在二层交换机SW1上分别创建VLAN2、VLAN3

分配端口到VLAN

配置Trunk

•在三层交换上SW3L1上分别创建VLAN2、VLAN3

配置Trunk并指定接口封装方式为802.1q

启动三层交换的路由功能

在三层交换机上配置各VLAN的IP地址

•给各个主机配置IP地址

•验证主机是否能够互相ping通

•在三层交换机上配置路由实例

具体步骤:
•在二层交换机SW1上分别创建VLAN2、VLAN3

分配端口到VLAN

配置Trunk

•在三层交换上SW3L1上分别创建VLAN2、VLAN3

配置Trunk并指定接口封装方式为802.1q

启动三层交换的路由功能

在三层交换机上配置各VLAN的IP地址

在三层交换机上配置路由接口,并配置接口的IP地址

在三层交换机上配置路由

•在路由器上配置接口和路由

•给各个主机配置IP地址

•验证主机是否能够互相ping通

•三层交换机配置DHCP中继
具体步骤:
•在三层交换机SW3L上:创建vlan2、vlan3、vlan4、vlan5。

启用VTP修剪,并配置VTP域名为benet。

给每个vlan配置一个不同网段的IP地址,并配置中继转发,指向DHCP服务器。

将F0/0接口改为路由接口,并配置一个IP地址。

启用三层交换的路由功能。

将F0/1和F0/2接口改为Trunk并指定接口封装方式为802.1q。

•在二层交换机SW1上:启用VTP修剪,并配置VTP域名为benet(要和三层交换机的VTP域名一致)

将F0/0接口改为Trunk模式。

此时,查看一下SW1的vlan信息,能够看到三层交换机SW3L上创建的vlan信息全部复制到二层交换机SW1上来了。

将端口相应的加到VLAN当中。

•在二层交换机SW2上:启用VTP修剪,并配置VTP域名为benet(要和三层交换机的VTP域名一致)

将F0/0接口改为Trunk模式。

此时,查看一下SW2的vlan信息,能够看到三层交换机SW3L上创建的vlan信息全部复制到二层交换机SW2上来了。

将端口相应的加到VLAN当中。

•给路由器R1的接口配置一个IP地址,也就是DHCP服务器的IP地址。

创建不同网段的地址池。

配置路由器R1的默认网关,指向连接三层交换机的接口F0/0的IP地址。

关闭路由器R1的路由功能。

•在客户端上测试自动获取IP地址。

•测试是否全网互通。