1、二层转发
这里讨论以太报文的二层转发,即基于MAC地址的转发。一般在交换机的二层口(说明1)上,通过MAC层将接口设置为混杂模式(说明2),性能允许(说明4)的情况下,将所有报文上送CPU(说明6),接口上收到报文以后,对于合法报文(说明3)(说明5),首先(说明7)检查该MAC地址,将目的MAC为0xFFFFFFFF的广播报文在VLAN内进行广播,将MAC地址第一个字节BIT0为1的多播报文,按照多播报文处理。对于单播报文,先查MAC地址表,如果查到,则将报文发往相应的接口;如果未查到,未知单播向VLAN内的所有接口进行广播;还有一种情况就是如果目的MAC就是本接口的MAC,则说明报文发往本机,报文上送CPU,对IP地址进行检查,如果目的IP为本VLAN接口的IP地址,则作为正常报文接收;如果IP地址不是本机VLAN接口的IP地址,则查路由表,将报文进行三层转发。
说明1:二层口即用MAC地址唯一标识出的以太口,无法配置IP地址,若要配置IP,需要建立一个VLAN,并将二层口划归该VLAN,然后为VLAN建立一个VLAN接口,VLAN接口是一个三层虚接口,可以通过vlan接口,间接的为其配置IP地址。 一般情况下,二层口都会默认属于一个VLAN。
说明2:混杂模式允许目的MAC不是本接口MAC的报文进行上送;非混杂模式先将本接口的MAC地址设置到MAC层,然后开启非混杂模式,MAC层将自动丢弃目的MAC为非本接口MAC的报文,三层口一般设置为非混杂模式,让MAC曾屏蔽不是发往本接口的报文。
说明3:报文上送CPU以后,CPU首先会判断报文合法性,长度不足64B的runt帧、长度不足64B并且CRC检查错误的帧、长度正常但是CRC检查错误的帧、长度超大的帧等都会被直接丢弃;另外,MAC芯片还可能丢弃字节检查出现不够8bit的un-aligned帧,前述报文也可能被某些MAC芯片直接丢弃,并在MAC寄存器中给出丢弃报文的统计。
说明4:对于非线速转发的设备,如果打入线速的流量,CPU处理不过来,端口上的收包BUFF不够用后,会有报文被直接丢弃,这些丢弃的报文不会被统计到。一般情况下,会开启端口上的流控功能,通过MAC芯片自动向对端发送PAUSE帧,以通知对方自己无法处理所有报文,要真正生效,需要对端解析PAUSE帧才行。
说明5:对于STP相关的BPDU等不需要参与转发的协议报文,直接由上层协议模块处理。
说明6:这里的CPU,包括交换芯片。在传统的二层交换机上,大部分转发任务是由转发芯片完成。交换芯片一般又ASIC逻辑实现,所以能实现通用CPU无法达到的高性能。
说明7:交换机根据报文进入的端口不同,会对报文进行不同的处理。端口分为三种类型:第一种为access口,access口一定属于并且同一时刻只能属于一个VLAN,如果用户没有配置端口所属的vlan,一般属于默认vlan 1,这种口一般用来连接终端设备,如用户的PC机,进入此端口的报文,交换机会给报文加上VLAN tag,然后进行处理,tag中的VLAN值即为access口当前处于的vlan;报文输出access口之前,都会将vlan tag去掉后再发送。第二种是TRUNK口,trunk口可以同时属于多个VLAN,并且属于一个默认VLAN(一般是VLAN1),进入该口的报文都会检查VLAN TAG字段,如果报文不带tag,则会给报文加上默认vlan的vlan tag,如果带VLAN tag,则会检查tag中的vlan值,如果不是trunk口所属的vlan之一,则直接丢弃报文。输出trunk口的报文除默认VLAN的报文外都会被打上vlan tag,trunk口一般用来连接交换机。第三种是hybrid口,用户可以指定从hybrid口输出的报文是否带tag,但是从hybrid输入的报文的检查基本与trunk口一致,带tag则检查合法性,不带tag则打上默认vlan的tag。虽然报文在交换机内部会加上vlan tag字段,但是一般情况下,报文经过交换机转发后不会改变,尤其是MAC和IP等字段。
2、三层转发
这里讨论以太报文的三层转发(说明2),如果接口收到的报文,目的MAC是本接口的MAC,但是目的IP并不是本接口的IP地址,那么就需要根据IP地址进行转发。三层转发根据路由表进行,路由表记录了本设备学习到的IP地址与接口的关系。路由表中的路由表项分为直连路由、静态路由和动态路由。直连路由由设备从与其直接相连的网络设备中获取到(说明1),报文转发优先选择直连路由指向的接口。静态路由是网络管理员手工配置的路由表项,优先级低于直连路由。动态路由是通过路由协议从别的路由器获取到的,在转发中优先级最低。在负载分担的场景中,可能为同一个IP地址制定多条不同的等价路由,可以将报文发往不同的接口。如果无法给报文找到路由信息,报文将被丢弃。
说明1:路由学习的一个重要手段就是ARP协议,如果没有为一个报文找到路由信息,并且某个接口与该报文的目的IP在一个网段,那么将通过该接口发送广播报文,询问是否有设备持有报文的目的IP,如果直连的网络中有设备,该设备回复报文,完成路由学习,报文将被转发。设备上有可能支持免费ARP功能,它将定时向网络发送特定的ARP报文,实时上报自己的IP/MAC地址,防止IP地址冲突。有一种基于ARP的攻击时向路由器发送错误的ARP报文,携带一些重要的IP地址,这样路由器就会误以为攻击发起方持有那个重要IP,将报文转发给它,导致服务不可用,这种情况下,管理员一般在接口上配置拦截一些ARP报文,保证重要的IP地址的MAC不被更新。
说明2:一般实现三层转发用路由器或者三层交换机,路由器可以实现不同类型接口间(以太口、3G口、EI、T1口)的报文转发,报文一般都经过CPU处理。三层交换机转发偏重于VLAN间的以太接口报文转发,转发流程还是主要在ASIC实现的交换芯片上完成。