![ARP 查询和 MAC 地址](https://linux22.com/image/1453612/ARP%20%E6%9F%A5%E8%AF%A2%E5%92%8C%20MAC%20%E5%9C%B0%E5%9D%80.png)
基本上,ARP 广播发生在 LAN 内部,向另一个主机询问特定 IP 地址的 MAC 地址。
如果主机位于不同的网络中,源计算机如何知道另一台主机的 MAC 地址?另外,如果源计算机想要向另一台主机发送数据包,在 ARP 广播之后,如果它了解到此 IP 地址的 MAC 地址不在其 LAN 中,它如何请求另一台主机的 MAC 地址?
答案1
如果 A 尝试通过 ARP 查找 B 的 IP 的 MAC 地址,但失败了,则 B 不在其子网中。此时需要路由器,因为路由器的功能是在子网之间转发流量。
在住宅或简单办公室设置中,典型的情况是 A 将把流量转交给默认网关,该网关将是该子网上路由器的 IP。默认网关将由 DHCP 先前分配给 A。
但,因为 A 知道它所在的子网(因为它知道自己的 IP 和子网掩码),所以它通常不需要进行 ARP 查找,除非它试图访问同一子网上的另一台主机。如果您试图访问您所在子网上的某个东西,那么将流量交给路由器是没有用的。因此,如果源主机的 ARP 查找在同一子网中的目标主机失败,则源主机将假定目标主机不存在。它甚至不会尝试在不同子网上的主机上进行 ARP 查找,它只会将它们交给路由器。
尽管如此,代理ARP。
答案2
...如果主机位于不同的网络,源计算机如何知道另一台主机的 MAC 地址?
谁说另一台主机有 MAC 地址?MAC 地址是以太网事物,而不是互联网事物。主机不必知道任何事物除了 IP 地址之外,其他网络上的主机的信息都是未知的。将最终的以太网数据包发送到终端设备是将该以太网数据包放到线路上的设备的责任,而该设备肯定不是该主机(因为它甚至不在该网络上)。
而且如果源计算机要向另一台主机发送数据包,在 ARP 广播之后,如果它得知这个 IP 地址的 MAC 地址不在其 LAN 中,它如何请求另一台主机的 MAC 地址?
这没有意义。MAC 地址显然在 LAN 上,因为该 MAC 地址刚刚响应了其 ARP 广播。如果不是,它怎么能将以太网数据包放在本地 LAN 上在本地局域网?
ARP 查询和 MAC 地址是严格的本地网络协议,用于在必须将本地数据包传输到彼此的设备之间。典型的主机使用此协议来了解如何将数据包发送到其默认网关和 LAN 上的其他主机,而这些是它必须将数据包传输到的唯一设备。显然,路由器必须知道如何将数据包传输到其他网络。
答案3
如果主机位于另一个网络中,则源将不知道主机的 MAC。为了进行通信,源会将数据包发送到其默认网关进行传递。
这是通过发送一个数据包来实现的,该数据包包含网关的 MAC 地址(位于其 LAN 上)和目标主机的 IP 地址。网关将决定如何路由数据包并重新发送,保留 IP 地址,但将 MAC 地址切换到网络下一跳的 MAC。此过程重复进行,直到数据包到达目的地。