Loading...
墨滴

PythonCN

2021/08/19  阅读:57  主题:橙心

【翻译】Packet 的旅行 — 主机间通过交换机通信

在上一篇文章中,我们研究了两台主机直接相互通信所发生的一切。 在本文中,我们将添加一个常见的网络设备:交换机。 我们将看看通过交换机从主机到主机的通信会发生什么。 ​

本文将是我们将交换机视为数据包传输中的关键参与者时所讨论的所有内容的实际应用。 在继续之前,可能值得查看该部分。 ​

我们将从查看交换机的各个功能开始,然后查看显示它们协作操作的动画。 ​

交换机功能

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

学习

作为 L2 设备,交换机将根据 L2 报文头中的信息做出所有决定。 具体来说,交换机将使用源 MAC 地址和目标 MAC 地址来做出转发决策。 ​

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

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

迟早,随着每个连接的设备不可避免地发送一些东西,交换机将拥有一个完全填充的 MAC 地址表。然后,该表可用于智能地将帧转发到其预定目的地。 ​

洪泛

然而,尽管进行了上述学习过程,但不可避免的是,交换机在某些时候会收到发往交换机不知道其位置的 MAC 地址的帧。 ​

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

洪泛确保如果目标设备存在并且它连接到交换机,那么它肯定会收到帧。 ​

当然,连接到该特定交换机的所有其他设备也是如此。 虽然不理想,但这是完全正常的。 每个连接设备的 NIC 将接收该帧并查看目标 MAC 地址字段。 如果他们不是预期的接收者,他们只会默默地丢弃帧。 ​

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

此外,当目标设备收到帧时,将生成一个响应,当发送到交换机时,该响应将允许交换机学习并创建一个 MAC 地址表,将未知设备映射到其交换机端口。 ​

转发

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

发生这种情况时,交换机会很高兴地将帧转发到适当的交换机端口。 ​

交换机可以通过三种方法转发帧。 下面简要介绍它们。

  • 存储和转发

交换机将整个帧(header + data)复制到内存缓冲区中,并在转发之前检查该帧是否存在错误。 这种方法是最慢的,但允许最好的错误检测和其他特性,例如优先处理某些类型的流量以加快处理速度。 ​

  • 直通

交换机不存储任何内容,只检查读取目标 MAC 地址和转发帧所需的最低限度。 这种方法是最快的,但不提供错误检测或附加功能的潜力。 ​

  • 无碎片

这种方法是前两种方法的混合。 在转发帧之前,交换机仅检查帧的第一部分(64 字节)。 如果发生传输错误,通常会在前 64 个字节内注意到。 因此,这种方法提供了“足够好”的错误检测,同时获得了避免在转发之前将整个帧存储在其内存中的速度和效率。

值得指出的是,当交换机技术较新并且切换引起明显延迟时,这三种方法一度非常重要。 在现代,使用线速交换,这三者之间的速度差异可以忽略不计,并且大多数交换机在存储和转发模式下工作。 ​

过滤

最后,交换机的最后一个功能是过滤。 主要是,此功能表明交换机永远不会将帧转发回接收帧的同一端口。 ​

最常见的是,当交换机需要洪泛帧时会发生这种情况——帧将被复制并发送到除接收帧的交换机端口之外的每个交换机端口。 ​

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

交换机操作

现在我们已经了解了交换机的每个单独功能,我们可以看看它们的运行情况。 下面的动画包括一个交换机在处理流量时执行所有四个功能。 ​

通常,下面动画中的主机需要进行 ARP 解析,但为了关注交换机的操作,我们将省略 ARP 就好像所有主机都已经知道彼此的 IP 和 MAC 地址一样。

主机 A 有“东西”要发送给主机 B。“东西”的内容完全无关紧要,只要它理解该帧具有 L2 报文头,其中包括源和目标 MAC 地址。 ​

最初,交换机的 MAC 地址表是空的。 请记住,只有在收到帧时才会填充它。 ​

当主机 A 向交换机发送帧时,它包含 aaaa.aaaa.aaaa 的源 MAC 地址。 这会提示交换机学习 MAC 地址表条目,将端口 1 映射到 MAC 地址 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。 “全F”地址是专门为广播保留的。 ​

根据定义,如果交换机遇到目标 MAC 为 ffff.ffff.ffff 的数据包,它将始终洪泛该帧(当然是在学习源 MAC 之后)。 ​

另一种看待它的方式是,由于地址 ffff.ffff.ffff 是保留的,因此交换机无法为其学习 MAC 地址表映射。 因此,任何以该 MAC 地址为目的地的帧都将被洪泛。 ​

综上所述,广播是发送给本地网络上所有人的帧 (ffff.ffff.ffff),而洪泛是交换机可以执行的操作。 根据定义,广播帧将始终被交换机洪泛。 但是交换机永远不会广播帧(因为广播不是交换机的功能)。 ​

翻译
Host to Host through a Switch[1]

参考资料

[1]

Host to Host through a Switch: https://www.practicalnetworking.net/series/packet-traveling/host-to-host-through-a-switch/

PythonCN

2021/08/19  阅读:57  主题:橙心

作者介绍

PythonCN