本文档介绍代理地址解析协议(ARP)如何帮助主机在没有主机路由或默认网关的情况下到达远程子网。
本文档需要了解ARP和以太网环境。
本文档中的信息基于以下软件和硬件版本:
思科IOS®软件版本12.2(10b)
思科 2600 系列路由器
注意:本文档中描述的行为不限于这些组件。代理ARP在多个Cisco IOS和Cisco IOS XE平台上可用。功能可用性、默认行为和命令支持因平台和软件版本而异。
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
有关文档规则的详细信息,请参阅 Cisco 技术提示规则。
代理 ARP 是一种技术,即一台主机(通常是路由器)应答要发送至另一台机器的 ARP 请求。路由器使用自己的MAC地址进行回复,并将数据包路由到实际目的地。代理 ARP 可以帮助子网中的计算机到达远程子网,而无需配置路由或默认网关。RFC 1027 中定义了代理 ARP。
下面是代理 ARP 如何工作的示例:
网络图
子网A上的主机A(172.16.10.100)需要向子网B上的主机D(172.16.20.200)发送数据包。如网络图所示,主机A的子网掩码为/16。这意味着主机A认为它直接连接到网络172.16.0.0的所有设备。当主机A需要与其认为直接相连的任何设备通信时,它会向目的设备发送ARP请求。因此,当主机 A 需要向主机 D 发送数据包时,主机 A 相信主机 D 是直接连接的,因此它向主机 D 发送一个 ARP 请求。
为了到达主机D(172.16.20.200),主机A请求与目的IP地址关联的MAC地址。
因此,主机 A 在子网 A 中广播一个 ARP 请求,如下显示:
| 发送方 MAC 地址 | 发送方 IP 地址 | 目标 MAC 地址 | 目标 IP 地址 |
|---|---|---|---|
| 00-00-0c-94-36-aa | 172.16.10.100 | 00-00-00-00-00-00 | 172.16.20.200 |
在此 ARP 请求中,主机 A (172.16.10.100) 请求主机 D (172.16.20.200) 发送其 MAC 地址。然后,该 ARP 请求数据包封装在一个以太网帧中,并将主机 A 的 MAC 地址作为源地址,将广播地址 (FFFF.FFFF.FFFF) 作为目标地址。由于ARP请求是广播,因此它到达子网A上的所有节点,其中包括路由器的Ethernet 0(e0)接口,但不到达主机D。广播无法到达主机D,因为默认情况下,路由器不会在接口之间转发第2层广播帧。
由于代理ARP在接收接口上启用,并且路由器具有通过另一接口到主机D(172.16.20.200)的路由,因此路由器使用自己的MAC地址回复主机A。
| 发送方 MAC 地址 | 发送方 IP 地址 | 目标 MAC 地址 | 目标 IP 地址 |
|---|---|---|---|
| 00-00-0c-94-36-ab | 172.16.20.200 | 00-00-0c-94-36-aa | 172.16.10.100 |
这是路由器发送到主机 A 的代理 ARP 应答。代理 ARP 应答数据包封装在一个以太网帧中,并将路由器的 MAC 地址作为源地址,将主机 A 的 MAC 地址作为目标地址。此交换中的代理ARP应答单播到原始请求者。收到此ARP应答后,主机A更新其ARP表,如下所示:
| IP Address | Mac 地址 |
|---|---|
| 172.16.20.200 | 00-00-0c-94-36-ab |
在ARP条目过期或发生更改之前,主机A将发往172.16.20.200(主机D)的数据包发送到属于路由器的MAC地址00-00-0c-94-36-ab。因为路由器知道如何到达主机 D,所以路由器将数据包转发给主机 D。子网A上主机的ARP缓存包含路由器为其提供代理ARP应答的每个远程目标的路由器MAC地址。因此,所有发往子网B的数据包都会发送到路由器。路由器将这些数据包转发给子网 B 中的主机。
下表显示了主机 A 的 ARP 缓存:
| IP Address | Mac 地址 |
|---|---|
| 172.16.20.200 | 00-00-0c-94-36-ab |
| 172.16.20.100 | 00-00-0c-94-36-ab |
| 172.16.10.200 | 00-00-0c-94-36-bb |
注意:多个IP地址映射到单个MAC地址,即此路由器的MAC地址。在此拓扑中,此模式可能表示代理ARP正在使用中。
必须在Cisco路由器接口上启用代理ARP,路由器才能代表远程目标做出响应。在Cisco IOS上,代理ARP在支持ARP的接口上默认启用。在禁用代理ARP之前,请确保受影响主机具有有效的路由或默认网关。在不需要代理ARP的接口上,使用no ip proxy-arp将其禁用:
Router#configure terminal Enter configuration commands, one per line. End with CNTL/Z. Router(config)#interface ethernet 0 Router(config-if)#no ip proxy-arp Router(config-if)#^Z Router#
要在接口上启用代理ARP,请运行ip proxy-arp接口配置命令。运行show ip interface <interface>以验证输出报告代理ARP已启用。
注意:当子网A上的主机B(172.16.10.200/24)尝试向子网B上的主机D(172.16.20.200)发送数据包时,它会检查其IP路由表。主机B不会向主机D发送ARP请求,因为目的主机不在主机B以太网接口上配置的子网内。主机B将数据包发送到已配置的下一跳。如果没有匹配的路由或默认网关,通信将失败。
代理ARP的主要优点是可以在网络中的单个路由器上启用,并且不会更改网络中其他路由器的路由表。
代理ARP可用于IP主机没有默认网关或通往远程目标的其它路由的网络。
主机无法查看物理网络拓扑,将网络视为一个平面网段,ARP请求可在此平面网段中解析任何目的地址。
代理ARP行为有几个缺点:
它增加了网段中的 ARP 流量。
主机需要更大的 ARP 表才能处理 IP 到 MAC 地址的映射。
安全性可能遭到破坏。一台机器可以声称自己是另一台机器以拦截数据包,这种行为称为欺骗。
它不适用于不使用 ARP 进行地址解析的网络。
当多台路由器为同一个目的地提供代理ARP应答时,它可能会产生不可预测的下一跳选择。
| 版本 | 发布日期 | 备注 |
|---|---|---|
6.0 |
09-Sep-2026
|
固定链接和检查拼写/语法。 |
5.0 |
29-May-2025
|
修复了一些格式问题。 |
4.0 |
06-Mar-2025
|
已修复拼写错误 |
3.0 |
02-Jun-2023
|
重新认证 |
2.0 |
28-Mar-2022
|
已修复或已移除断开的链接。 |
1.0 |
02-Dec-2013
|
初始版本 |