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

网络工程 转变 以太网 MAC地址 arp
2021-07-21 13:52:53

假设 switch 表是空的。如果计算机 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 层,但由于主机 A 和 B 之间的连接尚未建立,因此直到现在还没有使用第 3 层协议。一旦建立连接,则只有任何第 3 层协议将被使用。

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

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

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

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

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

现在,如果主机 C 也尝试联系主机 A。将遵循相同的过程,并且只有主机 C 将以其 MAC 地址响应,其他人将丢弃,因为目标 IP 将是主机 C 的仅在 ARP 数据包内。假设交换机和主机 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 地址未知的接口上转发数据包。它必须等待终端主机回复交换机发送的 ARP 广播。