![思科小型 LAN 上的 ARP 连接](https://linux22.com/image/583693/%E6%80%9D%E7%A7%91%E5%B0%8F%E5%9E%8B%20LAN%20%E4%B8%8A%E7%9A%84%20ARP%20%E8%BF%9E%E6%8E%A5.png)
我感到自己很无能为力,有这个疑问,所以就有了这个疑问:为什么我没有连接?
案例很简单,我已经配置了拓扑并保证每台 PC 与各自的网关之间的连接。
问题是,当我尝试 ping 另一个网络中的设备(例如 PC1 到 PC0)时,发生了以下事件
- PC1广播arp获知R0的MAC网关
- R0 回复 arp 给 PC1
- PC1发送icmp数据包R0
- R0广播arp获知PC0的MAC地址
- PC0 没有回复,因为“ARP 请求的发送方 IP 地址与接收端口位于不同的网络中。”
所以我想知道为什么 PC0 没有回复?这是 ARP 的基本功能吗?
显然,我已经配置了 2 个静态路由(每个路由器上一个)以将数据包路由到同一接口上的另一个网络。
on R1 : ip route 192.168.1.0 255.255.255.0 FastEthernet0/0
on R0 : ip route 172.16.200.0 255.255.255.0 FastEthernet0/0
非常感谢您的回答!
===========================(编辑)更新/回答================================
在我阅读 RFC 后,我明白了为什么这不起作用。其实很简单,ARP 尚未开发/设计用于响应(回复)来自另一个网络的请求。在这种情况下,我强制转发(通过静态路由)到路由器不属于的网络。在一些文档中,他们说这个协议位于第 2 层和第 3 层之间(第 2.5 层 LOL),但实际上它从未跨越第 3 层,它只在帧中发送有关第 3 层的信息。因此,当设备从另一个网络收到 ARP 请求时,它会处理该帧(需要转换帧中的 IP),并看到另一个网络中的 ARP 请求发送方 IP 自动丢弃该帧。要在另一个网络中执行 arp 请求,我们需要一个第 3 层设备作为 ARP 代理,它只需中继 arp 的请求和回复,显然在每个网络上都有连接。这是一个奇怪的设计,有点愚蠢,但了解有关 ARP / LAN 的更多信息很有趣。我想对那些回复并尝试提供帮助的人说声谢谢。
答案1
如果中间有路由器,则您可以跨广播域工作。ARP/第 2 层通信明确在 mac 地址之间完成。
典型情况下会发生什么:
PC 1 (ip XXXX,mac XX:XX:XX:XX:XX:XX) 想要连接到 PC 2 (ip YYYY,mac YY:YY:YY:YY:YY:YY) PC 1 注意到 IP YYYY 不是“本地可路由的”,因此它将数据包发送到路由器 (ip ZZZZ,mac ZZ:ZZ:ZZ:ZZ:ZZ:ZZ)
此时,离开 PC1 的数据包如下所示:src ip = XXXX src mac = XX:XX:XX:XX:XX:XX, dst ip = YYYY, dst mac = ZZ:ZZ:ZZ:ZZ:ZZ:ZZ
交换机将数据包“交换”到路由器(因为它已经知道 ZZ:ZZ:ZZ:ZZ:ZZ:ZZ 插入了哪个端口),路由器知道 IP YYYY 在其另一个接口上,并相应地将数据包路由到 PC2。
此时,离开路由器的数据包如下所示:src ip = XXXX src mac = ZZ:ZZ:ZZ:ZZ:ZZ:ZZ, dst ip = YYYY, dst mac = YY:YY:YY:YY:YY:YY
PC2 接受其 mac 地址上的数据包...并且还注意到该 IP 是发往其自身的...然后对数据包进行任何处理。
PC1 从未知道过 MAC 地址。没有直接的方法可以知道不在同一广播域中的设备的 MAC 地址……因为“物理地址”(或 MAC) 仅用于与本地连接的设备进行本地通信。