如果子网掩码未知,ARP 请求(单播/广播)将如何

网络工程 子网 arp
2021-07-31 19:20:59

请帮我解决一个关于 ARP 请求的疑问。根据我的理解,IP 的子网由它的子网掩码标识,因此请考虑以下情况:-

假设具有 IP-30.129.33.225 的 Device1需要与具有 IP-30.113.220.62 的 Device2 通信

i)如果 Device1 知道 Device2 IP 的子网掩码-

它计算并发现 Device2 位于不同的子网上,因此为了通信它发送数据报(数据包)到默认网关---没有 ARP 请求。

ii)如果 Device1 不知道 Device2 IP 的子网掩码-

这是我的疑问。设备 1 有什么作用?它是否发送广播 ARP 请求,认为 Device2 与其位于同一子网上?任何网络设备如何计算子网掩码或它们如何识别 IP 的子网并决定是 ARP 还是路由到 GATEWAY。

这个场景很重要,因为在我的例子中 Device1 是一个网络设备发现设备,它从交换机 MAC 表/ARP 表中获取 IP,然后 ping 这些 IP 以查明它们是否是活动的/存在的据我所知,交换机 MAC 表/ARP 表不包含子网掩码。我相信只有路由表有子网掩码信息。Device1 也会发送形式为“who has 30.113.220.62(Device2 IP)”“tell 30.129.33.225(Device1 IP)ARP 广播,或者 Device1 通过某种方式计算掩码并找出 Device2 在不同的网络中,因此路由数据包到默认网关?

ARP请求源IP:0.0.0.0

请指导我。谢谢

3个回答

一个设备永远不知道另一个设备的子网掩码。

设备知道它的 IP 地址和它自己的子网掩码,并根据这些信息知道它所在的网络。

当主机 A 向主机 A 发送数据包时,它仅通过查找 B 的 IP 地址来确定 B 是否在本地网络中。

示例 1:

主机 A:IP 30.129.33.225 - 子网掩码 255.255.255.0。

-> A 属于网络 30.129.33.0/24。
此网络包含 IP 地址 30.129.33.1 到 30.129.33.255(广播地址)

主机 B:IP 30.113.220.62。
这个 IP 不在同一个网络中,所以如果主机 A 向 B 发送数据包,它将发送到网关。

示例 2:

主机 A : IP 30.129.33.225 - 子网掩码 255.0.0.0 -> A 属于网络 30.129.33.0/8 该网络包含 IP 地址 30.0.0.1 到 30.255.255.255(广播地址)

主机 B:IP 30.113.220.62。
这个IP在同一个网络中,所以主机A可以直接向主机B发送一个数据包,它会执行一个ARP请求来查找B的MAC地址。

笔记:

  • 为此,它需要子网掩码是一致的。在示例 2 中,如果主机 B 的子网掩码为 255.255.255.0,则通信可能会失败。

  • 实际上,主机 A 确定 B 是否在同一网络中的方法是将自己的子网掩码应用于自己的 IP 地址和 B 的 IP 地址,并检查结果是否相同。

设备只知道自己的子网掩码,帮助设备计算出自己属于哪个网络。

网络外的一切都必须通过默认网关,网络中的一切都必须使用 ARP 发现。

在您的示例中,设备 1 具有 IP 30.129.33.225

a) 如果子网掩码是255.255.255.0

网络从30.129.33.030.129.33.255该范围之外的所有内容都将转到默认网关。

然而,

b) 如果子网掩码是255.255.0.0

网络更宽(从30.129.0.030.129.255.255),并且该范围之外的所有内容都转到默认网关。

ARP 请求通常限于广播域 = 本地子网或网段。本地子网外的 MAC 地址没有意义。

唯一相关的问题是目标 IP 地址是否在我自己的子网中 = 本地?

如果是,ARP 目的地址并发送到 MAC。

如果没有,从路由表中选择网关,ARP 网关的 IP 地址并发送到该 MAC。

要确定目标 IP 地址是否在您自己的子网内,您可以将自己的 IP 地址与您的网络掩码按位相加,从而得到您的子网地址。然后你按位与目的IP地址网络掩码,并将结果与自己的子网地址进行比较。如果两个子网地址相同,则目的地是本地的。

如果您想发现远程设备的 MAC 地址(无论出于何种原因),您必须在适当的子网中找到(或安装)一个设备,该设备可以对 IP 地址进行 ARP 解析并告诉您 MAC。

发现远程设备比本地设备困难得多(您只需尝试 ARP,当您得到答案时就知道它在那里)。您只能使用 IP/第 3 层功能检测远程设备,因为这些可以路由。

您可以尝试 ping 一个设备(它可能选择不应答或回声请求或应答在途中被过滤),或者您可以尝试连接到某个公共端口。失败时,您可以分析 ICMP 回复(设备请求可能会主动拒绝连接,或者路由器可能会告诉您那里没有人)。如果你什么也没得到,你就不能确定那里什么都没有。