(5) 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的报文就可以直接通过交换芯片硬件转发了;
(6) L3_SW2收到报文后,与组网1中的处理类似,经过查MAC表=>查三层转发表=>送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请求报文转发的过程中,每个网段的两端节点都已经通过ARP解析得到了对方的IP和MAC对应关系,因此应答报文的转发完全由交换芯片完成(查MAC表=>查三层转发表=>发送);
(8) 这样,后续的往返报文都经过查MAC表=>查三层转发表的过程由交换芯片直接进行硬件转发了 。
从上述两种组网情况下的转发流程可以看出,三层交换机的转发具有以下特点:
(1) 首包通过CPU转发,同时建立交换芯片硬件表项;后续包由交换芯片直接硬件转发,即常说的“一次路由、多次交换”;
(2) 交换芯片的硬件转发并不关心路由的具体下一跳IP地址是多少,硬件三层表项中只包含了目的地址(或网段)、目的IP(或下一跳IP)对应的MAC、出口VLAN、出端口;(这里说明一下,并不是所有的三层交换机的硬件三层表项都会包含“出端口”的,这一点后面会有具体介绍 。)
(3) IP报文每经过一次三层转发,它的源、目的MAC都会变化,但是源、目的IP是始终不变的 。
3.3 三层交换的其他一些技术细节在三层交换转发中,交换芯片(ASIC)起到了至关重要的作用,因此三层交换机的性能和转发特点主要取决于交换芯片的实现机制 。在4.2节中讲解的三层交换原理只是一个大致的转发流程,对于使用了不同交换芯片的三层交换机,其硬件转发过程中的一些细节内容是有所区别的 。本节主要就硬件三层表项的结构和查表方式介绍几种不同的实现 。
3.3.1 三层表项的精确匹配和最长匹配从前面的描述可以看出,三层转发是必然需要路由信息的,而转发过程中的路由选择决定了报文的最终出口如何,三层交换机只是将这种路由功能整合到交换芯片中去了 。路由选择存在精确匹配和最长匹配两种方式,精确匹配即目的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都需要新增硬件表项并迅速将硬件资源占满 。这样,大部分用户的正常数据流由于转发资源耗尽而得不到高速处理了 。
由于精确匹配方式的三层交换机的这种缺陷,后期的三层交换机增加了对最长匹配方式的支持,即硬件三层表项中可同时包含IP地址和掩码,在查找时遵循最长匹配原则 。这种类型的三层交换机,一般在软件路由表建立时就将路由信息添加到硬件三层表中去,包括直连路由和非直连路由 。对于直连路由,对应的硬件三层表项的“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匹配该非直连路由的报文就能够直接通过修改后的硬件表项转发了 。
推荐阅读
- 一文读懂常用开源许可证
- 抽水马桶是如何工作的?一文看懂虹吸原理
- Nginx高级篇:从原理到实战,彻底搞懂Nginx
- 交换机划分 VLAN 配置
- 根据交换机的工作原理可知,交换机可以多个端口对之间的数据传输
- 一文讲弄懂什么是vlan、三层交换机、网关、子网掩码
- 路由交换技术—VLAN原理及配置
- 交换机与路由器的区别
- 8分钟带你深入浅出搞懂Nginx
- 一文教您如何实现持续集成服务器环境搭建