假设我有以下连接: [HostA] - - - - R1---- Internet - - - - R2---- [HostB]
现在,我想从 HostA 通信到 HostB,
HostA是否真的解析了HostB的IP地址,或者如果它有一个网关,例如R1,它是解析HostB IP地址的默认网关MAC地址,还是HostB的MAC地址?
我假设如果目标 IP 子网是路由器路由表的一部分,那么它会解析目标 IP 地址的下一跳路由器 MAC 地址。我对么?
假设我有以下连接: [HostA] - - - - R1---- Internet - - - - R2---- [HostB]
现在,我想从 HostA 通信到 HostB,
HostA是否真的解析了HostB的IP地址,或者如果它有一个网关,例如R1,它是解析HostB IP地址的默认网关MAC地址,还是HostB的MAC地址?
我假设如果目标 IP 子网是路由器路由表的一部分,那么它会解析目标 IP 地址的下一跳路由器 MAC 地址。我对么?
源主机会将目标地址与其自身网络的地址进行比较。如果它在同一个网络上,它将使用类似 ARP 的方法将第 3 层(例如 IP)地址解析为第 2 层(例如 MAC)地址。然后,它将第3 层数据包用第2 层帧封装,并直接发送到本地目的主机。
如果目标地址在不同的网络上。主机将使用其配置的网关(网络上知道如何到达其他网络的主机;通常是路由器)的第 2 层地址将第 3 层数据包封装为第 2 层帧。主机可能需要使用类似 ARP 的方法将网关第 3 层地址解析为第 2 层地址。
路由器将剥离第 2 层帧,查看第 3 层目标地址,查看其路由表以查看它是否有到目标网络的路由。如果它没有路由,它将丢弃数据包。如果它有路由,它将为接口创建一个第 2 层帧,它必须将数据包发送到该接口才能到达目的地,并将新帧从接口转发到目的地。
为了转发数据包,主机或路由器在其路由表中查找目标 IP 地址。
路由可以只指向一个接口,也可以指向一个接口和一个下一跳 IP 地址。如果路由指定了下一跳 IP 地址,则将使用它,否则将使用目标地址作为下一跳 IP 地址。
接下来发生的事情取决于传出接口上使用的 L2 封装。如果它是以太网或类似的,那么 IP 地址将使用 ARP 表映射到 MAC 地址,如果需要,还会进行 arp 查找。如果接口是真正的点对点,那么下一跳 IP 地址很可能会被忽略。
通常,唯一没有指定下一跳的路由是直接连接网络的路由(通常作为配置接口地址的一部分隐式创建)。