首先,每个主机(这里是主机 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 同时发生。