代理ARP原理与实践(“善意的欺骗”)

代理ARP是一种网络通信机制,当电脑访问互联网服务器时,由于目标不在同一网段,路由器会用自身MAC地址响应请求,形成一种“错位”映射。本文探讨了代理ARP的原理、应用场景,以及与正常ARP的区别,揭示了网络通信中ARP与代理ARP的使用情况,强调了代理ARP并非网络通信的主流方式,而是正常ARP的补充,其效果依赖于网关设备的支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、代理ARP概述

我:当电脑要访问互联网上的服务器,目标MAC是什么?

很多小伙伴在刚学习网络协议的时候,经常这样直接回应:不就是服务器的MAC嘛!

这时我会反问:那电脑怎么拿到这个服务器的MAC地址呢? 

小伙伴一般都自信的抛出下面两个点:    

①根据网络通信中数据封装的原则,通信双方需要封装源目IP和MAC地址;   

②如果要拿到目标MAC地址,就需要通过ARP协议进行交互。

我:好,确实没毛病,你是指的下面这个意思吧 ==> 

小伙伴:对对对,是这个意思的。

我:好,你再看看下面这个图,再确认下

小伙伴:好像不太对唉,刚才没注意看...... 互联网这么多路由器,根据之前学过的:

①路由器隔离广播域,每个接口/网段都是独立的广播域;

②ARP请求是二层广播包,广播包没法过路由器,

这样的话,ARP请求广播包根本没法穿越互联网到达目标服务器。

我:那我们平常上微博逛知乎去京东剁手基本都依据上面这张图,通过DNS协议将域名解析为IP地址,通过ARP协议将IP解析为MAC地址。现在ARP请求无法穿越过去,电脑便无法获取目标服务器的MAC地址,怎么跟它通信呢?

小伙伴:。。。。。。

上面这个疑惑,我相信每个学习网络协议的初学者经常会问到,更普遍的情况是,很多工作多年的工程师,也未必能够将下面这几个问题完全搞清楚:

①电脑访问互联网服务器的时候,ARP询问的内容,真的是问服务器的吗?

②什么是代理ARP?跟ARP有什么区别?什么场景下会用到代理ARP?

③代理ARP跟网关(默认路由)设置有什么关系?

所以,这一篇文章虽然是讲代理ARP,但其实核心内容是围绕代理ARP,解读跨网段通信过程中,ARP/代理ARP/网关(默认路由)/数据封装等相关问题

二、代理ARP原理

当ARP请求目标跨网段时,网关设备收到此ARP请求,会用自己的MAC地址返回给请求者,这便是代理ARP(Proxy ARP)。

上面这张图中,电脑发送ARP请求服务器8.8.8.8的MAC地址,路由器(网关)收到这个请求时会进行判断,由于目标8.8.8.8不属于本网段(即跨网段),此时便返回自己的接口MAC地址给PC,后续电脑访问服务器时,目标MAC直接封装为MAC254。

代理ARP本质是一个"善意的欺骗",是一个"错位"的映射。从图中我们看到服务器地址的正常映射是<8.8.8.8-MAC2>,而路由器返回给电脑的,却是 <8.8.8.8-MAC254>。不管是不是"欺骗",至少最终电脑可以与外网的服务器实现通信,以PC Ping Server为例=>

实际网络中,代理ARP由网络中的网关设备来执行,包括路由器、多层交换机、无线路由器、防火墙等设备。并且,网关即便有代理ARP功能,也未必一定执行,还必须满足两个条件:①网关已经开启代理ARP功能;②网关有目标的路由信息。我们来看下面这张图=> 

上面这张图中,我们假设路由器已具备全网的路由,但连接电脑的接口没有开启(或不支持)代理ARP功能,此时便造成一个尴尬的情况:电脑反复询问到8.8.8.8的MAC地址,路由器收到之后,处理流程跟正常ARP是一致的,"问自己的回复,不是问自己的丢弃"。因此,当网络通信采用代理ARP时,可能会"受制于沿途网关设备",造成网络通信故障

进一步思考:既然代理ARP不是一种特别流畅的实现,会"受限于别人",那我们没必要一定要使用它。甚至,这里我们需要搞清一个事实:实际网络中,无论是同网段还是跨网段通信(例如访问互联网),绝大情况下都是使用正常的ARP,而不是代理ARP。生活中的上网的经验也已经告诉我们,好像从来没有遇到或听到过"XXX设备不支持代理ARP功能,导致通信故障"这样的问题。

很多小伙伴看到这里,会有大大的疑惑:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值