我有以下配置(我会发布一张图片但没有足够的代表超过 2):
PC1(10.0.2.10/24)和 PC2(10.0.2.137/29)连接到集线器,该集线器连接到接口 FastEthernet0/1(10.0.2.138/24)上的路由器。
我使用此配置运行了两次测试。
第一个测试:我从 PC1 向 PC2 发送了一个 ping 命令,没有为两台主机设置默认网关。PC1 认为 PC2 位于同一子网中,因此它发出了 ARP 广播。但事实并非如此,因此它没有收到任何回复。到目前为止一切顺利。结果
第二次测试:我在 PC1 和 PC2 的路由表中将路由器设置为默认网关。然后我再次从 PC1 向 PC2 发送 ping。这一次,PC2 似乎直接回复了 PC1 的 ARP 广播,而 PC1 继续向 PC2 发送 ping 请求。然后,PC2 使用其路由表通过默认网关回复 PC1,然后获取 ICMP 重定向以更新其路由缓存,从而直接回复 PC1。结果
我的困惑是:当 PC2 位于不同的子网中时,它如何回复 PC1 的 ARP 广播?默认网关如何允许这样做?起初我以为正在使用代理 ARP,但事实似乎并非如此,因为 ARP 数据包的源地址和目标地址是 PC1 和 PC2 的地址,而不是路由器的地址。
答案1
您需要记住,ARP 请求是一种广播,它将发送到广播域上的每台主机。连接到集线器的两台 PC 位于同一个广播域中。
当 PC1 有一个网关时,当您尝试从其网络(到 PC2)发送某些内容(ping)时,ping 将转到网关;PC1 将通过 ARP 查找网关地址(而不是 PC2 地址),并将 ping 发送到其配置的网关。