关于代理arp的原理以及通信过程解析

,,在看一些技术文档的时候,突然想到了代理arp这个东西,之前一直也没注意,所以就趁着今天去学习了下。

首先就是拓扑图:这里我用模拟器画图~ ~用真机(思科1921)做的实验

,,,,,关于代理arp的原理以及通信过程解析

,,,网上大多数人以及网站对于代理ARP的解释:当电脑没有设置默认网关时,如果电脑要和不同网段的客户端进行通信,那么需要知道目的的mac地址,如何获取,当然是通过ARP了,但是如果目的地址和本地地址不属于同一个网段呢?问题就出现在这里了,很多人认为PC此时会发送ARP广播,然后路由器的接口如果开启了代理ARP(使用没有ip ARP代理开启,全局使用ip ARP代理禁用关闭)功能就会以自己的接口mac回应,但是事实并非如此。实际的情况是,电脑不会发送任何ARP的报文。见下图

,,,,, 关于代理ARP的原理以及通信过程解析

,,,,,,,大家可以看的到,PCA没有发送任何ARP和ICMP报文,因为如果目的网段和自己的网段不同,并且电脑没有设置默认网关,电脑会直接丢弃,这个和是否开启ARP代理没有半毛钱的关系…

,,,,,,,ARP代理此时是开启的

,,,关于代理arp的原理以及通信过程解析


可以看的到,就算PCA使用平命令,路由器没有获得任何有关PCA和PCB的arp表项。

,,,,,,,,,,关于代理arp的原理以及通信过程解析

,,,,,,,,,,



说到这里,大家应该清楚了,ARP代理并不是网上说的那样充当什么默认网关啥的,那么到底这玩意怎么用呢?


接下来我们使用另外一个拓扑,如图:

关于代理ARP的原理以及通信过程解析“> <br/> </p> <p>是的就是这么奇怪的拓扑,路由器左边PC掩码和路由器的G0/0不同,右边则是一致的。</p> <p>先关闭ARP代理</p> <p> <img src=

全局使用ip ARP代理禁用关闭即可。

然后抓包。记住此时B的网关都没有设置

为什么这里PCA也没有网关,但是却发送了ARP请求呢?

。所以上图只有ARP请求但是没有ARP应答。所以此时PCA的ARP表项以及路由器的ARP表项都不会产生变化。当然,PCA多了几个奇怪的ARP表项我也没有去查是干嘛的。


如果此时让路由器获取到PCB的mac地址,在关闭ARP代理的前提下,路由器是否会将PCB的mac告知给PCA呢。

很简单,我们使用PCB平路由器的G0/1接口地址,虽然PCB没有默认网关,但是由于两者属于同一个网段,所以能够ping通,而且路由器能够获取PCB的mac地址。

关于代理ARP的原理以及通信过程解析

再次使用PCA萍PCB,然后观察PCA的ARP表项。还是没有任何变化,因为一的ARP请求到达路由器之后,路由器会从OSI模型的第一层依次解封装,解封装到第二层的时候,由于目的mac为广播,没有开启ARP代理,路由器会直接丢弃广播包,所以即使路由器有B的mac地址,也不会给A ,ARP应答。

即使此时所有设备都有了其他的MAC地址表项(使用静态绑定),也是无法联通的,因为单播报文拆包时,到第二层,如果目的MAC不是路由器自身的接口地址,路由器也是会直接丢弃。


接下来就是开启ARP代理。使用no ip arp代理(看起来很奇怪)。

开启arp代理之后,PCA能够获取到PCB的MAC地址,并且是路由器G0/0的MAC地址。

关于代理arp的原理以及通信过程解析

使用平命令,Icmp回应请求报文能够成功到达PCB。这点是由PCB上面使用Wireshark抓包得到的结论。我就不截图了太麻烦了。

但是PCB受到该报文之后,创建Icmp回应应答报文的时候,由于目的地址和自己不属于同一个网段,并且又不是广播地址,而且自身又没有设置默认网关,所以直接丢弃,萍的回包,所以对于主成分分析来说是无法获取回复的,如图:

关于代理arp的原理以及通信过程解析

关于代理arp的原理以及通信过程解析