请帮我理解这个简单的arp请求/回复——路由器如何在不知道MAC地址的情况下知道IP地址?

网络工程 思科 arp 层2
2021-07-10 14:12:01

我是网络新手,我在家用 PC 上使用 Wireshark 来了解 ARP。我知道 ARP 用于构建 ARP 缓存,它将 IP 地址与 LAN 上的 MAC 地址相关联。ARP 消息是 L2。

我看到了以下两帧。

 [ ARP Request ] - who has 192.168.1.66 - Tell 192.168.1.254 [GW]

    - Eth: 
            Destination: Micro-St_6d:ea:0c [BOB'S PC]    
            Source: Sagemcom_0c:6b:29   [GW]

我的理解:来自我的默认网关 MAC 的 Arp 请求,询问“如果您有 Bob 的 IP,请回复您的 MAC”。

[ ARP Response] - 192.168.1.66 is at 4C-CC-6A-6D-EA-0C

    - Eth:  
           Destination: Sagemcom_0c:6b:29 [GW]
           Source: Micro-St_6d:ea:0c    [BOB'S PC]

我的理解:来自 Bob 的 PC 的 ARP 响应说“这个 IP 是我 - 这是我的 MAC”

我的问题:

  1. 为什么 arp 请求中的目标字段直接发送到 Bob 的 PC?它怎么知道这是正确的目的地?为什么它会问它是否知道?广播会有所有 F 的目的地,对吗?
  2. 对 ARP 来说更普遍:默认网关如何到达知道 IP 但不知道 MAC 的位置?我知道它们在不同的层上运行,但是在某些时候不需要 L2 来传递这些信息吗?
2个回答

为什么 arp 请求中的目标字段直接发送到 Bob 的 PC?它怎么知道这是正确的目的地?为什么它会问它是否知道?广播会有所有 F 的目的地,对吗?

对。所以它已经知道并且只是确认情况仍然如此。您不想永远缓存 ARP 条目,因为网络可能会发生变化。但是,当您 99.9% 确定要与哪台计算机通话时,就没有理由使用广播并打扰网络中的每台计算机。

对 ARP 来说更普遍:默认网关如何到达知道 IP 但不知道 MAC 的位置?我知道它们在不同的层上运行,但是在某些时候不需要 L2 来传递这些信息吗?

考虑一个典型的 SoHo 路由器设置为将端口 8000 转发到 192.168.1.7——当它从 WAN 收到发送到端口 8000 的入站数据包时,它需要将目标 IP 地址重写为 192.168.1.7 并将数据包发送到机器使用该 IP 地址。它应该如何知道要使用的 MAC 目标地址?

这是典型 SoHo 路由器的唯一情况,因为除了端口转发(以及其他一些罕见的边缘情况,例如本地 DNS 或 NTP 服务器),它们不会发起与尚未与它们通信的 LAN 设备的通信. 尽管如此,他们仍会定期确认 IP 到 MAC 的映射。

并非所有数据链路(第 2 层)协议都使用 MAC 地址,在使用 MAC 地址的协议中,有些使用 48 位,有些使用 64 位 MAC 地址。使用 MAC 地址的是 IEEE LAN 协议,而许多 WAN 协议不使用(有些不使用寻址,其他使用不同的寻址)。

路由器剥离包含第 2 层 (MAC) 地址的第 2 层帧以到达第 3 层数据包。然后,路由器根据第 3 层 (IP) 目标地址转发数据包,使用下一个接口的协议为下一个接口构建新帧。如果下一个接口协议是 PPP 之类的,那么新帧将没有第 2 层地址,如果下一个接口协议是帧中继或 ATM 之类的协议,它将使用该协议的地址作为第 2 层帧,或者如果下一个接口协议是 IEEE LAN 协议,路由器将使用下一个接口协议的 MAC 地址构建一个帧。