图解ARP协议(四)代理理ARP原理理与
实践(“善意的欺骗”)
⼀一、代理理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功能,导致通信
故障"这样的问题。
很多⼩小伙伴看到这⾥里里,会有⼤大⼤大的疑惑:
① "什什么! 我们才刚学习了了代理理ARP的实现原理理,现在居然告诉说它没怎么
⽤用?"
② 那为什什么要创造代理理ARP,它的真正使⽤用场景在哪⾥里里??
③ 上述图解中,电脑跨⽹网段通信时ARP到底是如何⼯工作的???
接下来给⼤大家划重点:
第⼀一,代理理ARP仅仅是正常ARP的⼀一个拓拓展使⽤用,是可选项⽽而不不是必要
项;
第⼆二:代理理ARP有特定的应⽤用场景,与⽹网关/路路由的设置有直接关系:当
电脑没有⽹网关/路路由功能时,并且需要跨⽹网站通信时,则会触发代理理
ARP。换句句话说,如果有⽹网关/路路由功能,则不不需要代理理ARP;
第三:正常环境下,当⽤用户接⼊入⽹网络时,都会通过DHCP协议或⼿手⼯工配置
的⽅方式得到IP和⽹网关信息(所以不不需要代理理ARP)。
三、ARP与代理理ARP:不不是互斥⽽而是互补
在⼤大家理理解了了代理理ARP的⼯工作原理理和应⽤用场景之后,接下来我们终于可以
更更加全⾯面的分析开篇的这个经典问题:当⽤用户访问互联⽹网的时候,到底⽤用
ARP还是代理理ARP?跟⽹网关/路路由设置有什什么关系?数据封装⼜又有什什么区
别?
我们通过下⾯面两张图做个对⽐比=>
当电脑没有⽹网关时,PC Ping 8.8.8.8,采⽤用代理理ARP =>
当电脑有⽹网关时,PC Ping 8.8.8.8,采⽤用正常ARP =>
通过上⾯面的对⽐比,我们得到以下信息:
①电脑没有⽹网关时,ARP直接询问⽬目标IP对应的MAC地址(跨⽹网段),采
⽤用代理理ARP;
②电脑有⽹网关时,ARP只需询问⽹网关IP对应的MAC地址(同⽹网段),采⽤用
正常ARP;
③⽆无论是正常ARP还是代理理ARP,电脑最终都拿到同⼀一个⽬目标MAC地址:
⽹网关MAC。
为了了让上⾯面这个总结更更加的通⽤用性,我们将原有的⽹网络拓拓扑稍微复杂化
=>
当电脑没有⽹网关时(采⽤用代理理ARP ),PC 依次Ping 8.8.8.8、8.8.4.4、
114.114.114.114=>