5.4.2 IP交换的原理

5.4.2 IP交换的原理

重点难点讲解

在TCP/IP的协议体系中,以太网交换功能主要体现在MAC层,属于二层交换。而将以太网交换和网络层转发结合在一起的IP交换,又叫三层交换。因此,接下来先介绍二层交换,再介绍三层交换。

1.二层交换

当两个主机位于同一个子网内时,两者之间的数据交换可以直接基于MAC地址进行,此时的数据交换就是二层交换,主要由以太网交换机完成。MAC层数据的封装形式称为以太网帧,有关以太网帧的结构将在7.1节介绍。

下面以一个两端口的以太网交换机为例说明其工作原理,如图5-7所示。

图5-7 一个两端口的以太网交换机示意图

由图5-7可见,MAC地址为“MAC-A”和“MAC-B”的主机连接到交换机的端口1,MAC地址为“MAC-C”和“MAC-D”的主机连接到交换机的端口2。

表5-1是该以太网交换机通过学习自动建立的MAC表,表中“MAC地址”指主机的MAC地址,“转发端口”指该主机所连接的以太网交换机的端口。以太网交换机通过学习建立MAC表的过程如下:若以太网交换机从端口X接收到一个MAC帧,则意味着端口X和发送该MAC帧的主机位于同一条总线,此时以太网交换机就可以在MAC表中添加一项,该项的MAC地址为该MAC帧携带的源MAC地址,而转发端口为以太网交换机接收到该MAC帧的端口X。当该交换机所连接的两条总线上的所有主机均发送了MAC帧时,表5-1所示的MAC表得以完整建立。有了MAC表,交换机就能够进行MAC帧的转发。当以太网交换机从一个端口接收到MAC帧时,它会根据MAC帧携带的目的MAC地址去查找MAC表。假设在MAC表中找到一项,该项的MAC地址和MAC帧的目的地址相同,该项的转发端口为X。如果端口X就是接收到该MAC帧的端口,那么发送该MAC帧的主机和接收该MAC帧的主机位于同一条总线上,交换机无须对该MAC帧做任何处理;如果端口X不是交换机接收到该MAC帧的端口,那么发送该MAC帧的主机和接收该MAC帧的主机不位于同一条总线上,交换机必须转发该MAC帧到端口X。例如:当MAC地址为“MAC-A”的主机要给MAC地址为“MAC-C”的主机发送MAC帧时,交换机会在查询MAC表后,从端口2将该MAC帧进行转发。

表5-1 以太网交换机的MAC表

2.三层交换

当两个主机位于不同的子网内时,两者之间的数据交换需要经过网关。如果网关设备是三层交换机,那么涉及的交换就是三层交换。

三层交换机相当于一个带有第三层路由模块的二层交换机,但并不是两者功能的简单叠加,而是实现了两者的有机结合。它除了拥有二层交换所需的MAC表,还需建立专门用于三层交换的硬件转发表。

三层交换机的硬件结构如图5-8所示。由图可见,三层交换机主要包含CPU和ASIC交换芯片两部分。CPU用于转发的控制,主要维护一些软件表项,包括软件路由表、软件ARP表等,并根据软件表项的信息来生成三层硬件转发表项。ASIC交换芯片则主要根据MAC表和三层硬件转发表分别完成数据的二层和三层转发。

下面以图5-9所示网络为例,说明三层交换的原理。假设主机A、主机B直接连接在同一台三层交换机的两个位于不同网段的端口上,主机A、主机B和三层交换机的IP地址、MAC地址等信息如图5-9所示。主机A已知主机B的IP地址,要向主机B发送数据,其处理过程如图5-10所示。

(a)主机A在发起通信时,首先将目的主机B的IP地址(即IP-B)与自己的IP地址(即IP-A)进行比较,判断主机B是否与自己在同一网段。

(b)若主机A与主机B在同一网段,则采用二层交换,具体过程如上节所述。

图5-8 三层交换机的硬件结构

图5-9 三层交换网络示例

图5-10 三层交换的处理流程

(c)若主机A发现主机B与自己不在同一网段,则需要通过三层交换机进行三层转发。为此,主机A先在ARP表中查找三层交换机的MAC地址。若成功,则把数据报发给三层交换机。否则,主机A广播ARP请求,要求得到与网关IP(即IP-1)对应的MAC地址。三层交换机在收到ARP请求后进行响应,在应答中包含了自己的MAC地址(即MAC-1)。主机A通过ARP请求获取三层交换机的MAC地址的具体过程如图5-11所示。同时,三层交换机将A的IP地址与MAC地址对应关系(IP-A,MAC-A)记录到自己的ARP表项中去。

图5-11 通过ARP请求MAC地址的过程

(d)主机A得到三层交换机的ARP应答后,一方面用(IP-1,MAC-1)更新自己的ARP表项,另一方面以自己的MAC地址(即MAC-A)作为“源MAC地址”,以三层交换机MAC地址(即MAC-1)作为“目的MAC地址”,以A的IP地址(即IP-A)作为“源IP地址”,以B的IP地址(即IP-B)作为“目的IP地址”,对要发送的IP数据报进行封装后发给三层交换机。

(e)三层交换机从端口1收到主机A发送的IP数据报后,用(MAC-A,端口1)更新自己的MAC表,同时查看得知源主机和目的主机不在同一网段,于是将IP数据报交给三层交换引擎,并查找三层硬件转发表。这里,三层硬件转发表包括硬件ARP表和硬件路由表,ARP表记录IP地址和MAC地址的对应关系,硬件路由表则记录目的IP地址、下一跳地址和端口的对应关系。

(f)若在三层硬件转发表中可以找到目的主机B的对应表项,则直接从相应端口转发主机的IP数据报。否则,需要通过中断请求CPU查看软件路由表,发现匹配了一个直连网段(主机B对应的网段)。于是,继续查找其软件ARP表,若查找失败,则CPU将向主机B所在网段发送ARP请求,以获得与目的主机B的IP地址(即IP-B)对应的MAC地址。

(g)三层交换机获得主机B的MAC地址(即MAC-B)后,分别用(IP-B,MAC-B)和(MAC-B,端口2)更新自己的ARP表和MAC表,并将从主机A接收的IP数据报以自己的MAC地址(即MAC-2)作为“源MAC地址”,主机B的MAC地址(即MAC-B)作为“目的MAC地址”,进行重新封装,通过ASIC芯片转发到主机B所在端口(即端口2)。同时,三层交换引擎根据CPU软件路由表生成到目的主机B的硬件转发表项。此后,主机A发往主机B的数据就不用再去访问CPU中的软件路由表了,而是直接利用三层硬件转发表进行数据转发。

同理,主机B应答给主机A的IP数据报的转发过程与前面类似,只是由于三层交换机在之前已经得到主机A的IP和MAC对应关系,同时在交换芯片中添加了相关三层硬件转发表项,因此主机B发出的IP数据报就直接由交换芯片硬件转发给主机A。

需要注意的是,本节讲解的三层交换原理只是一个大致的转发流程,对于使用了不同交换芯片的三层交换机,其硬件转发过程中的一些细节内容是有所区别的。例如,有的交换机其硬件转发表项包含出端口信息,此时数据的交换一般直接通过查找三层转发表项就能够完成;但若交换机的硬件转发表项不包含出端口信息,则在根据数据包的目的IP地址查找三层转发表后,还需要继续根据目的MAC地址去查找MAC表,并最终获得出端口信息。