1、一个MAC地址有48bit(6个字节),从应用上可以分为单播地址、组播地址、广播地址:1)单播地址:第1字节的最低位为0,比如0000-0EF3-0038,一般用于标志唯一的设备;2)组播地址:第1字节的最低位为1,比如0100-5E00-0001,一般用于标志同属一组的多个设备;3)广播地址:所有48bit全为1,即FFFF-FFFF-FFFF,它用于标志同一网段中的所有设备。在常用的以太网帧结构中,目的、源MAC的位置如图3所示。图3 常见的以太网帧结构 二层交换基本原理二层交换机通过解析和学习以太网帧的源MAC来维护MAC地址与端口的对应关系(保存MAC与端口对应关系的表称为MAC表),
2、通过其目的MAC来查找MAC表决定向哪个端口转发,基本流程如下:1)二层交换机收到以太网帧,将其源MAC与接收端口的对应关系写入MAC表,作为以后的二层转发依据。如果MAC表中已有相同表项,那么就刷新该表项的老化时间。MAC表表项采取一定的老化更新机制,老化时间内未得到刷新的表项将被删除掉;2)根据以太网帧的目的MAC去查找MAC表,如果没有找到匹配表项,那么向所有端口转发(接收端口除外);如果目的MAC是广播地址,那么向所有端口转发(接收端口除外);如果能够找到匹配表项,则向表项所示的对应端口转发,但是如果表项所示端口与收到以太网帧的端口相同,则丢弃该帧。从上述流程可以看出,二层交换通过维护
3、MAC表以及根据目的MAC查表转发,有效的利用了网络带宽,改善了网络性能。图4是一个二层交换的示例。图4 二层交换示例二层交换机的MAC地址老化和刷新通常直接由硬件ASIC芯片来完成,这里顺便介绍一下其通常采用的机制:1)在芯片中储存的每一个动态添加的MAC地址表项都有一个 1 bit 长度的老化标志,同时芯片有一个老化定时器用于控制地址老化;2)对于新学习到的MAC地址表项,其老化标志位置1;对于已经学习到的MAC表项,如果后续有报文的源MAC与表项相同,那么将其老化标志位刷新为1;3)每当芯片的老化定时器超时后,将MAC地址表中老化标志位等于1的项目,修改其老化标志位等于0;对于MAC地址
4、表中老化标志位等于0的项目,直接删除。在这样的老化更新机制下,MAC地址的实际老化时间并不是精确的,而是一个范围:12倍的老化定时器时间。二层交换机虽然能够隔离冲突域,但是它并不能有效的划分广播域。因为从前面介绍的二层交换机转发流程可以看出,广播报文以及目的MAC查找失败的报文会向所有端口转发,当网络中的主机数量增多时,这种情况会消耗大量的网络带宽,并且在安全性方面也带来一系列问题。当然,通过路由器来隔离广播域是一个办法,但是由于路由器的高成本以及转发性能低的特点使得这一方法应用有限。基于这些情况,二层交换中出现了VLAN技术。 支持VLAN的二层交换机 VLAN简介VLAN,即Virtual
5、 Local Area Network(虚拟局域网),遵循IEEE802.1Q标准,它在原来的以太网帧源MAC字段的后面加入了4个字节的VLAN Tag,这4字节的结构如图5所示。图5 VLAN Tag示意图VLAN Tag中各字段的含义如下:Type:取固定值0x8100,用于标志VLAN Tag;User Priority:用户优先级,用于流量的等级划分;Flag:该bit在以太网中固定取0;VLAN-ID:取值为04095,用于标志不同VLAN。由于不同VLAN之间是二层隔离的,通过将不同的主机划分到不同的VLAN中去,就有效的控制了广播域的范围。我们知道,通常情况下主机发出的报文都是不
6、带VLAN Tag的(称为Untagged报文),那么如何将这样的报文划分到某个VLAN中去呢。VLAN划分的方法有多种,包括基于端口划分、基于MAC划分、基于IP划分、基于协议划分等等。目前,基于端口来划分VLAN是使用最为广泛的,也就是通过收到报文的端口来决定Untagged报文属于哪个VLAN。当Untagged报文进入交换机内部以后,会根据VLAN划分被加上VLAN Tag,然后进行后续转发处理。当然,如果报文本身是带了VLAN Tag的,就直接根据其中的VLAN ID来决定了。图6是一个VLAN应用的示意图。图6 VLAN应用示意图图6中,两台二层交换机之间的链路一般称为Trunk链
7、路,其上传输的一般都是带VLAN Tag的报文(称为Tagged报文),这样的报文进入交换机以后直接根据其VLAN ID来区分VLAN。交换机引入VLAN后,带来了以下好处:1)有效控制广播域范围,广播流量仅在VLAN内转发;2)配置灵活,虚拟局域网的范围可根据需要随时调整;3)由于不同VLAN之间二层隔离,带来了更高的安全性。有关VLAN的内容这里不再深入讨论,感兴趣的同学可参考其他VLAN相关文档。支持VLAN的二层交换机,其二层转发和MAC地址维护方式都发生了一定的变化,下面分别讨论两种不同的MAC地址维护方式的交换机。 SVL方式的二层交换机SVL(Shared VLAN Learni
8、ng)方式的二层交换机在学习MAC地址并建立MAC地址表的过程中并不附加VLAN ID,或者说它的MAC地址表是为所有VLAN共享使用的。它的二层转发基本流程如下:1)根据接收到的以太网帧的源MAC信息添加或刷新MAC地址表项;2)根据目的MAC信息查找MAC地址表,如果没有找到匹配项,那么在报文对应的VLAN内广播;3)如果找到匹配项,但是表项对应的端口并不属于报文对应的VLAN,那么丢弃该帧;4)如果找到匹配项,且表项对应的端口属于报文对应的VLAN,那么将报文转发到该端口,但是如果表项对应端口与收到以太网帧的端口相同,则丢弃该帧。这种类型的二层交换机转发与普通二层交换机转发基本相同,只是
9、多了转发过程中的VLAN检查。这样的交换机可能遇到下述问题:位于不同VLAN的主机(或网络设备)具有相同的MAC地址,由于SVL交换机所有VLAN共享一个MAC表,这样对应的MAC表项中端口就会不断的变化,而且两个VLAN的报文转发也会受到影响,这种情况如图7所示。图7 SVL二层交换示意图图7中,VLAN 10的PC A发送给PC B的报文由于MAC地址表查找结果与VLAN不符而被丢弃了;同理,当MAC B学习到PORT 2时,VLAN 20的PC D和PC C之间的通信就会出现问题。这样,虽然不同的主机被隔离在了不同的冲突域和广播域中,但是MAC地址却可能导致不同VLAN的通信相互影响。在
10、实际应用中,SVL方式的二层交换机已经比较少见了。 IVL方式的二层交换机IVL(Independent VLAN Learning)方式的交换机在学习MAC地址并建立MAC地址表的过程中同时附加VLAN ID,同一个MAC地址可以出现在不同的VLAN中,这样的方式也可以理解为每个VLAN都有自己独立的MAC地址表。1)根据接收到的以太网帧的源MACVLAN-ID信息添加或刷新MAC地址表项;2)根据目的MACVLAN-ID查找MAC地址表项,如果没有找到匹配项,那么在VLAN-ID对应的VLAN内广播;3)如果能够找到匹配表项,则向表项所示的对应端口转发,但是如果表项所示端口与收到以太网帧的
11、端口相同,则丢弃该帧。SVL方式交换机上可能遇到的转发问题,在IVL交换机中得以解决,如图8所示。图8 IVL二层交换示意图IVL方式的二层交换机转发流程更加清晰,VLAN之间不会互相影响,目前实际应用中的二层交换机大多采用这种方式。3. 三层交换基本原理早期的网络中一般使用二层交换机来搭建局域网,而不同局域网之间的网络互通由路由器来完成。那时的网络流量,局域网内部的流量占了绝大部分,而网络间的通信访问量比较少,使用少量路由器已经足够应付了。通常的组网结构如图9。 图9 二层交换机路由器组网但是,随着数据通信网络范围的不断扩大,网络业务的不断丰富,网络间互访的需求越来越大,而路由器由于自身成本
12、高、转发性能低、端口数量少等特点无法很好的满足网络发展的需求。我们知道,路由器主要是通过IP转发(三层转发)来实现不同网络间的互连,那么是否能够将交换机的高性能应用到三层转发中去呢?答案是肯定的,三层交换机就是这样一种实现了高速三层转发的设备。大多数三层交换机采用ASIC硬件芯片来完成转发,ASIC芯片内部集成了IP三层转发的功能,包括检查IP报文头、修改存活时间(TTL)参数、重新计算IP头校验和、IP包的数据链路封装等等。三层交换机的组网结构如图10所示。 图10 三层交换机组网结构路由器的三层转发主要依靠CPU进行,而三层交换机的三层转发依靠ASIC芯片完成,这就决定了两者在转发性能上的
13、巨大差别。当然,三层交换机并不能完全替代路由器,路由器所具备的丰富的接口类型、良好的流量服务等级控制、强大的路由能力等仍然是三层交换机的薄弱环节。目前的三层交换机一般是通过VLAN来划分二层网络并实现二层交换,同时能够实现不同VLAN间的三层IP互访。在讨论三层交换机的转发原理之前有必要交代一下不同网络的主机之间互访时的行为:1)源主机在发起通信之前,将自己的IP与目的主机的IP进行比较,如果两者位于同一网段(用网络掩码计算后具有相同的网络号),那么源主机直接向目的主机发送ARP请求,在收到目的主机的ARP应答后获得对方的链路层(MAC)地址,然后用对方MAC作为报文的目的MAC进行报文发送。
14、位于同一VLAN(网段)中的主机互访时属于这种情况,这时用于互连的交换机作二层交换转发;2)当源主机判断目的主机与自己位于不同网段时,它会通过网关(Gateway)来递交报文,即发送ARP请求来获取网关IP地址对应的MAC,在得到网关的ARP应答后,用网关MAC作为报文的目的MAC进行报文发送。注意,发送报文的源IP是源主机的IP,目的IP仍然是目的主机的IP。位于不同VLAN(网段)中的主机互访时属于这种情况,这时用于互连的交换机作三层交换转发。 三层交换机硬件结构为了后续讨论的三层交换原理便于理解,这里简单介绍一下三层交换机的内部结构,如图11所示。图11 三层交换机硬件结构根据图11,三
15、层交换机内部的两大部分是ASIC和CPU,它们的作用分别如下:1)ASIC:完成主要的二三层转发功能,内部包含用于二层转发的MAC地址表以及用于IP转发的三层转发表;2)CPU:用于转发的控制,主要维护一些软件表项(包括软件路由表、软件ARP表等等),并根据软件表项的转发信息来配置ASIC的硬件三层转发表。当然,CPU本身也可以完成软件三层转发。从三层交换机的结构和各部分作用可以看出,真正决定高速交换转发的是ASIC中的二三层硬件表项,而ASIC的硬件表项来源于CPU维护的软件表项。 三层交换原理下面分别以两种组网情况下的主机间通信来解释三层交换机的转发原理。组网1如图12所示,通信的源、目的
16、主机连接在同一台三层交换机上,但它们位于不同VLAN(网段)。对于三层交换机来说,这两台主机都位于它的直连网段内,它们的IP对应的路由都是直连路由。图12 三层转发组网1图12中标明了两台主机的MAC、IP地址、网关,以及三层交换机的MAC、不同VLAN配置的三层接口IP。当 PC A 向 PC B 发起ICMP请求时,流程如下:(假设三层交换机上还未建立任何硬件转发表项)1)根据前面的描述,PC A首先检查出目的IP地址2.1.1.2(PC B)与自己不在同一网段,因此它发出请求网关地址1.1.1.1对应MAC的ARP请求;2)L3_SW收到PC A的ARP请求后,检查请求报文发现被请求IP
17、是自己的三层接口IP,因此发送ARP应答并将自己的三层接口MAC(MAC S)包含在其中。同时它还会把PC A的IP地址与MAC地址对应(1.1.1.2MAC A)关系记录到自己的ARP表项中去(因为ARP请求报文中包含了发送者的IP和MAC);3)PC A得到网关(L3_SW)的ARP应答后,组装ICMP请求报文并发送,报文的目的MACMAC S、源MACMAC A、源IP1.1.1.2、目的IP2.1.1.2;4)L3_SW收到报文后,首先根据报文的源MAC+VID(即VLAN ID)更新MAC地址表。然后,根据报文的目的MACVID查找MAC地址表,发现匹配了自己三层接口MAC的表项。这
18、里说明一下,三层交换机为VLAN配置三层接口IP后,会在交换芯片的MAC地址表中添加三层接口MACVID的表项,并且为表项的三层转发标志置位。当报文的目的MAC匹配这样的表项以后,说明需要作三层转发,于是继续查找交换芯片的三层表项;5)交换芯片根据报文的目的IP去查找其三层表项,由于之前未建立任何表项,因此查找失败,于是将报文送到CPU去进行软件处理;6)CPU根据报文的目的IP去查找其软件路由表,发现匹配了一个直连网段(PC B对应的网段),于是继续查找其软件ARP表,仍然查找失败。然后L3_SW会在目的网段对应的VLAN 3的所有端口发送请求地址2.1.1.2对应MAC的ARP请求;7)P
19、C B收到L3_SW发送的ARP请求后,检查发现被请求IP是自己的IP,因此发送ARP应答并将自己的MAC(MAC B)包含在其中。同时,将L3_SW的IP与MAC的对应关系(2.1.1.1MAC S)记录到自己的ARP表中去;8)L3_SW收到PC B的ARP应答后,将其IP和MAC对应关系(2.1.1.2查三层转发表的过程由交换芯片直接进行硬件转发了。从上述流程可以看出,三层交换机正是充分利用了“一次路由(首包CPU转发并建立三层硬件表项)、多次交换(后续包芯片硬件转发)”的原理实现了转发性能与三层交换的完美统一。下面介绍另一种组网情况的三层转发流程,如图13所示。图13 三层转发组网2图
20、13中标明了两台主机的MAC、IP地址、网关,以及两台三层交换机的MAC、不同VLAN配置的三层接口IP。假设L3_SW1上配置了静态路由:ip route 2.1.1.0 255. 255.255.0 3.1.1.2;L3_SW2上配置了静态路由:ip route 1.1.1.0 255.255.255.0 3.1.1.1。当然,路由信息也可以通过动态路由协议的交互来获得,有关路由的知识请查阅相关文档。这种组网情况下的转发过程与图12的组网1情况是类似的,下面的流程讲解中将省略部分前面已经分析过的细节内容。1) PC A首先检查出目的IP地址2.1.1.2(PC B)与自己不在同一网段,因此
21、它通过ARP解析得到网关地址1.1.1.1对应的MAC(MAC S1)。然后,PC A组装ICMP请求报文并发送,报文的目的MACMAC S1、源MACMAC A、源IP1.1.1.2、目的IP2.1.1.2;2) L3_SW1收到报文后,首先根据报文的源MAC+VID更新MAC地址表。然后,根据报文的目的MACVID查找MAC地址表,发现匹配了自己三层接口MAC的表项,于是继续查找芯片的三层转发表;3) 由于之前未建立任何表项,因此三层转发表查找失败,于是将报文送到CPU去进行软件处理;4) CPU根据报文的目的IP去查找其软件路由表,发现匹配路由2.1.1.0/24,其下一跳IP地址为3.
22、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查三层转发表=送CPU=匹配直连路由=ARP解析=转发报文同时添加硬件表项的过程,将报文转发给PC B,此时报文的目的MAC修改为PC B的MAC(MAC B),源MAC修改为L3_SW2的MAC(MAC S2)。这样后续发往2.1.1.2的报文就直接由交换芯片硬件转发了;7) PC B收到来自PC A的ICMP请求报文后进行ICMP应答。由于在ICMP请求报文转发的过程中,每
23、个网段的两端节点都已经通过ARP解析得到了对方的IP和MAC对应关系,因此应答报文的转发完全由交换芯片完成(查MAC表=发送);8) 这样,后续的往返报文都经过查MAC表=从上述两种组网情况下的转发流程可以看出,三层交换机的转发具有以下特点:1) 首包通过CPU转发,同时建立交换芯片硬件表项;后续包由交换芯片直接硬件转发,即常说的“一次路由、多次交换”;2) 交换芯片的硬件转发并不关心路由的具体下一跳IP地址是多少,硬件三层表项中只包含了目的地址(或网段)、目的IP(或下一跳IP)对应的MAC、出口VLAN、出端口;(这里说明一下,并不是所有的三层交换机的硬件三层表项都会包含“出端口”的,这一
24、点后面会有具体介绍。)3) IP报文每经过一次三层转发,它的源、目的MAC都会变化,但是源、目的IP是始终不变的。 三层交换的其他一些技术细节在三层交换转发中,交换芯片(ASIC)起到了至关重要的作用,因此三层交换机的性能和转发特点主要取决于交换芯片的实现机制。在4.2节中讲解的三层交换原理只是一个大致的转发流程,对于使用了不同交换芯片的三层交换机,其硬件转发过程中的一些细节内容是有所区别的。本节主要就硬件三层表项的结构和查表方式介绍几种不同的实现。 三层表项的精确匹配和最长匹配从前面的描述可以看出,三层转发是必然需要路由信息的,而转发过程中的路由选择决定了报文的最终出口如何,三层交换机只是将
25、这种路由功能整合到交换芯片中去了。路由选择存在精确匹配和最长匹配两种方式,精确匹配即目的IP地址与路由的地址信息必须完全吻合,而最长匹配则是选择所有包含了目的地址的路由中掩码最长的一条。早期的三层交换机上,其交换芯片多采用精确匹配的方式,它们的硬件三层表项中只包含具体的目的IP地址,并不带掩码信息。比如在转发目的IP为2.1.1.2的报文时,通过软件查找匹配了非直连路由2.1.1.0/24,那么就将2.1.1.2的转发信息添加到交换芯片中去,如果继续来了目的IP为2.1.1.3的报文需要转发,则要重新进行软件查找,并在交换芯片中为2.1.1.3增加新的表项。这样的选路方式和表项结构对交换芯片的硬件资源要求很高,因为芯片中集成的表项存储空间是很有限的,如果要转发大量目的IP地址不同的报文那么就需要添加大量的硬件表项。曾经泛滥一时的冲击波病毒,就导致了当时大量的只支持精确匹配的三层交换机资源耗尽。因为冲击波病毒的手段之一就是发送巨大数量的网段扫描报文,而多数三层交换机上都配置了缺省路由,这样所有的报文在CPU软件查找时都能够找到匹配路由,进而针对每一个病毒报文的目的IP都需要新增硬件表项并迅速将硬件资源占满。这样,大部分用户的正常数据流由于转发资源耗尽而得不到高速处理了。由于精确匹配方式的三层交换机的这种缺陷,后期的三层交换机增加了对最长匹
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1