假设网络堆栈接收到传入消息:
- 以太网发现 EtherType 是 IPv4,因此有效负载被转发到 IPv4 处理程序
- IPv4 看到 IP 协议号是 ICMP,因此将消息传递给 ICMP 处理程序
- ICMP 类型是Echo-Request,因此会创建Echo-Reply数据包并将其发送到 IP 处理程序
- IP 将其发送到以太网
- 但是,此时我们需要知道目标 MAC 地址。
目标 MAC 如何确定?
- 是通过检查原始请求的以太网标头找到的吗?
- 还是使用 ARP 找到的?(在 ARP 缓存中搜索,如果不在缓存中,则发送 ARP 请求。)
我使用 ICMP 请求作为传入请求数据包的一个示例。处理 TCP-SYN 数据包时可能会问同样的问题。