假设我有 3 台计算机 A、B 和 C 连接到同一个交换机,只有本地 VLAN 处于活动状态。A和B属于同一个网络,假设A的IP地址是192.168.1.1/24,B的IP地址是192.168.1.2/24。C属于另一个网络,如192.168.2.1/24。由于交换机工作在 OSI 模型的第二层,它不会知道哪些计算机在同一个网络中。
是什么阻止计算机 C 响应来自计算机 A 的 ARP 请求?
假设我有 3 台计算机 A、B 和 C 连接到同一个交换机,只有本地 VLAN 处于活动状态。A和B属于同一个网络,假设A的IP地址是192.168.1.1/24,B的IP地址是192.168.1.2/24。C属于另一个网络,如192.168.2.1/24。由于交换机工作在 OSI 模型的第二层,它不会知道哪些计算机在同一个网络中。
是什么阻止计算机 C 响应来自计算机 A 的 ARP 请求?
您是正确的,在第 2 层所有计算机都将接收广播数据包,包括对自己网络以外的网络 IP 地址的 ARP 请求。然而,这些计算机的 IP 堆栈将丢弃这些数据包,因为它们识别出这些数据包位于它们自己的本地网络之外。
ARP 是一个广播,但它正在寻找一个特定的地址,而计算机 C 没有那个地址,所以它不会应答。
主机不会对它知道不在其网络上的 IP 地址进行 ARP。相反,它将发往其他网络的流量发送到其配置的网关,并且它可能需要为网关的第 2 层地址进行 ARP,但它甚至不会尝试基于不在自己网络中的主机其配置的 IP 地址和掩码。
计算机 A 和 B 永远不会针对计算机 C 的地址进行 ARP,因为根据他们的 IP 地址和掩码,他们知道计算机 C 的地址不在他们的网络上。当计算机 A 和 B 想向计算机 C 发送一些东西时,他们意识到它在另一个网络上,所以他们会将它发送到各自配置的网关。
ARP 请求的语法是这样的:
Who has x.x.x.y? Tell x.x.x.y2
但是交换机看到的是 xxxy 和 xxxy2 在同一个网络上(它有他的 ARP 表来匹配 MAC 和 IP)。
如果您进行捕获,您可以在同一交换机上看到,如果从一个网络到另一个网络,您尝试发出 ping 请求,“谁有 xxxy?告诉 yyyy2”永远不会发生。
交换机只与同一网络上的设备通信
由于交换机工作在 OSI 模型的第二层,它不会知道哪些计算机在同一个网络中。
准确地说,根据您的描述,从 L2 的角度来看,您的所有三台主机都在同一个网络上,并且交换机知道是这种情况。交换机不关心 IP 地址是什么,因为它只使用 L2 寻址。
在您的示例中,所有三台计算机都将接收 L2 广播和单播洪水。例如,如果 A 为 B 提供 ARP,C 也会看到此广播。
是什么禁止计算机 C 回答来自计算机 A 的 ARP 请求?
交换机上没有任何东西可以阻止 C 回答来自 A 的请求。
然而,在这个例子中,A 永远不会向 C 发送请求。如果 A 有到 C 的流量,A 将使用它自己的 IP 地址和掩码来确定 C 是否在本地网络上。在这种情况下它不是,因此 A 将查看它的路由表以确定将流量转发到哪里(在大多数计算机上,这通常是默认路由或网关)。
让我们稍微扩展一下这个例子,说 B 配置错误的是 /22 掩码(包含 192.168.1.0/24 和 192.168.1.0/24 和 192.168.2.0/24 的最小网络)而不是它应该有的 /24。如果 B 有 C 的流量,它将确定 C 在本地网络上,B 将为 C 进行 ARP。当 C 收到此 ARP 请求时,它不应该响应,因为它会确定 B 不在本地网络上。