我有一个关于接口如何触发 ARP 请求的问题。
例如,如果两台路由器各有一个接口 ->
(A)[intf1: 2.2.2.1/24] ------- (B)[intf2: 2.2.2.2/24]。
如果路由器 A 收到一些发往2.2.2.2的 IPv4 数据包,那么接口 A 是否会仅基于 IPv4 数据包的目标 IP 地址等于它自己的子网来触发 ARP 请求?
我有一个关于接口如何触发 ARP 请求的问题。
例如,如果两台路由器各有一个接口 ->
(A)[intf1: 2.2.2.1/24] ------- (B)[intf2: 2.2.2.2/24]。
如果路由器 A 收到一些发往2.2.2.2的 IPv4 数据包,那么接口 A 是否会仅基于 IPv4 数据包的目标 IP 地址等于它自己的子网来触发 ARP 请求?
通过以太网转发 IP 数据包时需要 ARP。当 IP 地址在本地子网中时,它将被 ARPed,IP 数据包包装到以太网帧中,寻址到 ARPed MAC 地址并发送出去。
当 IP 地址不在本地子网中时,需要另一个路由器(下一跳),因此帧被寻址到路由器的 MAC 地址(这也需要先进行 ARP)。
当然,并非每个 IP 数据包都会触发 ARP 请求 - ARP 响应会缓存一段时间(“ARP 老化”)。
向另一台主机发送内容的主机需要从第 3 层地址解析第 2 层地址,以便创建第 2 层帧来封装第 3 层数据包。这就是 ARP(地址解析协议)的用武之地。
主机应维护 ARP 解析表。该表以三层地址为索引,信息为二层地址。当主机启动时,该表将是空的,并且表条目最终应该超时。
当主机需要从第三层地址解析出第二层地址时(每次向第二层发送一个第三层数据包进行封装),主机会在解析表中查找第三层地址。如果解析表中没有该第 3 层地址的条目,则主机将广播 ARP 请求。如果在一定时间内没有收到回复,数据包将被丢弃,并向应用程序发送一条 ICMP 消息,告诉它主机不可达。当收到目的主机的回复时,将其三层和二层地址添加到表中,下次主机需要向目的主机发送三层数据包时,其分辨率为它的表,至少在表条目超时之前。
即使目标主机位于不同的网络上,也会发生此过程,但在这种情况下,第 2 层目标主机将是主机配置的网关。
从第 2 层的角度来看,路由器只是 LAN 上的另一台主机,ARP 对路由器的作用与对 LAN 上的任何其他主机的作用相同。
ARP 过程在RFC 826,以太网地址解析协议 - 或 - 将网络协议地址转换为 48 位以太网地址以在以太网硬件上传输有详细说明。
谢谢大家回答我的问题。我自己基本上得到了答案,该接口仅触发 ARP 响应,并且仅当它接收到任何落在其网络掩码内的数据包并且它的目的地是远程的。
系统如何知道这个接口?因为到本地接口的路由存在于带有网络掩码的内核路由表中:)