协议栈如何确定回复包的目的mac?

网络工程 ARP 第 2 层 第 3 层
2022-02-20 20:58:36

假设网络堆栈接收到传入消息:

  • 以太网发现 EtherType 是 IPv4,因此有效负载被转发到 IPv4 处理程序
  • IPv4 看到 IP 协议号是 ICMP,因此将消息传递给 ICMP 处理程序
  • ICMP 类型是Echo-Request,因此会创建Echo-Reply数据包并将其发送到 IP 处理程序
  • IP 将其发送到以太网
  • 但是,此时我们需要知道目标 MAC 地址。

目标 MAC 如何确定?

  • 是通过检查原始请求的以太网标头找到的吗?
  • 还是使用 ARP 找到的?(在 ARP 缓存中搜索,如果不在缓存中,则发送 ARP 请求。)

我使用 ICMP 请求作为传入请求数据包的一个示例。处理 TCP-SYN 数据包时可能会问同样的问题。

1个回答

是通过检查原始请求的以太网标头找到的吗?

不,路由并不总是对称的,因此请求可能来自另一台路由器,而不是我们需要发送回复的路由器。

还是使用 ARP 找到的?(在 ARP 缓存中搜索并需要潜在的 ARP 请求)

是的。首先 L3 会在路由表中查找目的 IP 以确定下一跳的 IP 地址,然后 L2 会在 ARP 表中查找下一跳(如果在表中找不到,则发出 ARP 请求)。