依据二层(链路层)信息进行数据帧转发的称为二层交换,仅支持二层交换的交换机称为二层交换机;
依据三层(网络层)信息进行数据包转发的称为三层转发,支持三层交换的交换机称为三层交换机。
HUB、同轴电缆都是典型的物理层设备,所有互联的设备位于一个冲突域中,网络流量增大时冲突不断,网络吞吐量严重降低。二层交换机的出现,大大减小了冲突域的范围。
二层交换机工作在OSI模型的第二层,即数据链路层,它对数据包的转发建立在链路层信息--MAC地址的基础之上。内部使用硬件交换芯片(ASIC)来实现转发。由于是硬件转发,其转发性能很高。二层交换机不同端口属于不同的冲突域,接收发送数据独立,因此有效的隔离了物理层冲突域。
每个以太网帧的枕头,都包含一个目的MAC和一个源MAC,作用是标志帧的源节点和目的节点的物理地址。一个MAC地址48bit,从应用上分为单播地址、组播地址、广播地址:
1)单播地址:第一个字节的最低位为0,用于标志唯一的设备;
2)组播地址:第一个字节的最低位为1,用于标志同属一组的多个设备;
3)广播地址:48bit全为1,用于标志同一网段中的所有设备;
以太网帧结构如图:
二层交换机通过解析和学习以太网帧的源MAC来维护MAC地址与端口的对应关系(保存MAC与端口的对应关系成为MAC表),通过其目的MAC来查找MAC表决定向哪个端口转发数据。
基本流程:
1)二层交换机收到以太网帧,将其源MAC与接收端口的对应关系写入MAC表,作为以后的二层转发依据。如果MAC表中已有相同表项,则刷新该表项的老化时间。MAC表项在老化时间内未得到刷新会被删除掉;
2)根据帧的目的MAC去查找MAC表,如果没有找到匹配表项,则向所有端口转发(除接收端口);如果目的MAC是广播MAC,则向除接收端口外的所有端口转发;如果找到匹配表项,则向表项所对应的端口转发;如果表项所对应的端口与收到的以太网帧端口相同,则丢弃该帧;
二层交换机的MAC地址老化和刷新直接由硬件交换芯片ASIC完成。
MAC表老化与刷新机制:
1)芯片中存储的每个动态添加的MAC地址表项都有1个bit长度的老化标志,同时芯片有一个老化定时器控制地址老化;
2)对于新学习到的MAC地址表项,老化标志位置1,得到后续报文的刷新后,老化标志位也置1;
3)芯片的老化定时器超时后,MAC地址表中老化标志位为1的项目,修改其来华标志位等于0,;对于MAC地址表中老化标志为0的项目,直接删除。
MAC地址实际老化时间:1~2倍的老化定时器时间。
二层交换机能隔离冲突域,但并不能有效的划分广播域。网络中主机增加时,大量广播报文会消耗网络带宽且不安全。
vlan即虚拟局域网,遵循IEEE802.1Q标准,它在原来的以太帧源MAC字段后面加入VLAN Tag。如图:
VLAN Tag各字段含义:
Type:固定值0x8100;
user priority:用户优先级,用于区分流量等级;
flag:该bit在以太网中固定取0;
vlan-id:取值0–4095,用于标志vlan;
不同vlan之间是二层隔离的,通过将不同的主机划分到不同vlan中去,可以有效的一直广播域。
vlan的划分:
基于端口、基于mac、基于ip、基于协议等待。基于端口使用最广泛。
通过收到untag报文的端口来确定报文属于哪个vlan。untag报文进入交换机后,会根据vlan划分被加上vlan tag,然后进行后续转发处理。如果报文自身带了vlan tag,接收端口直接根据其中的vlan id来确定报文是该丢弃还是上送进行后续处理。
如上图“两台交换机之间的链路一般称为trunk链路,传输的报文均带vlan tag,报文进入交换机后直接根据其vlan id来区分vlan。
交换机引入vlan后:
1)有效控制广播域范围,广播流量尽在vlan内转发;
2)配置灵活,虚拟局域网的范围可根据需要随时调整;
3)不通vlan之间二层隔离,跟高安全。
SVL方式(shared vlan learning)方式的二层交换机在学习MAC地址并建立MAC地址表的过程中并不附加VLAN ID,或者说它的mac地址表为所有vlan共享使用。
svl方式二层转发流程:
1)根据收到的以太网帧的源MAC信息添加或刷新MAC地址表项;
2)根据目的MAC信息查找MAC地址表,如果没有找到匹配项,则在报文对应的vlan内广播;
3)如果找到匹配项,单报文对应的vlan和对应端口的vlan不匹配,则丢弃该帧;
4)如果找到匹配项,且表项对应vlan属于报文对应vlan,则将报文转发到该端口;如果表项对应的端口与收到以太网帧的端口相同,则丢弃该帧。
存在问题:
不通vlan中的两个主机具有相同的mac,则会导致共享的mac表中对应表项的端口不断变化,则具有相同mac的不同vlan的主机通信受影响。
IVL方式(independent vlan learning)的交换机在学习mac地址并建立mac地址表的过程中同时附加vlan id,同一个mac地址可以在不同vlan中出现,也可理解为每个vlan都有自己独立的mac地址表。
二层转发流程如下:
1)根据收到的以太网帧的源MAC + VLAN-ID信息添加或刷新MAC地址表项;
2)根据DMAC + vlan-id查找mac地址表项,如果没找到则在vlan-id对应的vlan内广播;
3)如果能够匹配到表项,则向表项所示对应端口转发,如果对应端口与报文入端口相同,则丢弃该帧。
路由器通过IP转发(三层转发)实现不同网络间的互连。
三层交换机将二层交换机的高性能转发特性应用到三层转发中,实现了高速三层转发。
大多三层交换机采用ASIC硬件芯片完成转发,ASIC芯片内部集成了IP三层转发的功能,包括检查IP报文头、修改TTL、重新计算IP头校验和、IP包的数据链路封装等。
路由器和三层交换机的区别:
路由器的三层转发主要依靠CPU进行,而三层交换机的三层转发依靠ASIC芯片完成。芯片转发性能优于cpu转发,因此性能优于路由器。
路由器具有丰富的接口类型、流量服务等级控制、路由能力强等优于三层交换机的特性。
目前三层交换机一般通过VLAN划分二层网络并实现二层交换,同时能够实现不同vlan间的三层IP互访。
网络互访行为:
1)同一网段
源主机发起通信前,比较自己的IP和目的IP,如果两者属于同一网段则源主机发起arp请求,请求目的主机的mac地址,收到目的主机的arp应答后得到目的主机的mac地址。然后用目的主机的mac地址作为报文的目的mac进行报文发送;
2)不同网段
当源主机判断自己IP与目的主机IP不在同一网段时,会通过网关来递交报文。即发起ARP请求来获取网关IP地址的对应MAC,在得到网关的ARP应答后,用网关的MAC作为报文的目的mac进行报文发送。报文的源IP仍是发送主机的IP,目的IP仍是目的主机的IP。用于互连不同网段的三层交换机作三层交换转发。
如上图,三层交换机内部的两大部分是ASIC和CPU,作用如下:
1)ASIC:完成二三层转发功能,内部包含用于二层转发的MAC地址表及用于IP转发的三层转发表;
2)用于转发的控制,主要维护一些软件表项(包括软件路由表、软件ARP表等),并根据软件表项的转发信息来配置ASIC的硬件三层转发表。CPU本身也可完成软件三层转发,转发性能不如ASIC芯片。
如上图PCA与PCB位于不同网段。对于L3_SW三层交换机来说,这两台主机都位于它的直连网段,他们的IP对应的路由都是直连路由。
PCA向PCB发起ping请求时,流程如下(假设三层交换机上未建立任何硬件转发表项):
1)PCA检查目的主机IP与自己不再同一网段,发出请求网关1.1.1.1对应的MAC的arp请求;
2)L3_SW收到PCA的arp请求后,检查被请求IP时自己的三层接口IP,因此发送arp应答并将自己的三层接口的MAC地址包含在其中。同时还会把PC A的IP地址与MAC地址对应关系记录到自己的ARP表项中;
3)PC A得到网关的ARP应答后,组装ICMP请求并发送,报文目的MAC为MAC S、源MAC 为MAC A,源IP为1.1.1.2,目的IP为2.1.1.2;
4)L3_SW收到报文后,先走l2逻辑,首先根据报文的源MAC和vlan id更新mac地址表。然后,根据报文的目的MAC+vlan id查找MAC地址表,发现匹配了自己三层接口MAC的表项。三层交换机为vlan配置三层接口IP后,会在交换芯片的MAC地址表中添加三层接口MAC+vlan id的表项,并且为表项的三层转发标志位置位。当报文的目的mac+vlan id匹配到这样的表项后,说明需要作三层转发,于是继续走l3逻辑,继续查找交换芯片的三层表项;
5)交换芯片根据目的IP查找三层表项,由于之前未建立任何表项,因此查找失败,将报文上送CPU软件处理;
6)CPU根据报文的目的IP查找路由表,发现匹配了一个直连网段,于是继续查找其软件ARP表,仍然失败。然后L3_SW在目的网段对应的vlan 3 的所有端口发送请求地址为2.1.1.2的arp请求;
7)PCB收到L3_SW发送的ARP请求后,检查发现被请求IP是自己的IP,因此发送ARP应答并将自己的MAC(MAC B)包含在其中。同时,将L3_SW的IP与MAC的对应关系(2.1.1.1<==>MAC S)记录到自己的ARP表中去;
8)L3_SW收到PC B的arp应答后,将其IP和MAC对应关系(2.1.1.2《---》MAC B)记录到自己的ARP表中,并将PC A的ICMP请求报文发送给PC B,报文的目的MAC改为MAC B,源MAC修改为自己的MAC.同时,在交换芯片的三层表项中根据刚得到的三层转发信息添加表项(IP、MAC、出口vlan、出端口),这样后续PC A发往PC B的报文就可以通过该硬件三层表项直接转发了;
9)、PC B收到L3_SW转发过来的ICMP请求报文以后,回应ICMP应答给PC A。过程与前面类似,之前L3_SW在之前已经得到PC A的IP和MAC对应关系了,也同时在交换芯片添加了PC A 相关的三层表项,因此报文直接由交换芯片硬件转发给PC A;
10)这样,后续PC A发往PC B的报文都经过查MAC表---》查三层转发表的过程由交换芯片直接进行硬件转发了。
三层交换机利用了一次路由(收包上CPU处理并建立三层硬件表项)、多次交换(后续芯片硬件转发)的原理实现了转发性能与三层交换的完美统一。
另一种组网的三层转发流程:
假设L3_SW1上配置静态路由:ip route 2.1.1.0/24 3.1.1.2; L3_SW2上配置静态路由:ip route 1.1.1.0/24 3.1.1.1
如上组网,PC A与PC B通信过程如下(两个交换机上未建立任何硬件表项):
(1)PC A首先检查出dip与自身ip不在同一网段,因此它通过解析得到网管1.1.1.1的mac。然后PC A组装ICMP请求发送出去,保温dmac未MAC S1、源MAC为MAC A,源ip为1.1.1.2 dip为2.1.1.2;
(2)L3 SW1收到报文,根据源mac + vid更新mac地址表。然后根据dmac+vid查找mac表,发现匹配了自己三层接口mac的表项,于是继续查找芯片的三层转发表;
(3)由于之前未建立任何表项,因此三层转发表查找失败,于是将报文上送cpu处理;
(4)CPU根据报文dip去查找软件路由表,发现匹配静态路由2.1.1.0/24,其下一跳地址为3.1.1.2,于是继续查找3.1.1.2是否有对应的arp,仍然查找失败。然后L3_SW1在vlan4内发起arp请求,得到L3_SW2的回应,从而得到ip和mac的对应关系(3.1.1.2《--》mac s2);
(5)L3_SW1将PC A发出的ICMP请求报文转给L3_SW2,报文dmac修改为L3_SWW2的mac,源mac修改为自己的mac(mac s1)。同时将刚用到的转发信息添加到交换芯片的三层转发表中。包括匹配的网段2.1.1.0/24,下一跳的mac、出口vlan、出端口等。这样以后发往2.1.1.0/24网段的报文就可以直接通过芯片硬件转发了;
(6)L3_SW2收到报文,经过查MAC 表--->查三层转发表---->送cpu--->匹配直连网段路由--->ARP解析---->转发报文同时添加到硬件表项的过程,将报文转发给PC B,此时报文的目的MAC修改为PC B的mac,源mac修改为L3_SW2的mac。这样后续发往2.1.1.2的报文就可以直接由交换芯片硬件转发了;
(7)PC B收到来自PC A的ICMP请求报文后进行ICMP应答。由于在ICMP请求报文转发过程中,每个网段的两端节点都已经通过ARP解析得到对方的IP和MAC对应关系,因此应答报文全交由交换芯片完成(查MAC表--->查三层转发表---->发送)
(8)这样,后续往返报文都经过查MAC表---->查三层转发表的过程由交换芯片直接进行硬件转发。
三层交换机的转发有以下特点:
(1)首包cpu转发,同时建立芯片硬件表项;后续包由交换芯片直接硬件转发,即“一次路由,多次交换”;
(2)交换芯片的硬件转发并不关心路由的具体下一跳ip地址,硬件三层表项中只包含了目的地址(或网段)、目的ip(或下一条ip)对应的mac、出口vlan、出端口;(并非所有的三层交换机的硬件三层表项都包含出端口);
(3)ip报文每经过一次三层转发,他的源、目的mac都会变化,但是源、目的ip是始终不变的。
三层交换转发中,交换芯片ASIC起到了至关重要的作用,因此三层交换机的性能和转发特点主要取决于交换芯片的实现机制。
三层转发必然需要路由信息,而转发过程中路由选择决定了报文的最终出口,三层交换机将这种路由功能整合到交换芯片中去了。路由选择存在精确匹配和最长匹配两种方式。精确匹配即目的IP地址与路由的地址信息必须完全吻合,而最长匹配则是选择所有包含了目的地址的路由中掩码最长的一条。
精确匹配:
早期三层交换机上交换芯片多采用精确匹配方式。其硬件三层表项总只包含具体的目的ip地址,不带掩码信息。如转发dip为2.1.1.2的报文时,上送cpu软件查找了非直连路由2.1.1.0,触发了2.1.1.2的arp学习,最终下发2.1.1.2的转发信息到交换芯片中去;如果后续过程来了2.1.1.0/24网段的dip非2.1.1.2的报文同样需要上送cpu、arp学习后再下发路由到芯片。这种选路方式和表项结构对交换芯片的硬件资源要求很高,因为芯片中表项存储空间有限,精确匹配方式转发大量报文时需要添加大量的硬件表项。冲击波病毒:发送大量网段扫描报文,每个病毒ip报文都会下发硬件转发表项,导致硬件芯片资源耗尽,正常数据流因转发资源耗尽得不到高速处理;
最长前缀匹配:
硬件三层表项中包含ip地址和掩码,在查找时遵循最长匹配原则。这种类型的交换机在软件路由表建立时就将路由信息添加到硬件三层表中去,包括直连路由和非直连路由。对于直连路由,对应的硬件三层表项的tocpu标志位始终置1,报文的dip匹配这样的表项以后被送往cpu处理,cpu软件会在直连网段发送arp请求,并将获取的arp信息作为主机路由添加到硬件表项中(对应tocpu标志位置0),这样后续同样目的ip的报文就直接通过硬件表项转发了。对于非直连路由,当下一条地址对应的arp信息还未获得时,对应的硬件三层表项tocpu标志位置1,报文dip匹配这样的路由后被送往cpu处理,cpu会在吓一跳地址对应的直连网段内发送arp请求,并获得arp信息中的下一跳mac、出口vlan等信息更新对应的硬件三层表项,然后将其tocpu标志位置0,后续匹配到该非直连路由的报文就能够直接通过修改后的硬件表项转发了。
一般精确匹配对应于软件中的arp表项、最长匹配表项对应于软件中的直连路由和非直连路由。
硬件表项由目的ip(网段)、目的ip(下一跳ip)对应mac、出口vlan、出端口构成。采用此种表项的三层芯片一般直接通过查找三层表项就可以完成转发。这种处理机制流程简单,效率高,但也使得cpu软件对硬件表项的配置控制比较复杂。因为当ip地址对应的mac和物理端口变化时,就必须对三层转发表项进行更新。在交换机上二层信息变化的可能性较大,特别是交换机支持链路聚合、生成树等冗余机制,对于某些特殊环境,cpu不得不经常更新三层转发表,一旦更新出问题(如出端口错误),必然对转发造成严重不利影响。
因此部分三层交换机的硬件三层表项只包括目的ip(网段)、目的ip(或下一跳ip)对应mac、出口vlan,从转发流程看有以下变化:根据dip查找三层转发表后,只得到了dip(或下一跳)对应mac、出口vlan;然后根据dmac和vlan去查mac表得到出接口,如果查mac表失败则在vlan内广播。此处理机制增加了芯片处理复杂度,但流程清晰合理。物理出口变化只需要反映在mac地址表中就可以,硬件三层表无需频繁更新。
1)、不支持vlan的; 交换机学习维护mac与port的映射关系;收到报文后,根据报文的dmac查找映射表,找出报文的出端口后将报文转发到该端口;
2)、svl型:共享vlan形式的交换机; 交换机学习维护mac地址与port的映射关系;收到报文后先查根据dmac查找对应的映射关系表得到报文的出接口,然后检查出端口所属的vlan与报文携带的vlan是否相同,相同则转发不同则丢弃;
3)、ivl型:独立vlan形式的交换机; 交换机学习维护mac地址、vlan与port的映射关系;收到报文后根据报文dmac、vlan查找映射关系表得到报文的出接口,将报文转发到对应的出接口;