原文地址:
http://www.h3c.com.cn/MiniSite/Technology_Circle/Net_Reptile/The_One/Home/Catalog/200911/655251_97665_1.htm
下面分别以两种组网情况下的主机间通信来解释三层交换机的转发原理。
组网 1 如图 12 所示,通信的源、目的主机连接在同一台三层交换机上,但它们位于不同 VLAN (网段)。对于三层交换机来说,这两台主机都位于它的直连网段内,它们的 IP 对应的路由都是直连路由。
图 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 是自己的三层接口 IP ,因此发送 ARP 应答并将自己的三层接口 MAC ( MAC S )包含在其中。同时它还会把 PC A 的 IP 地址与 MAC 地址对应( 1.1.1.2<==>MAC A )关系记录到自己的 ARP 表项中去(因为 ARP 请求报文中包含了发送者的 IP 和 MAC );
(3) PC A 得到网关( L3_SW )的 ARP 应答后,组装 ICMP 请求报文并发送,报文的目的 MAC = MAC S 、源 MAC = MAC A 、源 IP = 1.1.1.2 、目的 IP = 2.1.1.2 ;
(4) L3_SW 收到报文后,首先根据报文的源 MAC+VID (即 VLAN ID )更新 MAC 地址表。然后,根据报文的目的 MAC + VID 查找 MAC 地址表,发现匹配了自己三层接口 MAC 的表项。这里说明一下,三层交换机为 VLAN 配置三层接口 IP 后,会在交换芯片的 MAC 地址表中添加三层接口 MAC + VID 的表项,并且为表项的三层转发标志置位。当报文的目的 MAC 匹配这样的表项以后,说明需要作三层转发,于是继续查找交换芯片的三层表项;
(5) 交换芯片根据报文的目的 IP 去查找其三层表项,由于之前未建立任何表项,因此查找失败,于是将报文送到 CPU 去进行软件处理;
(6) CPU 根据报文的目的 IP 去查找其软件路由表,发现匹配了一个直连网段( PC B 对应的网段),于是继续查找其软件 ARP 表,仍然查找失败。然后 L3_SW 会在目的网段对应的 VLAN 3 的所有端口发送请求地址 2.1.1.2 对应 MAC 的 ARP 请求;
(7) PC B 收到 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 修改为 PC B 的 MAC ( MAC B ),源 MAC 修改为自己的 MAC ( MAC S )。同时,在交换芯片的三层表项中根据刚得到的三层转发信息添加表项(内容包括 IP 、 MAC 、出口 VLAN 、出端口),这样后续的 PC A 发往 PC B 的报文就可以通过该硬件三层表项直接转发了;
(9) PC B 收到 L3_SW 转发过来的 ICMP 请求报文以后,回应 ICMP 应答给 PC A 。 ICMP 应答报文的转发过程与前面类似,只是由于 L3_SW 在之前已经得到 PC A 的 IP 和 MAC 对应关系了,也同时在交换芯片中添加了相关三层表项,因此这个报文直接由交换芯片硬件转发给 PC A ;
(10) 这样,后续的往返报文都经过查 MAC 表 => 查三层转发表的过程由交换芯片直接进行硬件转发了。
从上述流程可以看出,三层交换机正是充分利用了 “ 一次路由(首包 CPU 转发并建立三层硬件表项)、多次交换(后续包芯片硬件转发) ” 的原理实现了转发性能与三层交换的完美统一。
下面介绍另一种组网情况的三层转发流程,如图 13 所示。
图 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 情况是类似的,下面的流程讲解中将省略部分前面已经分析过的细节内容。当 PC A 向 PC B 发起 ICMP 请求时,流程如下:(假设三层交换机上还未建立任何硬件转发表项)
(1) 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 ;
(2) L3_SW1 收到报文后,首先根据报文的源 MAC+VID 更新 MAC 地址表。然后,根据报文的目的 MAC + VID 查找 MAC 地址表,发现匹配了自己三层接口 MAC 的表项,于是继续查找芯片的三层转发表;
(3) 由于之前未建立任何表项,因此三层转发表查找失败,于是将报文送到 CPU 去进行软件处理;
(4) 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 );
(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 是始终不变的。