重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
在看一些技术文档的时候,突然想到了代理arp这个东西,之前一直也没注意,所以就趁着今天去学习了下。
网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、小程序制作、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了上党免费建站欢迎大家使用!首先就是拓扑图:这里我用模拟器画图~~用真机(CISCO 1921)做的实验
网上大多数人以及网站对于代理ARP的解释:当PC没有设置默认网关时,如果PC要和不同网段的客户端进行通信,那么需要知道目的的mac地址,如何获取,当然是通过ARP了,但是如果目的地址和本地地址不属于同一个网段呢?问题就出现在这里了,很多人认为PC此时会发送ARP广播,然后路由器的接口如果开启了代理arp(使用 no ip arp proxy开启,全局使用Ip arp proxy disable关闭)功能 就会以自己的接口mac回应,但是事实并非如此。实际的情况是,PC不会发送任何ARP的报文。见下图
大家可以看到,PCA 没有发送任何ARP和ICMP报文,因为如果目的网段和自己的网段不同,并且PC没有设置默认网关,PC会直接丢弃,这个和是否开启ARP代理没有半毛钱的关系。。。
ARP代理此时是开启的
这里请教下大神,这个Local Proxy ARP是干嘛的,始终不能显示为enable。。求看到的大神指导
可以看到,就算PCA使用ping命令,路由器没有获得任何有关PCA和PCB的arp表项。
说到这里,大家应该清楚了,ARP代理并不是网上说的那样充当什么默认网关啥的,那么到底这玩意怎么用呢?
接下来我们使用另外一个拓扑,如图:
是的 就是这么奇怪的拓扑,路由器左边PC掩码和路由器的G0/0不同,右边则是一致的。
先关闭ARP代理
全局使用ip arp proxy disable关闭即可。
然后抓包。记住此时A B的网关都没有设置
先查看PCA的arp表项
和之前说的一样,PCA不会产生任何报文,所以当然也不会有任何其他的ARP表项了。
此时的路由器任然也是只有自己两个接口的ARP表项。
那么接下来我们使用PCA ping PCB,会出现什么现象呢?
为什么这里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地址。
再次使用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地址。
使用ping命令,Icmp echo request报文能够成功到达PCB。这点是由PCB上面使用Wireshark抓包得到的结论。我就不截图了 太麻烦了。
但是PCB受到该报文之后 ,创建ICMP echo reply报文的时候,由于目的地址和自己不属于同一个网段,并且 又不是广播地址,而且自身又没有设置 默认网关,所以直接 丢弃 ping的回包,所以对于PCA来说是无法获取reply的,如图:
说到这里 我就有一个疑问了,在这诚心请教大牛。
我在PCB静态绑定ARP PCA'S ip-》G0/1's mac。按照我的想法,当创建reply报文的时候,从上到下依次封装,封装到数据链路层的时候,目的mac地址为G0/1的mac地址。应该会回复,为什么PCB直接丢弃了而不是进行回复!!!
如果想要PCA能够ping通PCB,在PCB上指定默认网关即可。
指定默认网关后,A<->B可以双向正常通信,原理见上面的那段
到现在应该基本解释清楚了代理ARP的功能和作用,其实非常鸡肋。
对了还有一点。指定默认默认网关和使用ARP代理PC的arp表项完全不同。
使用ARP代理:会存在不同网段的ip和mac的对应 如图
但是使用默认网关的时候只会存在一个对应关系。那就是网关以及网关mac的对应关系 如图
最后就是,写这个的时候我百度了一些东西,有一部分和狼哥的差不多,只不过有些细节方面我测试了下。@狼哥 他的博客的地址是bbs.51cto.com/thread-651652-1.html.
希望高手能够消除我之前的疑问,谢谢了~~
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。