交换机如何学习交换机表?

网络工程 转变 以太网 MAC地址 ARP
2022-02-20 11:24:39

假设开关表是空的。如果计算机A向计算机B发送一个帧,交换机会广播询问谁拥有B的mac地址。如果C突然向A发送一个帧怎么办?是什么机制使交换机不会错误地认为计算机 C 是计算机 B?是不是它记住了计算机 A 所需目的地的 MAC 地址,当 C 试图到达 A 时,它还包含自己的 MAC 地址,而交换机发现它与计算机 A 想要的目的地不同?

基本上我是在问,当一个交换机为主机 A 发送的请求发送一个未知的 MAC 地址时,它如何知道目的地正在响应主机 A,或者其他主机是否恰好正在向 A 传输?

4个回答

第 2 层交换机(网桥)有一个 MAC 地址表,其中包含 MAC 地址和物理端口号。交换机遵循这个简单的算法来转发帧:

  1. 当接收到帧时,交换机将源 MAC 地址与 MAC 地址表进行比较。如果 SOURCE 未知,交换机会将其与接收帧的物理端口号一起添加到表中。这样,交换机就可以获知每一个传输设备的MAC地址和物理连接端口。

  2. 然后交换机将 DESTINATION MAC 地址与表进行比较。如果有条目,则交换机将帧转发出相关的物理端口。如果没有条目,则交换机将帧发送到其所有物理端口,但接收帧的物理端口除外(泛洪)。如果 DESTINATION 与 SOURCE 位于同一端口(如果它们都位于同一段上),则交换机将不会转发该帧。)

请注意,交换机在收到来自该设备的帧之前不会学习目标 MAC。

您的问题假定交换机参与或知道两个主机之间的通信/对话(这是 A 和 B 之间的对话还是 A 和 C 之间的对话?)。交换机不参与两台主机之间的通信/对话。它只知道(或获知)哪个 MAC 地址与哪个端口相关联,并将发往特定 MAC 地址的流量转发(或交换)到相关端口(一旦获知哪个端口与 MAC 地址相关联),无论是否源是 B、C 或连接到任何其他交换机端口的任何其他主机。

交换机在第 2 层工作。会话管理是更高层的责任。

首先每个主机(这里是主机 A 和 B)都有它们的路由表和 arp 缓存表。

当主机 A 尝试访问主机 B 时,主机 A 将首先查看它的路由表,以查找它应该将流量发送到哪个接口。假设主机 B 与主机 A 在同一个网络中。

我们已经知道主机 B 的 IP ,现在在路由表之后主机 A 会看到 arp 缓存,看看它是否已经缓存了主机 B 的 MAC 地址。在这种情况下,我们假设它不存在。

现在,主机 A 将执行的操作会将以太网帧(第 2 层)目标 MAC 填充为 FF:FF:FF:FF:FF:FF:FF (这意味着广播又名 ARP)。ARP(地址解析协议)是第 2 层协议。请记住,到目前为止,第 3 层协议类型(Internet 协议)尚未应用,或者我们可以说它是填充的。

ARP 数据包包含以下字段(您也可以从 wireshark pcaps 中看到,只需将其过滤为 arp):

目标 MAC:FF:FF:FF:FF:FF:FF:FF --> 在 pcaps 中,您将在 Wireshark 中看到它类似于“广播”目标 IP:主机 B 源 MAC:主机 A 源 IP:主机 A

当然,源 IP 和目标 IP 仅来自第 3 层,但到目前为止还没有使用第 3 层协议,因为主机 A 和 B 之间的连接尚未建立。建立连接后,将仅使用任何第 3 层协议。

在这里,交换机将如何第一次了解主机 A MAC 地址,如果之前没有条目,它将在其 MAC 表中更新此地址。

现在,一旦交换机将以太网帧目标 MAC 视为广播(ARP),它将向该网络中的每个主机发送 ARP 请求。请记住,由于 ARP 是第 2 层协议,它不能路由到其他网络,除非它是从主机 A 的网络发送的。

到目前为止,ARP 将到达该网络中的每台主机,询问曾经有过的人,请告诉主机 A 的 MAC 地址。一旦从主机 B 收到 ARP 回复,因为目标 IP 在 ARP 数据包中属于主机 B,只有主机 B会回应其他人会简单地丢弃它,

在这里,交换机和主机 A 都将分别更新它们的 MAC 表和 arp 缓存表以获取主机 B 的 MAC 地址。

这就是 Switch 学习其 MAC 表的方式。

现在,如果主机 C 也尝试联系主机 A。将遵循相同的过程,并且只有主机 C 将以其 MAC 地址响应,其他主机将丢弃,因为目标 IP 将仅在 ARP 数据包内属于主机 C。假设交换机和主机 A 都没有可用的 MAC 信息,或者我们可以说主机 A --> B 和主机 C --> A 同时发生。

它不称为开关表;它的 MAC 表。现在考虑 MAC 表是空的。当 A 尝试向 B 发送数据包时;数据包中包含 A 和 B 的 MAC 地址。交换机在 MAC 表中更新 A 的 MAC 地址。现在由于它不知道 B 所连接的端口,所以它在其所有端口广播ARP数据包并等待所有主机回复。

同时,如果 C 尝试向 A 发送数据包,它会从该数据包中提取 C 的 MAC 地址并将其存储在 MAC 表中。现在由于 MAC 地址已经存在于 MAC 表中,所以它知道连接到哪个端口 A。记住数据包包含源和目标的 MAC 地址。因此 B 和 C 的 MAC 地址是不同的。所以开关不会混淆。现在交换机将数据包从 C 转发到 A(假设两者都存在于同一个 VLAN 中)。

要将数据包从 A 发送到 B,它会等待 B 响应交换机发送的 ARP 数据包。当它收到 B 的响应时,它会在其 MAC 表中更新 B 的 MAC 地址。然后最后将数据包转发给 B。

因此交换机不会混淆,因为数据包 (tcp/udp) 包含源 MAC 地址和目标 MAC 地址。并且您的交换机不会在其终端主机 MAC 地址未知的接口上转发数据包。它必须等到终端主机回复交换机发送的 ARP 广播。