VLAN路由
VLAN路由
1.1 VLAN路由的产生
引入VLAN之后,每个交换机都被划分成多个VLAN,而每个VLAN对应一个IP网段,即VLAN技术将同一个LAN上的用户在逻辑上分成了多个虚拟局域网(VLAN),只有同一个VLAN的用户才能互相交换数据。
VLAN隔离广播域,不同的VLAN之间是二层隔离的,即不同VLAN的主机发出的数据帧在交换机内部被隔离了。但是,用户建设网络的最终目的是要实现网络的互联互通,VLAN技术是为了隔离广播报文、提高网络带宽的有效利用率而设计的,而并不是为了不让网络之间互通,所以VLAN间的通信成为人们关注的焦点。
将二层交换机与路由器结合起来,使用VLAN间路由技术能使不同VLAN之间互通。因为主机与其网关处于同一个VLAN中,所以主机发出的数据帧能够到达网关,也就是相应的路由器接口。路由器接口将数据帧解封装,得到其中的IP报文后,查找路由表,转发到另外一个接口。另外一个接口连接到另一个VLAN,经过封装过程,将IP报文封装成数据帧,在另一个VLAN中发送。
但上述的VLAN间路由实现对路由器的接口数量要求较高,有多少个VLAN,就需要路由器上有多少个接口,接口与VLAN之间一一对应。显然,如果交换机上VLAN数量较多,路由器的接口数量就较难满足要求。
1.2 用802.1Q和子接口实现VLAN间路由
为了避免物理端口和线缆的浪费,简化连接方式,可以使用802.1Q封装和子接口,通过一条物理链路实现VLAN间路由。这种方式也被形象地称为“单臂路由”。
交换机的端口链路类型有Access和Trunk,其中,Access链路仅允许一个VLAN的数据帧通过,而Trunk链路能允许多个VLAN的数据帧通过。“单臂路由”正是利用Trunk链路允许多个VLAN的数据帧通过而实现的。
在这种VLAN间路由方式下,无论交换机上有多少个VLAN,路由器只需要一个物理接口就可以了,从而大大节省了物理端口和线缆的浪费。在配置这种VLAN路由时需要注意,因Trunk链路需承载所有VLAN间路由数据,因此通常应选择带宽较高的链路作为交换机和路由器相连的链路。
1.3 三层交换机的VLAN路由
采用“单臂路由”方式进行VLAN间路由时,数据帧需要在Trunk链路上往返发送,从而引入了一定的转发延迟;同时,路由器是软件转发IP报文的,如果VLAN间路由数据量较大,会消耗路由器大量的CPU和内存资源,造成转发性能瓶颈。
二层交换机和路由器在功能上的集成产生了三层交换机,三层交换机通过内置的三层路由转发引擎在VLAN间进行路由转发,从而解决了上述问题。三层交换机在功能上实现了VLAN的划分、VLAN内部的二层交换和VLAN间路由。二层交换机的功能和路由器的功能,在三层交换机中分别体现为二层VLAN转发引擎和三层路由转发引擎两个部分。二层VLAN转发引擎与支持VLAN的二层交换机的二层转发引擎是相同的,用硬件支持VLAN内的快速二层转发;三层路由转发引擎使用硬件ASIC技术实现跨网段的三层路由转发。
在使用二层交换机和路由器的组网中,每个需要与其他IP网段(VLAN)通信的IP网段(VLAN)都需要使用一个路由器接口做网关。三层交换机的应用也同样符合IP的组网模型,三层路由转发引擎就相当于传统组网中的路由器。
对于管理员来说,只需要为三层VLAN接口配置相应的IP地址,即可实现VLAN间路由。
但由于硬件实现的三层路由转发引擎速度高,吞吐量大,而且避免了外部物理连接带来的延迟和不稳定性,因此三层交换机的路由转发性能高于路由器实现的VLAN间路由。
1.4 最长匹配转发模型
路由器的路由转发根据报文的目的地址与路由表进行匹配操作。匹配的动作是用报文目的地址与路由表项的子网掩码进行“与”操作,如果“与”操作的结果和路由表项中网络地址相同,即认为路由匹配。所有匹配项中子网掩码位数最长的为最佳匹配项,报文从该表现对应接口发送;如果找不到匹配项,则根据默认路由0.0.0.0/0进行转发;如果没有默认路由则报文被丢弃。
上述这种路由选路过程称为LPM(Longest Prefix Match,最长匹配)。路由表是根据直连、静态配置和动态路由协议生成的。路由器的路由转发主要依靠CPU进行,对每个数据包都需要通过CPU系统进行查找、封装,最后转发,整体处理效率比较低。
在传统的三层路由技术中,每一个报文都要经历OSI参考模型的第三层处理,并且业务流转发是基于第三层地址的。待转发的数据,都要被上送到CPU,CPU进程解析每个数据包的目的IP地址,查找路由表,并根据最长匹配原则选择相应的路由表项,进行报文的转发。
1.5 交换机精确匹配转发
三层交换机内部的两大部分是ASIC芯片和CPU。ASIC芯片完成主要的二、三层转发功能,内部包含用于二层转发的MAC地址表以及用于三层转发的IPFDB表;CPU用于转发控制,主要维护一些软件表项,包括软件路由表、软件、ARP表等,并根据软件表项的转发信息来配置ASIC芯片的IPFDB(IP转发数据库)
从三层交换机的结构和各部分的作用可以看出,真正决定告诉交换转发的ASIC芯片中的二、三层硬件表项,而ASIC芯片的硬件表项来源于CPU维护的软件表项。
早期的三层交换机,其交换芯片多采用精确匹配的方式,他们的硬件三层表项中只包含具体的目的IP地址,并不带掩码信息。比如,在转发目的IP地址为2.1.1.2的报文时,交换机通过软件查找匹配了非直连路由2.1.1.0/24,那么就将2.1.1.2的转发信息添加到ASIC芯片的IPFDB表。如果继续来了目的IP地址为2.1.1.3的报文需要转发,则需要重新进行软件查找,并在ASIC芯片的IPFDB表中为2.1.1.3增加表项。
因此,通过多次地址学习,交换机可以把表项逐一加进来,这样后续的流量就可以直接查找IPFDB表,不需要再通过CPU查找软件路由表。这就是三层交换机所谓的“一次路由,多次交换”。
该转发方式极大地提升了报文转发效率。其中,一个流的后续报文在选择路由的时候,匹配的是32位掩码的目的主机IP地址,故称为精确匹配方式,也称为流交换技术。
从实际应用的角度看,精确匹配转发是由一定限制的。这样的选路方式和表项结构对交换芯片的硬件资源要求很高,因为芯片中集成的表项存储空间是很有限的,如果要转发大量目的IP地址不同的报文,就需要添加大量的硬件表项。
曾经泛滥一时的冲击波病毒,就导致了当时大量的只支持精确匹配的三层交换机资源耗尽。因为冲击波病毒的手段之一就是发送巨大数量的网段扫描报文,而多数三层交换机都配置了默认路由,这样,所有的报文在CPU查找软件路由表时都能够找到匹配路由,进而针对每一个病毒报文的目的IP都需要新增硬件表项,并迅速将硬件资源占满,结果造成大部分用户的正常数据流由于转发资源耗尽而得不到高速处理。
精确匹配三层交换机整个处理流程分成了3个大的部分。
(1)平台软件协议栈部分。这部分的关键功能有运行路由协议,维护路由信息表,IP协议栈的功能。在整个系统的处理流程中,这部分担负着重要的功能,当硬件不能完成报文转发的时候,这部分可以代替硬件来完成报文的三层转发。
(2)硬件处理流程。主要的表项有二层MAC地址表·和三层的IPFDB表,这两个表用于保存转发信息,在转发信息比较全的情况下,报文的转发和处理全部由硬件来完成处理,不需要软件的干预。
(3)驱动代码部分。其中,核心任务有地址解析任务和地址管理任务。地址解析任务对已经报上来的未解析的地址进行学习,以便硬件完成后续的报文的转发而不需要软件干预;地址管理任务负责FIB(Forwarding Information Base,转发信息库)表的维护操作,并将FIB表项下发到IPFDB表。FIB表的信息来源于路由表和ARP表等。
三层交换机精确匹配转发表主要包含的表项如图1-1所示,其中,IPFDB表来源于地址学习,FIB表来源于CPU维护的软件路由表,如果查找IPFDB失败,则继续查找FIB表,得到目的网段路由的下一跳和出接口等信息,如果查找FIB表失败,则上送CPU处理。
精确匹配交换机三层转发主要有IPFDB表来完成。IPFDB表的地址学习过程为:获取目的IP地址,用该IP去查找FIB表,获得下一跳IP地址和出接口,并用下一跳IP地址去查找ARP表获得其对应的MAC地址、出接口,从而该IP地址及相关信息学习到IPFDB表中。
对于学习到的目的IP地址,交换机以一定数据结构存储在IPFDB表中。IPFDB表项中维护着报文三层转发的IP地址、端口号、下一跳对应的MAC地址。当交换机学习到转发过程所需的地址表现后,三层报文转发都将由硬件自动完成,无需软件处理。
FIB表支持最长匹配查找,而IPFDB表只支持精确匹配查找,可以认为IPFDB表项为从FIB表查找到的下一跳IP地址加上下一跳IP地址在ARP表中对应的MAC地址和端口。可以看出,FIB表中一个网段路由中如果有100台主机,就需要在IPFDB表中生成100条转发表项,这就是为什么在精确匹配交换机受到大量目的IP地址变化的报文攻击时,会出现IPFDB表塞满的原因。
交换机收到数据帧后,先检查数据帧的VLAN属性,然后根据VLAN属性查找MAC地址表,交换机根据数据帧的目的MAC地址来判断是做二层转发还是三层转发。如果数据帧的目的MAC地址是本交换机的VLAN接口MAC地址,交换机查找IPFDB做三层转发,否则交换机查找MAC地址表做VLAN内二层转发。
以下是精确匹配方式交换机进行三层IP单播转发的简要步骤。
(1)交换机做三层转发时,首先以目的IP地址查找IPFDB表,如果查找成功,进行下一步处理;否则转步骤(3)以最长地址匹配查找FIB表
(2)根据目的IP地址找到下一跳,然后根据下一跳找目的MAC地址和出端口进行转发
(3)查找FIB表,如果查找成功,再查询ARP表,获得下一跳的MAC地址和出端口,并刷新IPFDB表进行下一步处理,否则转步骤(5)上送CPU处理。
(4)查找IPFDB表,然后根据目的IP地址找到下一跳,最后根据下一跳找到目的MAC地址和出端口进行转发。
(5)CPU查找软件路由表,如查找成功并且也查找到下一跳的ARP表,刷新FIB表,FIB表再刷新IPFDB表,转步骤(4)处理,否则丢弃。
1.6 交换机最长匹配转发
前面介绍了传统的路由技术和流交换技术,并且从转发处理方式的不同进行了对比分析,可以发现流交换技术相对于传统路由技术得到了很大的提高和改进,以便适应局域网中高速三层交换的需求。但是随着流交换技术的使用,出现了一个较为严重的问题,流交换技术的转发需要三层交换机处理每一个数据流的首报文,并为每个流创建一条快速转发的路径。然而ASIC芯片的快速转发路径表项数量的限制和CPU处理数据流首报文的能力限制,导致了流交换技术在某些特定的场合中不能胜任,例如某些攻击导致数据流频繁变化以及数据流非常多的情况,流交换技术就不能满足实际需求。
为了解决上述特殊情况的需求,并且不降低网络转发速率,人们结合三层路由的最长匹配算法和流交换的硬件转发优点,开发了一种能够完成路由最长匹配查找算法的ASIC芯片,并且在ASIC芯片中保存着和传统软件路由表一致的转发信息。这样既能够通过硬件实现快速的查找,又能大幅度减小转发路径的数量,因为很多个数据流(例如目的IP在同一个网段的所有数据流)可以共享同一个三层转发路径。
所以,后期的三层交换机增加了对最长匹配方式的支持,即硬件三层表项中可同时包含IP地址和掩码,在查找时遵循最长匹配原则。三层交换机的三层转发是基于硬件实现的,最长匹配方式的三层交换机即使在加载大量路由、网络路由频繁波动、网络蠕虫及其严重的情况下,仍然能保证IP报文的线速转发,因而可以保障正常业务的运行。
最长匹配三层交换机整个处理流程也分成了3个大的部分。
(1)平台软件协议栈部分。这部分的关键功能有运行路由协议,维护路由信息表,IP协议栈的功能。在整个系统的处理流程中,这部分担负着重要的功能,当硬件不能完成报文转发的时候,这部分可以代替硬件来完成报文的三层转发。
(2)硬件处理流程。主要的表项有二层MAC地址表、L3 Table和DEF IP表,这3个表用于保存转发信息,在转发信息比较全的情况下,报文的转发和处理全部由硬件来完成处理,不需要软件的干预。
(3)驱动代码部分。将软件平台维护的ARP和FIB表的转发信息转化成硬件格式并下发。
三层交换机最长匹配转发表主要包含的表项如图1-2所示,其中,有别于精确匹配转发的表项为L3 Table和DEF_IP表。
L3 Table获取用于跨网段报文下一跳的目的MAC地址,来源于ARP表和DEF_IP表,每个表项包含目的IP地址、对应的目的MAC地址、路由接口、出端口等信息。
DEF_IP表,即交换机最长地址硬件匹配表,由CPU根据软件路由表来维护。如果查找L3 Table失败,则继续查找本表,得到目的网段路由的下一跳和出接口等信息,如果查找失败,丢弃报文并由CPU确定是否发送ICMP不可达消息。
交换机接收到数据帧后,先检查数据帧的VLAN属性,然后根据VLAN属性查找MAC地址表,交换机根据数据帧的目的MAC地址来判断是做二层转发还是三层转发。如果数据帧的目的MAC是本交换机的VLAN接口MAC地址,交换机查找L3 Table做三层转发,否则交换机查找MAC地址做VLAN内二层转发。
以下是最长匹配方式交换机进行三层IP单播转发的简要步骤。
(1)交换机做三层转发时,首先以目的IP地址查找L3 Table,如果查找如成功,进行下一步处理;否则,转步骤(3)以最长地址匹配查找DEF_IP表。
(2)根据目的IP地址找到下一跳,然后根据下一跳找到目的MAC地址和出端口进行转发。
(3)查找DEF_IP表,由芯片保证最长匹配的实现。如果查找成功,获得出端口、下一跳信息,并封装、转发报文;如果查找失败,丢弃报文并由CPU确定是否发送ICMP不可达消息。
(4)查找L3 Table,然后根据目的IP地址找到下一跳,最后根据下一跳找到目的MAC地址和出端口进行转发。
1.7 本地三层转发流程介绍
(1)PCA首先检查出目的IP地址20.1.1.2与自己的不在同一网段,则进行三层转发,通过网关来转发报文。
(2)PCA检查ARP表,发现网关不在ARP表中。
(3)PCA向网关发送ARP请求,请求内容为IP地址10.1.1.1对应的MAC地址。
(4)交换机接收到PCA的ARP请求后,检查ARP请求报文,发现被请求IP是自己的 VLAN10接口的IP地址,因此发送ARP应答,并将自己VLAN10接口的MAC地址MAC_10包含在其中,同时它还会把PCA的IP地址与MAC地址对应关系记录到自己的ARP表项中去,因为PCA的ARP请求报文包含了发送者的IP和MAC地址。
(5)PCA收到ARP应答报文,学习到交换机VLAN10接口的MAC地址MAC_10。
(6)PCA发送ICMP请求报文,报文的目的IP地址为20.1.1.2,目的MAC地址为MAC_10。
(7)交换机接收到ICMP请求报文后,首先根据报文的源MAC+VLAN ID更新MAC地址表,然后根据报文的目的MAC+VLAN ID查找MAC地址表,发现匹配了自己VLAN10接口的MAC地址,判断该报文为三层转发报文。
(8)交换机根据报文的目的IP地址20.1.1.2去查找其三层转发表项,由于之前为建立任何表项,因此查找失败,于是将报文送达CPU去进行软件处理。
(9)CPU根据报文的目的IP地址去查找其软件路由表,发现匹配了一个直连网段,于是继续查找软件ARP表,仍然查找失败。任何交换机会在目的网段对应的VLAN20所有端口发送ARP请求,请求报文的源MAC地址为MAC_20,源IP地址为20.1.1.1,目的IP地址为20.1.1.2。
(10)PCB收到交换机发送的ARP请求后,检查发现被请求IP是自己的IP,因此发送ARP应答,并将自己的MAC地址MAC_B包含在其中。同时,交换机VLAN20接口的IP地址与MAC地址对应的关系记录到自己的ARP表中去。
(11)交换机收到PCB的ARP应答后,将PCB的IP地址和MAC地址对应关系记录到自己的ARP表中去,并将PCA的ICMP请求报文发送给PCB,报文的目的MAC地址修改为PCB的MAC地址MAC_B,源MAC修改为自己的VLAN20接口的MAC地址MAC_20。同时,交换机在交换芯片的三层转发表项中根据刚得到的三层转发信息添加表项(内容包括IP、MAC、出口VLAN、出端口),这样后续的PCA发往PCB的报文就可以通过硬件三层表项直接转发了。
(12)PCB收到交换机转发过来的ICMP请求报文以后,回应ICMP应答给交换机。ICMP应答报文的转发过程与前面类似,只是由于交换机在之前已经得到PCAd的IP地址和MAC地址对应关系了,也同时在交换芯片中添加了相关三层转发表项,因此这个报文直接由交换芯片硬件转发给PCA。
(13)这样,后续的往返报文都经过查MAC表、查三层转发表的过程,由交换芯片直接进行硬件转发了,这就是常说的"一次路由,多次交换"。
1.8 跨设备三层转发流程介绍
(1)PCA首先检查出目的IP地址20.1.1.2与自己的不在同一个网段,因此它通过ARP解析得到网关地址10.1.1.1对应MAC地址000F-E200-0A10。然后,PCA封装ICMP报文并发送,报文的目的MAC=000F-E200-0A10、源MAC=000F-E201-1111、目的IP=20.1.1.2、源IP=10.1.1.2
(2)SWA交换机接收到ICMP请求报文后,首先根据报文的源MAC+VLAN ID更新MAC地址表,然后根据报文的目的MAC+VLAN ID查找MAC地址表,发现匹配路自己VLAN10接口的MAC地址表项,判断该报文为三层转发报文。
(3)SWA根据报文的目的IP地址20.1.1.2去查找其三层转发表项,由于之前为建立任何表项,因此查找失败,于是将报文送到CPU去进行软件处理。
(4)CPU根据报文的目的IP地址去查找其软件路由表,发现匹配路由20.1.1.0/24,其下一跳IP地址为30.1.1.2,于是继续查找30.1.1.2是否有对应的ARP,仍然查找失败。然后SWA在下一跳地址对应的VLAN30内发起ARP请求,并得到SWB的回应,从而得到SWB的VLAN30接口的IP地址和MAC地址对应关系。
(5)SWA将PCA发出的ICMP请求报文转发给SWB,报文的目的MAC地址修改为000F-E200-0B30,源MAC地址修改为自己的VLAN30接口的MAC地址000F-E200-0A30。同时,SWA将刚刚的转发信息添加到交换芯片的三层转发表中,包括匹配的网段20.1.1.0/24、下一跳地址的MAC地址、出口VLAN、出端口。这样后续发往20.1.1.2的报文就可以通过该硬件三层表项直接转发了。
(6)SWB收到报文后,与直连VLAN间流量转发中的处理类似,经过查MAC表、查三层转发表、送CPU匹配直连路由、ARP解析、转发报文同时添加硬件表现的过程,将报文转发给PCB,此时报文的目的MAC地址修改为PCB的MAC地址000F-E202-2222,源MAC地址修改为SWB的VLAN20接口的MAC地址000F-E200-0B20。这样后续发往20.1.1.2的报文就可以通过该硬件三层表项直接转发了。
(7)PCB收到SWB转发的PCA的ICMP请求报文后进行应答。由于在ICMP请求报文转发过程中,每个网段的两端节点都已经通过ARP解析得到对方的IP和MAC对应关系,因此应答报文的转发完全由交换芯片完成。
(8)这样,后续往返报文都经过查MAC表、查三层转发表的过程,由交换芯片直接进行硬件转发。