三层交换机
二层交换机的二层数据交换通常都是使用ASIC(Application Specific Integrated Circuit ,专用集成电路)的硬件芯片中的CAM表来实现的,由于是硬件转发,因此转发性能很是高。而三层交换机的三层转发也是依靠ASIC芯片完成的(路由器的路由功能主要依靠CPU软件进行的),但其中除了二层交换用的CAM表外,还保存有专门用于三层转发的三层硬件转发表。
三层交换示例
在三层交换中,同一交换机上的不一样网段主机通讯和不一样交换机上的不一样网段主机通讯的基本原理是同样的,只是具体流程有所区别。本节仅以比较简单的“同一交换机上的不一样网段主机通讯”这种情形来解释上节介绍的三层交换原理。
如图所示,通讯的源、目的主机链接在同一台三层交换机上,但它们位于不一样VLAN(也位于不一样网段)。对于三层交换机来讲,这两台主机都位于它的直连网段内,它们的IP对应的路由都是直连路由。图中已标明了两台主机的MAC地址、IP地址、网关IP地址(也就是对应VLAN接口IP地址),以及三层交换机的MAC地址。
【说明】本示例中虽然划分了VLAN,可是在下面的数据转发流程中咱们并无提到VLAN标记,那是由于在本示例中,通讯双方主机都链接到同一个三层交换机上,端口类型均为Access类型,发送和接收的数据帧都是无VLAN标记的。在下节介绍的示例中,在数据的转发过程当中将会涉及到VLAN标记问题。
当 PC A 要第一次向 PC B 发数据包时,数据包的传输流程以下:(假设三层交换机上当前还未创建任何硬件转发表项)
(1)PC A首先检查出目的IP地址2.1.1.2(PC B)与本身不在同一网段,以为就这样直接发送确定不行,因而把要发送的数据包先缓存起来。它知道这个数据包必须通过网关来转发,因此先查看一下本身是已经知道网关的MAC地址(也就是在PC A主机的ARP表中查看是否有与网关IP地址对应的MAC地址表项)。若是有,则直接把要发送给PC B的数据包在封装成数据帧时,把“目的MAC地址”字段的值设为网关的MAC地址(也就是三层交换机的MAC地址MAC S,交换机上各端口、各VLAN是共享一个或多个MAC地址的)。
(2)若是PC A在本身的ARP表中没有找到网关MAC地址,则先向网关发出(实际上是会向本VLAN内全部节点发出)一个ARP广播请求报文,以获取网关IP地址1.1.1.1所对应的MAC地址。此ARP请求报文的“源MAC地址”字段是PC A的MAC地址“MAC A”,“目的MAC地址”由于未知,以全0格式填充;“源IP地址”和“目的IP地址”字段分别填上PC A的IP地址(1.1.1.2)和网关的IP地址(1.1.1.1)。
ARP请求报文向下传输到了以太网数据链路层后被再次封装成以太网帧,以太网帧头中的“源MAC地址”字段值仍为PC A的MAC地址“MAC A”,“目的MAC地址”字段值为广播MAC地址FF-FF-FF-FF-FF-FF,“帧类型”字段填上ARP的协议号0x0806。
(3)三层交换机在收到PC A发来的ARP请求报文后,检查请求报文发现被请求IP地址(也就是“目的IP地址”)是本身的三层接口IP地址,因而向PCA A发回一个ARP应答报文,并将对应的三层接口MAC(MAC S)填充在应答报文中的“目的MAC地址“字段其中。同时经过对PC A发送的ARP请求报文分析,把PC A的IP地址与MAC地址对应关系(1.1.1.2<==>MAC A)记录到本身的ARP表中去,而后把PC A的IP地址(做为“目的IP地址”)、MAC地址(做为“下一跳MAC地址”),以及与交换机直接相连的端口号等信息下发到三层交换机ASIC芯片中的三层硬件转发表。此时在三层硬件转发表中就有了第一个转发表项,即PC A的转发表项。
【说明】在三层交换机中,最关键的就是它有一个专门用于三层转发的“三层硬件转发表”,它和“ARP表”之间有联系,但也有区别。ARP表中只是IP地址和MAC地址的映射关系,不包括转发出口,也不包括对应的VLAN ID,而三层硬件转发表中则包括了所有这些,造成一个:目的IP地址、VLAN ID、端口和下一跳MAC地址的关系表项。由于在进行三层转发时,改变的是帧封装后的源和目的MAC地址这两个字段,原来输入IP包中的“目的MAC地址”做为转发的“下一跳MAC地址”,原来的“源MAC地址”改成三层交换机自身的MAC地址,源和目的IP地址都不变(由于这是封装在帧的“数据”部分)。另外,三层转发表是存储在ASCI硬件芯片上的,直接由ASIC芯片调用,而ARP表是存储在内存中,由CPU软件调用。但三层硬件转发表项仍是由CPU提供的。
(4)PC A在收到网关的ARP应答报文后,把要发送给PC B的数据包通过帧封装后的 “目的MAC地址”修改成网关MAC地址(MAC S1),其它不变,先把数据包发给网关(三层交换机)。
(5)三层交换机在收到这个数据包后,由于“目的MAC地址”为交换机本身的MAC地址,并且“目的IP地址”和“源IP地址”不在同一网段,因此会直接提交到负责三层交换的ASIC芯片,根据包中的“目的IP地址”(PC B的IP地址2.1.1.2)在三层硬件转发表中查看有无对应表项,由于是第一次通讯,因此结果是查找失败,因而将数据包再转送到CPU去进行软件路由处理。
(6)CPU一样会根据包中的“目的IP地址”去查找其软件路由表,发现匹配了一个直连网段(PC B对应的网段),因而继续查在ARP表中查找对应的MAC地址项。一样是因为是第一次查找,因此仍然查找失败。若是在ARP表中找到了对应的MAC地址,则数据能够直接由软件路由表转发了。
(7)下面仍以在ARP表中也没找到PC B对应的MAC地址为例进行介绍。此时三层交换机CPU会在PC B所在网段的AN 3中全部端口发送一个ARP广播请求报文,查找“目的IP地址”为2.1.1.2所对应MAC地址。报文通过帧封装后的“源MAC地址”是三层交换机的MAC地址(MAC S),“目的MAC地址”全为0,“源IP地址”是VLAN 3网段的网关IP地址(2.1.1.1),“目的IP地址”是PC B的IP地址(2.1.1.2)。
(8)PC B在收到三层交换机CPU发送的ARP请求报文后,检查发现被请求的IP地址是本身的IP地址,因而发送一个ARP应答报文,并将本身的MAC地址(MAC B)包含在其中。同时,将三层交换机上VLAN 3网段的网关IP地址与MAC地址的对应关系(2.1.1.1<==>MAC S)记录到本身的ARP表中去。
(9)三层交换机CPU在收到PC B的ARP应答报文后,将其IP地址和MAC地址对应关系(2.1.1.2<==>MAC B)记录到本身的ARP表中去,把PC B的IP地址、MAC地址、进入交换机的端口号等信息下发到三层交换机的三层转发中。此时转发表中就有到达PC A和PC B这两条对应的表项了。
(10)三层交换机CPU根据得到的PC B的MAC地址和端口信息,以及软件路由表信息,把由PC A发来的IP数据包转发给PC B,这样就完成了PC A到PC B的第一次单向通讯。
因为芯片内部的三层引擎中已经保存了从PC A到达PC B的完整转发路径信息,因此之后PC A与PC B之间进行通讯,或其它网段的站点想要与PC A或PC B进行通讯时,三层交换机的ASIC芯片就会直接把包从对应的三层硬件转发表项中指定的端口转发出去,而没必要再把包交给CPU进行路由处理。这就是所谓的“一次路由(指经过CPU路由表查到了对应的直连网段),屡次交换”的原理,大大提升了转发速度。