路由器如何找到在自己的子网中托管的方法?

网络工程 路由器 子网 MAC地址 ARP
2022-02-06 01:42:26

我了解每个路由器都维护一个 ARP 模块,该模块存储每个客户端的 IP 地址和关联的 MAC 地址。假设一个路由器的子网中有 512 个客户端。当路由器从另一个子网获得数据报时,它会检查链路层的 MAC 地址,并通过检查 ARP 模块来确认数据报的目的地是否在其子网中。

我的问题是:数据包到达子网后究竟如何到达目标主机?是这样的:路由器将该数据包发送给所有客户端,并且每个客户端只有在数据包中的 MAC 地址与其自己的 MAC 地址匹配时才会处理该数据包?

如果是这种情况,为什么路由器要维护一个 ARP 模块,因为在这两种情况下它都在广播每个数据包?

2个回答

你似乎对几件事感到困惑。

假设一个路由器的子网中有 512 个客户端。当路由器从其他子网获得数据报时,它会检查链路层的MAC地址,并通过ARP模块检查数据报的目的地是否在它的子网中。

这不是它的工作原理。MAC 地址仅在具有该 MAC 地址的主机所在的 LAN 中很重要,甚至可以看到。MAC 地址不会通过路由器到达不同的 LAN。当路由器接收到带有源 MAC 地址和目标 MAC 地址的帧时,它会从数据包中剥离该帧,从而丢失原始源 MAC 地址和目标 MAC 地址。

数据包到达子网后究竟如何到达目标主机。

当路由器收到数据包时,剥离了包含源和目标 MAC 地址的帧,它将检查数据包头中的目标 IP 地址,并将数据包切换到指向目标的接口。然后它将为下一跳从头开始为数据包构建一个新帧。下一跳可能不是以太网或任何其他使用 MAC 地址的协议。如果下一跳使用MAC地址,则以下一跳自己的MAC地址为源MAC地址,下一跳的目的设备(另一路由器或终端主机)的MAC地址为源MAC地址构建帧。目的 MAC 地址。

路由器将该数据包发送到所有客户端,并且每个客户端只有在数据包中的 MAC 地址与其自己的 MAC 地址匹配时才会处理该数据包?如果是这种情况,为什么路由器要维护一个 ARP 模块,因为在这两种情况下它都在广播每个数据包?

任何主机,甚至是路由器,发送广播都会向广播地址发送 MAC 地址,而不是特定的主机 MAC 地址。


任何向另一台主机发送 IP 数据包的主机(路由器只是 LAN 上的另一台主机)都会将掩码的目标 IP 地址与其自己的掩码源 IP 地址进行比较。

如果两个 IP 地址在同一个网络上,发送主机将检查其 ARP 缓存以查看它是否已经知道与 IP 地址关联的 MAC 地址。如果它的 ARP 缓存中有它,它将使用该 MAC 地址构建帧。如果它的 ARP 缓存中没有它,它将发送一个 ARP 来查找目标 IP 地址的 MAC 地址。如果具有该 IP 地址的主机做出响应,它会将 MAC 地址添加到其 ARP 缓存中,并使用该 MAC 地址来构建帧。如果目标主机没有响应,数据包将被丢弃,并产生错误。

如果目标 IP 地址在不同的网络上,则发送主机将使用其配置的网关的 MAC 地址来构建帧,以便将包含数据包的帧传递到其配置的网关。它将使用其 ARP 缓存或 ARP 来发现其配置网关的 MAC 地址以构建帧。

您可能对以下几点感到困惑:

当路由器从其他子网获得数据报时,它会检查链路层的MAC地址,并通过ARP模块检查数据报的目的地是否在它的子网中。

不完全的。从另一个接口接收的数据包将具有路由器的 MAC 地址,而不是终端主机的 MAC 地址(注意:有极少数例外,但您现在可以忽略它)。当路由器接收到来自任何子网的数据报时,它做的第一件事就是剥离第 2 层信息并将其丢弃。然后它使用第 3 层信息(即 IP 地址)来确定使用哪个接口,以及主机是否直接连接。

如果是这种情况,为什么路由器要维护一个 ARP 模块,因为在这两种情况下它都在广播每个数据包?

显然,答案并非如此。路由器的行为与任何其他主机一样:它在其 ARP 表中查找主机 MAC 地址,并且(在以太网的情况下)将 IP 数据包封装在以太网帧中,目标 MAC 设置为所需主机的 MAC 地址.