温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2020-06-15 16:14:28 来源:网络 阅读:1252 作者:dearluo122 栏目:网络安全

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

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

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

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

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

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

        ARP代理此时是开启的

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

这里请教下大神,这个Local Proxy ARP是干嘛的,始终不能显示为enable。。求看到的大神指导


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

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

          



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


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

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

是的 就是这么奇怪的拓扑,路由器左边PC掩码和路由器的G0/0不同,右边则是一致的。

先关闭ARP代理

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

全局使用ip arp proxy disable关闭即可。

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

先查看PCA的arp表项

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

和之前说的一样,PCA不会产生任何报文,所以当然也不会有任何其他的ARP表项了。

此时的路由器任然也是只有自己两个接口的ARP表项。

那么接下来我们使用PCA ping PCB,会出现什么现象呢?

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

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

因为!!!

PCA的网络号为172.16.0.0.(ip地址和掩码进行与运算),PCB的地址为172.16.2.2。PCA会将自己的掩码和PC地址进行与运算,发现自己和目的地址属于同一个网段(即使PCB的网段是172.16.2.0/24)。所以才会产生ARP请求,但是由于路由器关闭了ARP代理,所以不会对PCA的ARP请求进行响应。所以上图只有arp request但是没有arp reply。所以此时PCA的ARP表项以及路由器的ARP表项都不会产生变化。当然,PCA多了几个奇怪的ARP表项我也没有去查是干嘛的。


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

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

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

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

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


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

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

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

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

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

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

说到这里 我就有一个疑问了,在这诚心请教大牛。

 我在PCB静态绑定ARP  PCA'S ip-》G0/1's mac。按照我的想法,当创建reply报文的时候,从上到下依次封装,封装到数据链路层的时候,目的mac地址为G0/1的mac地址。应该会回复,为什么PCB直接丢弃了而不是进行回复!!!


如果想要PCA能够ping通PCB,在PCB上指定默认网关即可。

指定默认网关后,A<->B可以双向正常通信,原理见上面的那段

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


到现在应该基本解释清楚了代理ARP的功能和作用,其实非常鸡肋。

对了还有一点。指定默认默认网关和使用ARP代理PC的arp表项完全不同。

使用ARP代理:会存在不同网段的ip和mac的对应 如图

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

但是使用默认网关的时候只会存在一个对应关系。那就是网关以及网关mac的对应关系 如图

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

最后就是,写这个的时候我百度了一些东西,有一部分和狼哥的差不多,只不过有些细节方面我测试了下。@狼哥 他的博客的地址是bbs.51cto.com/thread-651652-1.html.


希望高手能够消除我之前的疑问,谢谢了~~

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI