计算机如何知道将数据包发送到哪里,只有 ip 而不是 mac

How did a computer knows where to send the packet to, only with an ip not mac

使用普通以太网电缆(跳线),您可以使用以太网帧 (https://en.wikipedia.org/wiki/Ethernet_frame) to send data to other computers/devices in my LAN network. In the Ethernet frame, there is a source mac address and a destination mac address. And it has a payload. The payload contains an IP package (https://en.wikipedia.org/wiki/Network_packet)。当我输入命令 ping 192.168.86.40 时,我的计算机如何在不知道用于发送以太网帧的 mac 地址的情况下连接到计算机并发送数据包。您需要一个目标 mac 地址来发送包含 IP 包的以太网帧。如果我使用静态 IP 地址、子网主机和网关 IP 设置我的网络,mac 地址用于网关连接。计算机是否使用广播 mac 地址 FF:FF:FF:FF 来找出网关 mac 地址是什么?

问题是:计算机如何知道将数据包发送到哪里,只有 ip 地址而不是 mac地址才能发送包含 IP 数据包的以太网帧

IPv4 使用 ARP(地址解析协议)- 源节点以广播方式发送 ARP 请求,请求目标 IP 的 MAC 地址。请求被目标节点接收(被其他任何人忽略)并用其 MAC 地址回复。

一旦知道 MAC 地址,源就可以将 IP 数据包封装在以太网帧中并发送出去。

ARP 仅可用于任何 local IP 地址,即。与发件人位于同一子网中的地址。如果您的本地 IP 地址是例如192.168.86.2/24 目的地 192.168.86.40 是本地的。

发送到本地子网外的 IP 地址 需要网关(路由器)- 这可以只是默认网关或本地路由指示的其他特定网关 table。 ARP 仅用于解析此处的网关IP 地址。 IP 数据包使用网关的 MAC 地址作为目标进行封装并发送出去。

网关重复此过程 - 要么在本地通过 ARP 解析目标 IP,要么使用其路由 table 找到下一跳网关,解析其 IP 地址并转发到 MAC .重复这些步骤,直到到达目的地。

因此,您的问题的答案是:

  • 主机使用其本地路由 table 确定到达目的地(可能是目的地本身)的下一跳
  • 下一跃点的 IP 地址使用 ARP(对于 IPv4)解析为它的 MAC 地址
  • IP 数据包封装在寻址到 MAC 的以太网帧中并发送出去

当然,除以太网外,还有其他 link 层,但一般过程与所有基于 MAC 的网络相同。