LAN 上的每个主机都共享相同的 ARP 表,还是主机单独保存它们?

网络工程 ip ipv4 MAC地址 IP地址 arp
2021-07-13 19:42:27

我只是在学习 ARP。我有点困惑。我的困惑在一个场景中得到了更好的解释。

主机 A 正在与主机 B 通信。主机 A 知道主机 B 的 IP 地址,但不知道它的 MAC 地址。因此,它向 LAN 发送一个 ARP 请求,主机 B 用它的 Mac 地址回复。所以现在主机 A 知道主机 B 的 Mac 地址,并且可以将主机 B 的 Mac 地址输入到一个 ARP 表中。


我关于 ARP 表的问题

  1. 主机 A 是在更新自己的ARP 表,还是在整个LAN 中更新共享的 ARP 表

**问题 2 仅适用于问题 1 的答案是“每个主机都有自己的 ARP 表”

  1. 如果 ARP 能力没有在所有 LAN 之间共享,那么同一 LAN 上的其他主机是否会知道主机 A 刚刚收到的这个新信息,如果这些其他主机还没有呢?
    • 让我扩展一下:让我们假设主机 C 和主机 D。既然主机 A 已将主机 B 的 MAC 输入到其 ARP 表中,主机 C 和主机 D 是否会在各自的 ARP 表中知道主机 B 的 MAC 地址?
4个回答

实际上,设备中的每个接口都有自己的 ARP 表。一台主机可以有多个 ARP 表(每个接口对应一个)。ARP 表在主机之间不共享,甚至在同一主机的接口之间不共享,但是主机可能会听到网络上的 ARP 流量并更新听到 ARP 流量的接口的 ARP 表。

以另一种方式回答这个问题:可以使用哪些机制来共享 ARP 表?这是以太网 IP(以及任何类似的第 2 层网络)的基础知识之一。如果一个设备试图与另一个设备共享 ARP 信息,它必须做一些事情,比如广播 ARP 表的条目,知道设备启动时何时获取更新等:所有这些都比方式复杂得多ARP 有效,即给定设备负责告诉其他人关于它自己的信息,并在设备想要了解另一个设备时广播查询。

让我们具体看看每个问题并扩展您的问题,以帮助您更好地了解可能发生的情况。

1. 主机 A 是更新自己的 ARP 表,还是整个 LAN 之间共享的 ARP 表?

不,ARP 表不会在整个 LAN 之间共享。每个设备都有自己的 ARP 表。设备负责管理自己的 ARP 表,包括与条目关联的本地接口。

2. 如果 ARP 能力没有在所有 LAN 之间共享,如果其他主机没有,同一 LAN 上的其他主机是否会知道主机 A 刚刚收到的这个新信息?

对切​​换环境的简短回答是否定的。如果查看ARP 数据包的格式,您将看到该数据包包含发送方硬件 MAC 地址和 IP。当请求设备发送ARP请求报文时,报文被发送到广播地址,由交换机转发到局域网的所有接口(设备)。这允许具有请求的 IP 地址的设备回复并将回复数据包定位到请求它的设备的特定 IP 和 MAC 地址。网络交换机负责维护 MAC 地址表,以便将数据包仅转发到数据包中特定设备的交换机上的接口。下面是一个从 10.0.0.1 发出的 ARP 数据包搜索 10.0.0.2 的示例。

15:00:37.395072 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.0.0.2 tell 10.0.0.1, length 46

也就是说,设备可以发送一个免费的ARP 回复数据包,宣布它们拥有特定的 IP 地址。无偿的 ARP 应答包将被发送到广播地址,再次被转发到 LAN 上的所有设备。在这种情况下,接收该数据包的每个设备都必须选择如何处理该数据包。如果他们的 ARP 表中没有地址,他们通常会忽略它。但是,如果他们的 ARP 表中确实有该地址,则他们应该更新任何更改的信息。以下是从 10.0.0.2 向 LAN 通告的示例数据包:

15:00:38.462135 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.0.0.2 (ff:ff:ff:ff:ff:ff) tell 10.0.0.2, length 46

上面详述的所有行为都可以防止设备在不需要的数据包上浪费处理周期,并在不需要的表条目上浪费内存。

想想 MAC 地址的 ARP 表,有点像老式的电话号码簿。

每个人的手机旁边都有一个笔记本,并会写下与他们交谈/听到的人(设备)的电话号码(MAC 地址)。

每个房子都是一台电脑,每条电话线都是一个接口,每个接口都有自己的 MAC 地址 ARP 表。