Author:onceday date:2022年7月22日
二层交换机统ARP分组获取MAC和IP对应关系。
特点:
它对数据包的转发是建立在链路层信息——MAC(Media Access Control )地址基础之上的。
二层交换机不同的端口发送和接收数据独立,各端口属于不同的冲突域,有效地隔离了网络中物理层冲突域。
二层交换机通常使用称为ASIC(Application Specific Integrated Circuit )的硬件芯片来实现转发,由于是硬件转发,其转发性能非常高。
二层转发技术的知识点包含:MAC地址,二层交换基本原理,VLAN,IVL&SVL地址学习方式
二层交换引擎:
ASIC–ApplicationSpecific Integrated Circuit
L2FDB—Layer2 forwarding database
二层交换机通过解析和学习以太网帧的源MAC来维护MAC地址与端口的对应关系:
二层交换机收到以太网帧,将其源MAC与接收端口的对应关系写入MAC表,作为以后的二层转发依据。如果MAC表中已有相同表项,那么就刷新该表项的老化时间。
MAC表表项采取一定的老化更新机制,老化时间内未得到刷新的表项将被删除掉;
根据以太网帧的目的MAC去查找MAC表:
如果没有找到匹配表项,那么向所有端口转发(接收端口除外);
如果目的MAC是广播地址,那么向所有端口转发(接收端口除外);
如果能够找到匹配表项,则向表项所示的对应端口转发,但是如果表项所示端口与收到以太网帧的端口相同,则丢弃该帧。
二层交换机的MAC地址老化和刷新直接由硬件ASIC芯片来完成,这里介绍一下其通常采用的机制:以Broadcom 5652x交换芯片为例子。
在芯片中储存的每一个动态添加的MAC地址表项都有一个 1 bit 长度的老化标志(hit位),同时芯片有一个老化定时器用于控制地址老化;
对于新学习到的MAC地址表项,其老化标志位置1;对于已经学习到的MAC表项,如果后续有报文的源MAC与表项相同,那么将其老化标志位刷新为1;
每当芯片的老化定时器超时后,将MAC地址表中老化标志位等于1的项目,修改其老化标志位等于0;对于MAC地址表中老化标志位等于0的项目,直接删除。
在这样的老化更新机制下,MAC地址的实际老化时间并不是精确的,而是一个范围:1~2倍的老化定时器时间。
第一次老化,负责清零标志位,第二老化再删除为0的条目。
二层交换机虽然能够隔离冲突域,但是它并不能有效的划分广播域。
广播报文以及目的MAC查找失败的报文会向所有端口转发,当网络中的主机数量增多时,这种情况会消耗大量的网络带宽,并且在安全性方面也带来一系列问题。
交换机借鉴了路由结构中子网的思路,得出了虚网的概念,即通过对网络中的IP地址或MAC地址或交换端口进行划分,使之分属于不同的部分,每一个部分形成一个虚拟的局域网络,共享一个单独的广播域。这样就可以把一个大型交换网络划分为许多个独立的广播域,即VLAN。
每个VLAN都有自己的L2FDB:
两种学习方式:
IVL:Independent VLAN Learning
SVL: Shared VLAN Learning
原始共享MAC地址表的SVL方式:
根据接收到的以太网帧的源MAC信息添加或刷新MAC地址表项;
根据目的MAC信息查找MAC地址表,如果没有找到匹配项,那么在报文对应的VLAN内广播;
如果找到匹配项,但是表项对应的端口并不属于报文对应的VLAN,那么丢弃该帧;
如果找到匹配项,且表项对应的端口属于报文对应的VLAN,那么将报文转发到该端口, 但是如果表项对应端口与收到以太网帧的端口相同,则丢弃该帧。
这种类型的二层交换机转发与普通二层交换机转发基本相同,只是多了转发过程中的VLAN检查。
存在以下问题:
IVL(Independent VLAN Learning)方式的交换机在学习MAC地址并建立MAC地址表的过程中同时附加VLAN ID,同一个MAC地址可以出现在不同的VLAN中,这样的方式也可以理解为每个VLAN都有自己独立的MAC地址表。:
根据接收到的以太网帧的源MAC+VLAN-ID 信息添加或刷新MAC地址表项。
根据 目的MAC+VLAN-ID查找MAC地址表项,如果没有找到匹配项,那么在VLAN-ID对应的VLAN内广播。
如果能够找到匹配表项,则向表项所示的对应端口转发,但是如果表项所示端口与收到以太网帧的端口相同,则丢弃该帧。
IVL方式的二层交换机转发流程更加清晰,VLAN之间不会互相影响,目前实际应用中的二层交换机大多采用这种方式
利用三层交换机实现,即网络层接口。
SVI口: 一般用于作为终端PC接入三层转发设备网络层进行路由转发的接口,在链路层与之对应的概念是VLAN,二者一一对应(SVI1 <-> VLAN1,SVI2 <-> VLAN2, …);由于VLAN对应于一个虚拟的网桥,因此通过SVI接口进入到网络层进行处理的报文,在链路层已经经过了链路层的相关处理。
路由口: 路由口同样是网络层接口,IP报文可以通过路由口进入网络层,路由口与SVI口的最大区别在于路由口在链路层没有对应的接口概念,而SVI在链路层对应有一座1Q桥,1Q桥上的对应的VLAN成员口都是其潜在的链路层转发接口。
链路层上就有:Trunk、Acess口之类。
路由器由于自身成本高、转发性能低、端口数量少等特点无法很好的满足网络发展的需求。
路由器主要是通过IP转发(三层转发)来实现不同网络间的互连,后面,随着技术的发展,交换机转发高性能的特点融入到了三层转发中,就出现了三层交换机,一种实现了高速三层转发的设备。
大多数三层交换机采用ASIC硬件芯片来完成转发,ASIC芯片内部集成了IP三层转发的功能,包括检查IP报文头、修改存活时间(TTL)参数、重新计算IP头校验和、IP包的数据链路封装等等。
同一网段: 源主机在发起通信之前,将自己的IP与目的主机的IP进行比较,如果两者位于同一网段(用网络掩码计算后具有相同的网络号),那么源主机直接向目的主机发送ARP请求,在收到目的主机的ARP应答后获得对方的物理层(MAC)地址,然后用对方MAC作为报文的目的MAC进行报文发送。位于同一VLAN(网段)中的主机互访时属于这种情况,这时用于互连的交换机作二层交换转发;
不同网段: 当源主机判断目的主机与自己位于不同网段时,它会通过网关(Gateway)来递交报文,即发送ARP请求来获取网关IP地址对应的MAC,在得到网关的ARP应答后,用网关MAC作为报文的目的MAC进行报文发送。注意,发送报文的源IP是源主机的IP,目的IP仍然是目的主机的IP。位于不同VLAN(网段)中的主机互访时属于这种情况,这时用于互连的交换机作三层交换转发。
CPU通过SSP(交换机底层驱动)去设置ASIC硬件表项。
CPU用于转发的控制,维护一些软件表项。
ASIC芯片查找失败的报文,都会推送CPU处理。
CPU处理后的报文,会将表项写入ASIC芯片中,这样以后就可以直接在硬件上三层转发了。
对于需要广播ARP请求的报文,在获取了MAC地址后,转发到对应SVI口,之后,具体的物理出口是根据MAC和VLAN ID决定的。
PC A 和PC B连接在同一台三层交换机上。
PC A 检查出PC B 的IP地址2.1.1.2 与自己不在一个网段,所以向网关1.1.1.1发送ARP分组,请求1.1.1.1地址的MAC。
L3交换机接收到PC A的ARP分组,根据1.1.1.0/24 , action=cpu(cfg svi2 ip)
,直接交给CPU处理,(也会更新MAC地址表)。软件处理发现请求IP是自己的三层接口IP,因此发送ARP应答并将自己的三层接口MAC(MAC S)包含在其中。随后会把PC A的IP地址与MAC地址对应关系记录到自己的ARP表项中去。
PC A得到网关L3_SW的ARP应答后,组装ICMP报文并发送。ICMP(目的MAC=MAC S,源MAC=MAC A,源IP=1.1.1.2,目的IP=2.1.1.2)
L3_SW收到报文,根据报文的源MAC+VID(VLAN ID),更新MAC地址表。根据报文的目的MAC+VID查找MAC地址表,发现匹配了自己三层接口MAC的表项。这里说明一下,三层交换机为VLAN配置三层接口IP后,会在交换芯片的MAC地址表中添加三层接口MAC+VID的表项,并且为表项的三层转发标志置位。当报文的目的MAC匹配这样的表项以后,说明需要作三层转发,于是继续查找交换芯片的三层表项。
交换芯片根据报文的目的IP去查找其三层表项,由于之前未建立任何表项,因此查找失败,于是将报文送到CPU去进行软件处理;
CPU根据报文的目的IP去查找其软件路由表,发现匹配了一个直连网段(PC B对应的网段),于是继续查找其软件ARP表,仍然查找失败。然后L3_SW会在目的网段对应的VLAN 3的所有端口发送请求地址2.1.1.2对应MAC的ARP请求。直连网段是人工配置的,但MAC地址却需要通过ARP自动更新。
PC B收到L3_SW发送的ARP请求后,检查发现被请求IP是自己的IP,因此发送ARP应答并将自己的MAC(MAC B)包含在其中。同时,将L3_SW的IP与MAC的对应关系记录到自己的ARP表中去。
L3_SW收到PC B的ARP应答后,将其IP和MAC对应关系(2.1.1.2<==>MAC B)记录到自己的ARP表中去,并将PC A的ICMP请求报文发送给PC B,报文的目的MAC修改为PC B的MAC(MAC B),源MAC修改为自己的MAC(MAC S)。同时,在交换芯片的三层表项中根据刚得到的三层转发信息添加表项(内容包括IP、MAC、出口VLAN、出端口),这样后续的PC A发往PC B的报文就可以通过该硬件三层表项直接转发了。
PC B收到L3_SW转发过来的ICMP请求报文以后,回应ICMP应答给PC A。ICMP应答报文的转发过程与前面类似,只是由于L3_SW在之前已经得到PC A的IP和MAC对应关系了,也同时在交换芯片中添加了相关三层表项,因此这个报文直接由交换芯片硬件转发给PC
A。
这样,后续的往返报文都经过查MAC表=>查三层转发表的过程由交换芯片直接进行硬件转发了。
PC A 和PC B连接在多台三层交换机上。
PC A首先检查出目的IP地址2.1.1.2(PC B)与自己不在同一网段,因此它通过ARP解析得到网关地址1.1.1.1对应的MAC(MAC S1)。然后,PC A组装ICMP请求报文并发送,报文的目的MAC=MAC S1、源MAC=MAC A、源IP=1.1.1.2、目的IP=2.1.1.2;
L3_SW1收到报文后,首先根据报文的源MAC+VID更新MAC地址表。然后,根据报文的目的MAC+VID查找MAC地址表,发现匹配了自己三层接口MAC的表项,于是继续查找芯片的三层转发表;
由于之前未建立任何表项,因此三层转发表查找失败,于是将报文送到CPU去进行软件处理;
CPU根据报文的目的IP去查找其软件路由表,发现匹配路由2.1.1.0/24,其下一跳IP地址为3.1.1.2,于是继续查找3.1.1.2是否有对应的ARP,仍然查找失败。然后L3_SW1在下一跳地址3.1.1.2对应的VLAN 4内发起ARP请求,并得到L3_SW2的回应,从而得到IP和MAC对应关系(3.1.1.2<==>MAC S2);
L3_SW1将PC A发出的ICMP请求报文转发给L3_SW2,报文的目的MAC修改为L3_SW2的MAC(MAC S2),源MAC修改为自己的MAC(MAC S1)。同时,将刚刚用到的转发信息添加到交换芯片的三层转发表中去,包括匹配的网段2.1.1.0/24、下一跳地址的MAC(MAC S2)、出口VLAN、出端口。这样,后续发往2.1.1.2的报文就可以直接通过交换芯片硬件转发了;
L3_SW2收到报文后,与组网1中的处理类似,经过查MAC表=>查三层转发表=>送CPU=>匹配直连路由=>ARP解析=>转发报文同时添加硬件表项的过程,将报文转发给PC B,此时报文的目的MAC修改为PC B的MAC(MAC B),源MAC修改为L3_SW2的MAC(MAC S2)。这样后续发往2.1.1.2的报文就直接由交换芯片硬件转发了;
PC B收到来自PC A的ICMP请求报文后进行ICMP应答。由于在ICMP请求报文转发的过程中,每个网段的两端节点都已经通过ARP解析得到了对方的IP和MAC对应关系,因此应答报文的转发完全由交换芯片完成(查MAC表=>查三层转发表=>发送);
这样,后续的往返报文都经过查MAC表=>查三层转发表的过程由交换芯片直接进行硬件转发了。
精确匹配即目的IP地址与路由的地址信息必须完全吻合
最长匹配则是选择所有包含了目的地址的路由中掩码最长的一条
目前大多数的三层交换机均能够同时支持精确匹配表项和最长匹配表项,一般来说精确匹配表项对应于软件中的ARP表,最长匹配表项对应于软件中的直连路由和非直连路由.
一般在软件路由表建立时就将路由信息添加到硬件三层表中去,包括直连路由和非直连路由。
直连路由,对应的硬件三层表项的“to CPU”标志位始终置1,报文的目的IP匹配这样的表项以后被送往CPU处理。CPU软件会在直连网段发送ARP请求,并将获取的ARP信息作为主机路由添加到硬件表项中(主机路由对应的“to CPU”标志位置0),这样后续的同样目的IP的报文就直接通过新添的硬件表项转发了;
非直连路由,当下一跳地址的对应ARP信息还未获得时,对应的硬件三层表项的“to CPU”标志位置1,报文的目的IP匹配这样的表项以后被送往CPU处理,CPU软件会在下一跳地址对应的直连网段发送ARP请求,并使用获取的ARP信息中的下一跳MAC、出口VLAN等信息更新对应的硬件三层表项,然后将其“to CPU”标志位置0,这样后续的目的IP匹配该非直连路由的报文就能够直接通过修改后的硬件表项转发了。
发了;