4.5 三层交换技术
4.5.1 三层交换技术的基本原理
VLAN的默认设置是VLAN之间不允许通信,要实现VLAN之间的通信,必须使用路由器。但是,路由器要把每一个数据包的目的地址与自己的路由表项对比以决定数据包的去向,处理速度相对缓慢,如果在大型网络核心中使用路由器来进行VLAN间的数据交换,将降低整个网络的效率。更重要的是,路由器的端口数有限,从而限制了子网的连接个数。由此产生了将交换机的快速交换能力和路由器的路由寻址能力结合起来的三层交换技术。
简单地说,三层交换技术就是“二层交换技术+三层转发技术”。它解决了局域网中网段划分之后,网段中子网必须依赖路由器进行管理的局面,解决了传统路由器低速、复杂所造成的网络瓶颈问题。
三层交换(也称多层交换技术,或IP交换技术)是相对于传统交换概念提出来的。传统的交换技术是在OSI网络标准模型中的第二层——数据链路层进行操作的,而三层交换技术是在网络模型中的第三层实现了数据包的高速转发。
一个三层交换功能的交换机是一个带有第三层路由功能的交换机,是交换技术和路由技术的有机结合,并不是简单地把路由器设备的硬件及软件叠加在局域网交换机上。
硬件上,三层交换机的接口模块同二层交换机的接口模块一样,是通过高速背板/总线(速率在几十Gbit/s以上)交换数据的,而第三层路由硬件模块也是插接在高速背板/总线上。这就使得路由模块可以与需要路由的其他模块间高速地交换数据,从而突破了传统路由器接口速率的限制,实现高速路由交换。对数据包的转发,如IP/IPX的转发,可通过硬件完成。
软件上,路由信息的更新、路由表的维护、路由的计算、路由的确定等,都是由软件完成。
三层交换机可分为纯硬件和纯软件两大类。
纯硬件的三层技术相对来说技术复杂,成本高,但是速度快,性能好,负载能力强。其原理是:在一台三层交换机内,分别设置了交换模块和路由模块,它们都采用ASIC芯片,且路由模块和交换模块之间是Trunk链接的,以确保两模块之间的高带宽。由于都采用硬件的方式,其中包括二层数据线性交换和三层路由的查找和刷新,从而大大提高了处理速度。
基于软件的三层交换机技术较简单,但速度较慢,不适合做主干。主要通过软件方式查找路由表。
下面简述使用IP协议的两台主机通过第三层交换机进行通信的过程。
如图4-9所示,有4台主机与三层交换机互联。
图4-9 三层交换机通信过程
假设两个使用IP协议的站点A、B通过第三层交换机进行通信,发送站点A在开始发送时,将自己的源IP地址192.168.10.1与B站的目标IP地址192.168.10.2进行比较,判断B站是否与自己在同一子网内。目的站B与发送站A在同一子网内(VLAN10),则进行二层的转发。
二层转发的具体步骤如下:
(1)站点A在转发数据前,必须得到站点B的MAC地址。
①在站点A上从应用层到传输层、再到网络层,封装成IP数据包,其目标IP(站点B的IP192.168. 10.2)和源IP(站点A的192.168.10.1)均放在包头内。从网络层到数据链路层时,必须知道目标的MAC地址,才能封装从数据帧,以便由物理层完成一个个位的转发。
②站点A首先查看自己的ARP表(Windows中用arp –r命令查看ARP表,将显示IP地址Internet Address、与MAC地址Physical Address的对应关系)。如果在ARP表中找不到目标IP地址所对应的MAC地址,站点A必须发送一个ARP广播报文,请求站点B的MAC地址。
③该ARP请求报文进入交换机后,交换机首先进行源MAC地址学习,二层芯片自动把站点A的MAC地址0011.2F06.E011及进入交换机的端口号1等信息填入到二层芯片的MAC地址表中(MAC地址表是MAC地址与端口之间的对应关系)。由于此时是一个ARP广播报文,交换机把这个广播报文在进入交换机端口所属的VLAN 10中进行广播。站点B收到这个ARP请求报文之后,会立刻发送一个ARP回复报文,这个报文是一个单播报文,源MAC地址为站点B的MAC地址0011.2F06.E012,目的MAC地址为站点A的MAC地址0011.2F06.E011。该报文进入交换机后,交换机同样进行源MAC地址学习,二层芯片同样把站点B的MAC地址0011.2F06.E012及站点B进入交换机的端口号2等信息填入到二层芯片的MAC地址表中,此时二层芯片就完成了站点A和B与端口之间的对应(MAC地址与端口之间的对应表)。根据此MAC地址表,交换机就能把此单播报文从站点A对应的端口中转发给站点A。
④一旦站点A知道站点B的MAC地址后,就在自己的ARP表中记录站点B的IP地址和MAC地址之间的对应关系。
(2)站点A产生数据帧(帧1),并在物理层发送此数据帧。
(3)交换机收到站点A发来的帧1后,首先在此数据帧上加上VLAN 10的标记,变成帧2。然后交换机通过查找MAC地址表(交换机上的命令为show mac-address-table),发现站点B连在交换机的端口2上;因此,第二层交换模块将数据帧2去除VLAN 10标记后,又变成了帧1,从端口2发送给站点B。
(4)以后A、B之间进行通信或者同一网段的其他站点想要与A或与B通信,交换机只要通过查找MAC地址表就知道该把报文从哪个端口送出了。如果在查找MAC地址表时找不到匹配表项,交换机就会在进入端口所属的VLAN中广播,从而得到目标MAC地址与端口的对应关系。这些都是由二层交换模块完成的。
下面看一下两个站点通过三层模块实现跨VLAN的通信是怎样一个过程。
(1)站点A向站点C发送数据时,站点A检查出自己与站点C不在同一子网内(分属VLAN10,VLAN20),因此站点A将把数据发送给自己的默认网关(默认网关通过TCP/IP协议中已指定)。
①站点A同样把数据从应用层传送到传输层、到网络层,再封装成IP数据包,其目标IP为站点C的IP192.168.20.1和源IP为站点A的192.168.10.1均放在包头内。从网络层到数据链路层时,必须得到默认网关的MAC地址。
②站点A先查自己的ARP表,找到默认网关的IP地址与MAC地址的对应关系。如果ARP表中没有这一项,同样要向此“默认网关”发出ARP请求报文,而“默认网关”的IP地址其实就是三层交换机上站点A所属VLAN的IP地址(SVI地址)。当发送站A对“默认网关”的IP地址广播出一个ARP请求时,交换机就向发送站A返回一个ARP回复报文,告诉站点A交换机此VLAN 10的MAC地址,同时通过软件把站点A的IP地址、MAC地址、与交换机直接相连的端口号等信息记录到三层模块相关表项中。
③站点A收到这个ARP回复报文之后,产生数据帧(帧3),并向交换机的第三层模块发送此数据帧3。
(2)交换机收到此数据帧3后,加上VLAN 10标记,形成数据帧4,交给交换机的第三层模块,第三层模块像路由器一样处理数据包。
①第三层模块打开此数据帧4,取出其中的IP包,根据目标IP地址192.168.20.1,查找路由表。在三层交换机上使用show ip route命令如下:
从而找到了目标路由为直连网段之一(VLAN 20)。
②如果路由表中没有找到匹配的表项,则第三层模块会把IP包送给CPU处理,进行软路由或提示出错。
(3)交换机第三层模块再将此IP包从VLAN 10转到VLAN 20的SVI接口上,准备重新封装成新的数据帧。
①在三层交换机中找ARP表(命令show arp),查找站点C的IP地址所对应的MAC地址,如果没有找到,则在VLAN 20范围内进行ARP广播。从下列表中可知,三层交换机的多个VLAN的SVI的MAC地址都是其三层模块的MAC地址(Hardware Addr:00E0.F90E.ACE0)。
②更新源MAC地址为VLAN 20的Hardware地址:00E0.F90E.ACE0,目标MAC地址为站点C的MAC地址0011.2f06.e021,形成新的数据帧5 (含有VLAN 20的标记)。
③交换机的第二层模块收到数据帧5后,再根据站点C的MAC地址0011.2f06.e021,在二层模块中查找VLAN 20中的MAC地址表,找出站点C所在的端口f0/3。
(4)交换机第三层模块把此数据帧5去除VLAN 20标记,产生数据帧6,从站点C所在的端口f0/3转发出去。
(5)经过一次路由后,交换机的二层模块中已经保留了不同VLAN两站点的MAC地址,如下所示:
因此,下一次站点A、C之间再通信时,交换机直接把数据帧从指定的端口转发出去。而不必再经过将数据交三层模块进行拆帧、查路由表、封帧的过程。这就是“一次路由,多次交换”的工作模式,它大大提高了转发速度。