网络工程师(18):"牛气冲天"的三层交换机

我们曾经提到过,路由器的功能不仅仅是为了实现网络层的互通,更重要的是用来连接不同链路层类型的网络。可以说,交换机是以太网中的大红人,但离开以太网,路由器的作用更为重要,比如交换机在MPLS网络中就无能为力,等等。

在很多企业网中,基本都是由若干采用以太网技术的园区网构建而成,其他局域网技术目前基本上见不到了。也就是说,企业网中大量使用了以太网交换机,用路由器来实现VLAN间互通实在是大材小用,而且速度还慢。路由器往往扮演着更为重要的角色,很少用来实现VLAN间路由。

那么能不能让交换机自己来实现VLAN间路由呢?

必须能!我们给交换机增加路由模块,使之具备路由功能。之前曾经讨论过,交换机工作在链路层,也叫二层交换机,但如果交换机具备了路由功能,就变成了三层交换机!

三层交换机在网络中的地位实在太重要了,甚至可以说,企业网中可以没有路由器,但不能没有三层交换机!

由于广播风暴的问题,我们不得不使用VLAN来隔离广播域,但是用路由器来实现VLAN间互通有很多缺点,而三层交换机则可以完美地解决!

我们来看看三层交换机的特点:

网络工程师(18):

首先,它依然是一台交换机,同一个VLAN的数据帧还是根据MAC地址表转发,这和普通的二层交换机没什么区别,如图中PCB和PCC互访;

其次,它具有路由功能,可以给每个VLAN创建一个三层SVI接口(Switch Virtual Interface,交换机虚拟接口),给SVI接口配置上IP地址就可以做为这个VLAN的网关。多个VLAN的SVI接口配置的IP地址段就成为了三层交换机的直连路由。

最重要的是,三层交换机在实现VLAN间互通时,具有"一次路由,多次转发"的特点。这个特点非常牛,让三层交换机的发展如日中天,也是以太网能够在局域网领域"一统武林"的有力武器!

我们把三层交换机实现VLAN间路由的功能,称为MLS(Multiple Layer Switching,多层交换)。

MLS有两种实现方法:一种叫传统MLS,另一种叫基于CEF的MLS。

传统MLS的核心,是通过ASIC(Application Specific Integrated Circuit,专用集成电路)芯片,对被路由的数据包快速执行以太网帧的再封装操作。由于是由硬件芯片来快速封装,所以速度非常快。

如图中PCA访问PCB的过程是:

1、PCA发送ARP获取网关的MAC地址为MAC_SVI;

2、PCA把数据帧封装为:SMAC为MAC_PCA,DMAC为MAC_SVI。源IP为10.1.1.2,目的IP为10.1.2.2,发送给交换机;

3、交换机收到后,查看DMAC,如果不是自己SVI接口的MAC,则根据MAC地址表做二层转发。否则查看ASIC中是否有MLS匹配项,如果有,直接进行第7步。否则进行第4步;

4、交换机拆除以太网封装,由路由模块查找路由表,发现是直连VLAN3的SVI接口(如果这里没有匹配的路由,交换机丢弃数据包);

5、路由模块发送ARP,获得PCB的MAC地址;

6、交换机根据PCA、PCB的IP、MAC、交换机SVI、数据帧入接口、出接口等信息在ASIC中创建一条MLS条目;

7、交换机根据ASIC中的MLS条目,把数据帧重新封装:SMAC为MAC_SVI,DMAC为MAC_PCB,并从连接PCB的端口发出。

PCA发给PCB的第一个数据帧经历了1~7步后,后续的数据帧交换机只做第3步和第7步即可,即所谓的一次路由,多次转发!

传统MLS有两个特点:一是查找路由表是由软件而非硬件完成;二是MLS条目记录了精确的内容,其中任何一项数据改变都不能匹配上。比如PCA访问PCB后,ASIC中有了对应的MLS条目,但PCA再访问PCC时,因目的IP地址发生变化,无法匹配上原有的MLS条目,所以第一个数据帧也要从2~7来一遍,在ASIC中创建一条新的PCA到PCC的MLS条目才能快速转发。所以也有人把这叫做"精确匹配转发模式"。

网络工程师(18):

基于CEF的MLS的核心,是根据拓扑、路由表预先把查找到的转发信息存储在ASIC中,并获取二层封装信息,实现数据帧的快速再封装,转发速度进一步提升。

CEF(Cisco Express Forwarding,Cisco快速转发)原是思科的快速转发技术。它在ASIC中创建了两个表:一个叫FIB(Forward Information database,转发信息库)。FIB很像路由表,有目标网段和掩码,并采用最长掩码匹配。每当拓扑、路由表发生变化,交换机都会自动更新FIB表;另一个叫邻接关系表,保存了数据帧再封装所用到的MAC地址等信息。交换机预先通过ARP协议获取FIB表中每一项的下一跳MAC地址,以便数据帧能够快速再封装。

如PCA访问PCB的过程是:

1、PCA发送ARP获取网关的MAC地址为MAC_SVI;

2、PCA把数据帧封装为:SMAC为MAC_PCA,DMAC为MAC_SVI。源IP为10.1.1.2,目的IP为10.1.2.2,发送给交换机;

3、交换机收到后,查看DMAC,若不是自己SVI接口的MAC,则根据MAC地址表做二层转发。否则查看邻接关系表中是否有MLS匹配项,如果有,直接进行第6步。否则进行第4步;

4、交换机拆除以太网封装,查找FIB表,向下一跳发送ARP,获得PCB的MAC地址;

5、交换机根据PCA、PCB的IP、MAC、交换机SVI的MAC、数据帧入接口、出接口等信息在邻接关系表中创建一条新的MLS条目;

6、交换机根据邻接关系表中的MLS条目,把数据帧重新封装:SMAC为MAC_SVI,DMAC为MAC_PCB,并从连接PCB的端口发出。

在以上步骤中,第4步和第5步一般由交换机预先就已经做好,交换机在第3步完成后就到了第6步。如果在第3步的邻接关系表中没有找到,交换机不是丢弃帧而是再做一遍第4步和第5步,若第4步的FIB表中还是找不到,则丢弃此帧(一般还是找不到)。

我们注意到,如果PCB和PCC不是交换机直连,而是根据路由表中10.1.2.0/24这条路由访问,那么,PCA访问PCB和PCC就可以匹配上邻接关系表中的同一条MLS条目,因为它们在FIB中的下一跳相同。所以也有人把这叫做"最长匹配转发模式"。

网络工程师(18):

传统MLS和基于CEF的MLS的重要区别:

传统MLS精确匹配,每个数据流的第一个包都要查找路由表;

基于CEF的MLS查表都由硬件实现,预先就已经根据路由表保存了数据帧的再封装信息,对到来的数据帧可以直接进行重新封装并转发。


小Q:三层交换机收到一个数据帧后,如何判断要做二层交换还是三层交换?

欢迎大家留言讨论。


分享到:


相關文章: