,,在看一些技术文档的时候,突然想到了代理arp这个东西,之前一直也没注意,所以就趁着今天去学习了下。
首先就是拓扑图:这里我用模拟器画图~ ~用真机(思科1921)做的实验
,,,,,
,,,网上大多数人以及网站对于代理ARP的解释:当电脑没有设置默认网关时,如果电脑要和不同网段的客户端进行通信,那么需要知道目的的mac地址,如何获取,当然是通过ARP了,但是如果目的地址和本地地址不属于同一个网段呢?问题就出现在这里了,很多人认为PC此时会发送ARP广播,然后路由器的接口如果开启了代理ARP(使用没有ip ARP代理开启,全局使用ip ARP代理禁用关闭)功能就会以自己的接口mac回应,但是事实并非如此。实际的情况是,电脑不会发送任何ARP的报文。见下图
,,,,,
,,,,,,,大家可以看的到,PCA没有发送任何ARP和ICMP报文,因为如果目的网段和自己的网段不同,并且电脑没有设置默认网关,电脑会直接丢弃,这个和是否开启ARP代理没有半毛钱的关系…
,,,,,,,ARP代理此时是开启的
,,,
可以看的到,就算PCA使用平命令,路由器没有获得任何有关PCA和PCB的arp表项。
,,,,,,,,,,
,,,,,,,,,,
说到这里,大家应该清楚了,ARP代理并不是网上说的那样充当什么默认网关啥的,那么到底这玩意怎么用呢?
接下来我们使用另外一个拓扑,如图:
全局使用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地址。
再次使用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地址。
使用平命令,Icmp回应请求报文能够成功到达PCB。这点是由PCB上面使用Wireshark抓包得到的结论。我就不截图了太麻烦了。
但是PCB受到该报文之后,创建Icmp回应应答报文的时候,由于目的地址和自己不属于同一个网段,并且又不是广播地址,而且自身又没有设置默认网关,所以直接丢弃,萍的回包,所以对于主成分分析来说是无法获取回复的,如图: