子网如何不满足对称属性?

网络工程 IPv4 子网 ARP 第 2 层 第 3 层
2022-02-18 16:28:14

在研究 Internet 协议时,我遇到了以下两个设备的示例:

Device A:

IP address: 10.1.1.1
Subnet mask: 255.255.255.0

Device B:

IP address 10.1.1.200
Subnet mask 255.255.255.128

在这种情况下,如果A向B发送数据包,则认为B在同一个网络上;但是,如果 B 向 A 发送数据包,则它认为 A 在不同的网络上。

从数学上讲(在对子网掩码和 IP 地址进行与运算之后),我可以看到会是这样。但是,这对我来说没有直观的意义。B在“低于”A的子网中,这是否意味着A的子网被分成两部分(两个路由器可能处理每个子网)?在这种情况下,主机如何成为同一子网的一部分?

假设简单的主机和路由器,有人可以解释(最好用图表)这在现实世界中的实际外观吗?

2个回答

您所描述的是配置错误,其中两台主机都在同一个第 2 层 LAN 上,但其中一台主机上的掩码设置不正确。关键是它们之间没有路由器。

当主机想要向不同的主机发送内容时,它将使用其配置的掩码屏蔽目标第 3 层地址,以查看目标是否在同一个第 3 层网络上。

如果目的地在同一个网络,主机会通过ARP获取目的地的二层地址,将三层数据包与目的主机的二层地址封装在一个二层帧中,发送帧直接发送到目标主机。

如果目标第 3 层地址在不同的第 3 层网络上,则主机会将第 3 层数据包封装在具有其配置网关的第 2 层地址的第 2 层帧中。

也就是说,Host A 可以得到 Host B 的二层地址,并将三层数据包封装在一个发往 Host B 的二层帧中,但是 Host B 不能得到 Host A 的二层地址,它会使用其配置的网关的第 2 层地址封装第 3 层数据包。

正如 Ron Maupin 所说,这通常是一种错误配置(或者偶尔是一种过渡情况。)

如果如您所描述的,A 认为 B 是邻居,但 B 认为 A 不是邻居,并且它们已连接(例如通过交换机),则有许多情况与它们如何实现 ARP 有关。如果您发现自己的配置如此不匹配,那么了解会发生什么对于调试非常有用。请注意,嵌入式设备 IP 实施的质量与主要路由器和主机操作系统实施的质量不同。

ARP RFC 826是在分类寻址成为标准时发布的(1982 年),早在RFC 1519(1993 年)引入 CIDR 之前。因此,它不包括同一网络上具有不同网络掩码的两台主机的情况,即使子网划分当时很常见。很明显,请求者不应该请求超出其范围的 IP 地址(尽管某些操作系统确实这样做了)。但是,如果主机从自己网络之外的 IP 地址(由接收者的网络掩码定义)接收到 ARP 请求,应该怎么做?ARP RFC 和后续的主机要求 RFC 均未涵盖此内容。

使用当前 Cisco 和 Ubuntu 进行的测试表明,它们不会从接收器网络外部响应 ARP。但肯定有可能某些操作系统仍然“草率”并在不查看本地网络掩码的情况下回答 ARP 请求。(实际上,某些操作系统可能会更新 B 的 ARP 表,从而使 B 认为 A 是本地的,尽管网络掩码说了什么。)

  • 如果 A 没有 B 的现有 ARP 条目,它将发送一个 ARP 请求
  • B收到ARP请求
  • 如果 B 是“严格的”,它将忽略该请求;如果“马虎”,它将发送 ARP 回复
  • 如果 A 期望 ARP 回复但没有得到回复,它可能会重试
  • 如果 A(现在)有 B 的 ARP 条目
  • A将IP数据包发送给B
  • B收到数据包
  • 如果 B 有合适的本地路由器 R,将向 R 发送回复

可以使用 A 上 B 的静态 ARP 条目进行测试。

我通常忽略代理 ARP,因为它只是将问题转换为“如果 A 认为 P 是邻居但 P 认为 A 不是邻居”。