Packet Traveling (三) -- Host to Host through a Switch

packtravseriestitle.gif

翻译并转载于Packet Traveling

在上一篇文章中,我们查看了两个主机之间直接通信时发生的所有事情。在本文中,我们将添加一个常见的网络设备:交换机。我们将看看通过交换机从主机到主机的通信发生了什么。

交换机功能

一个交换机主要有四个功能:学习功能、泛洪功能、转发功能和过滤功能。

学习

作为二层设备,交换机将根据L2头中发现的信息做出所有决定。具体来说,交换机将使用源MAC地址和目的MAC地址来做出转发决策。(个人理解,报文头中的MAC是在第三层的时候加进去然后压给二层网路的,因为ARP表也在三层中,二层设备只是根据这些信息进行处理的

交换机的目标之一是创建一个MAC地址表,将每个交换机端口映射到连接设备的MAC地址。

MAC地址表一开始是空的,每次交换机接收到任何东西时,它都会查看传入帧的源MAC地址字段。它使用源MAC和帧接收到的交换机在MAC地址表中建立一个表项。

随着每个连接的设备不可避免地发送一些东西,交换机迟早会有一个完整的MAC地址表。然后,可以使用这个表巧妙地将帧转发到它们的预期目的地。

泛洪

然而,尽管有上述的学习过程,但不可避免的是,交换机在某一时刻会收到一个帧,该帧的目的地是交换机不知道其位置的MAC地址。

在这种情况下,交换机唯一的选择就是简单地复制帧并将其发送到所有端口。这种行为被称为洪水。

当然,其他设备也会连接到那个特定的交换机。每个连接设备的网卡将接收帧并查看目的MAC地址字段,如果他们不是预期的接收者,他们将简单地默默地丢弃帧。

然而,如果它们是预期的设备,那么交换机就可以放心了,因为知道它能够成功传送帧。

此外,当预期的设备接收到帧,将产生一个响应,当发送给交换机时,将允许交换机学习并创建一个MAC地址表映射未知的设备到它的交换机端口。

转发

当然,理想情况下,交换机遇到的每一个目的地MAC都会在它的MAC地址表中有一个条目。

当这种情况发生时,交换机愉快地将帧转发到适当的开关端口。

交换机转发帧有三种方法:

  • 存储和转发 -- 交换机将整个帧(报头+数据)复制到内存缓冲区中,并在转发之前检查帧的错误。这种方法是最慢的,但是有着最好的错误检测和其他特性,比如为某些类型的流量设置优先级以更快地处理。
  • 直通交换 -- 交换机不存储任何内容,只检查读取目的MAC地址和转发帧所需的最小值。这种方法是最快的,但不提供错误检测或潜在的附加功能。
  • 自由分段 -- 这种方法是前两种方法的柔和。交换机在转发帧之前只检测帧的第一部分(64字节)。如果传输发生错误,通常在前64字节中就能发现。因此,该方法提供了足够好的错误检测,同时获得了避免在转发之前将整个帧存储在内存中的速度和效率低下。

随着线路速度的提升,这三者之间的速度差异已经越来越减小,并且大部分的现代交换机都采用存储转发的模式。

过滤

交换机最后一个功能是过滤。也就是说,交换机肯定不会在同一个端口进行帧的接收和转发。

最常见的情况是,当交换机需要泛洪的时候 -- 帧将被复制并发送给除了接收帧的开关端口之外的每个开关端口。

在很少的情况下,主机会发送带有其目的MAC地址是自己的帧。这通常是主机遇到某种错误或恶意的情况。无论哪种方式,当这种情况发生时,交换机简单地丢弃帧。

交换机操作

现在我们已经了解了交换机的每一个单独的功能,我们可以看看它们的实际作用。下面的动画包括一个交换机在处理流量时通过所有四个功能:

packtravhostswitchhost.gif

主机A有一个东西要发送给主机B,这个东西的内容是完全无关的,只要它知道帧有一个L2报头,其中包括源MAC地址和目的MAC地址。

交换机的MAC地址表最初为空。记住,它只在帧被接收时才被填充。

主机A向交换机发送帧时,源MAC地址为aaaa - aaaa - aaaa。这提示交换机学习一个MAC Address Table表项,该表项将Port 1映射到MAC Address aaaa.aaaa.aaaa。

然后,当决定如何转发帧时,交换机意识到没有bbbb.bbbb.bbbb的条目。这使得交换机只剩下一个选项:复制并淹没帧出所有端口。注意帧被复制出所有端口,除了端口1(它进来的端口)这是交换机执行过滤功能的一个例子。

这个帧将被主机C和主机B接收。主机C在检查L2报头时将意识到帧不是为他准备的,将简单地丢弃它。相反,当主机B接收到帧并意识到它确实是预期的接收者时,它们将接受帧并生成响应。

当响应到达交换机时,可以学到另一个MAC地址表映射:端口2包含MAC地址bbbb.bbbb.bbbb。

然后交换机查找目的MAC地址(aaaa.aaaa.aaaa),发现该地址存在于端口1。交换机可以简单地转发帧,因为它知道目的MAC地址的位置。

广播

关于广播和交换机的泛洪行为,经常会有一些混淆。这种混淆是可以理解的,因为最终结果是一样的,但理解两者的区别也很重要。

广播帧是针对本地网络上的每个人的帧。这是使用我们已经讨论过的同一个以太网报头完成的,目的MAC地址字段是由一个特殊的地址填充:ffff.ffff.ffff。

根据定义,如果交换机遇到一个目的MAC为ffff.ffff的数据包。它将总是淹没帧(当然,在学习源MAC之后)。

另一种理解方式是,由于地址ffff.ffff.ffff是保留的,交换机无法学习MAC地址表映射。因此,任何发往这个MAC地址的帧都会被淹没。

总之,广播是一个发送给本地网络中的每个人的帧(ffff.ffff.ffff),泛洪是一个交换机可以采取的动作。广播帧,根据定义,将总是被一个开关淹没。但是交换机永远不会广播一个帧(因为广播不是交换机的功能)。


标题:Packet Traveling (三) -- Host to Host through a Switch
作者:reyren
地址:https://www.reyren.cn/articles/2021/07/16/1626424159388.html

    0 评论
avatar