代理ARP与传统ARP在网络通信中的应用及区别研究
一些问题
- 路由器隔离广播域,每个接口/网段都是独立的广播域
- ARP请求是二层广播包,广播包没法通过路由器
- ARP请求没法穿越互联网到达目标主服务器
一些思考
- 电脑访问互联网服务器的时候,ARP询问的内容,真的是访问服务器么?
- 当电脑访问互联网服务器(如百度)时,ARP询问的是默认网关的MAC地址,而非服务器本身的MAC。
- 访问互联网服务器是跨网段通信,目标服务器与本地设备不在同一个子网,数据必须通过网关转发
- ARP仅在同一广播域有效,无法跨越路由器直接获取外网设备的MAC
- 什么是代理ARP?和ARP有什么区别?什么场景会用到代理ARP?
- 代理ARP:路由器代替其他设备响应ARP请求的行为,使设备误以为目标IP在同一个子网内
- 代理ARP与ARP的区别
特性 普通ARP 代理ARP 响应者 目标设备自身 路由器/网关 使用场景 同一子网内通信 跨子网通信(无网关配置时) ARP表记录 真实IP-MAC映射 外网IP→路由器MAC 拓扑要求 无需路由器 需启用代理ARP的路由器 - 代理ARP的使用场景
- 无网关配置的网络
- 场景:设备未设置默认网关,但需访问其他子网
- 解决方案:路由器代理ARP欺骗设备,使其认为目标可达
- 透明桥接环境
- 场景:防火墙或透明模式设备需隐藏自身存在
- 移动IP/VPN通道
- 场景:远程设备需要像本地设备一样被访问
- 实现:本地网关代理响应远程设备的ARP请求
- 无网关配置的网络
- 代理ARP和网关(默认路由)设置有什么关系?
- 互补关系
- 有网关配置:设备直接通过网关转发跨子网流量
- 无网关配置:依赖代理ARP实现跨子网通信
- 设备通信决策流程:
- 检查目标IP是否在同一子网
- 是 → 直接ARP询问目标
- 否 → 检查是否有默认网关
- 有网关 → ARP询问网关MAC
- 无网关 → 仍会ARP询问目标IP → 触发代理ARP(如果启用)
- 检查目标IP是否在同一子网
- 互补关系
代理ARP
- 原理:当ARP请求目标跨网段的时候,网关设备收到这个ARP请求,会用自己的MAC地址返回给请求者,这就是代理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>。 - 在实际的网络中,代理ARP由网络中的网关设备来执行,包括路由器、多层交换机、无线路由器、防火墙等设备。并且网关即便有代理ARP的功能,也未必一定执行,需要满足两个条件:
- 网关已经开启代理ARP的功能
- 网关有目标的路由信息
- 假设路由器已具备全网的路由,但连接电脑的接口没有开启(或不支持)代理ARP功能,此时便造成一个尴尬的情况:电脑反复询问到8.8.8.8的MAC地址,路由器收到之后,处理流程跟正常ARP是一致的,"问自己的回复,不是问自己的丢弃"。因此,当网络通信采用代理ARP时,可能会"受制于沿途网关设备",造成网络通信故障。
- 既然代理ARP不是一种特别流畅的实现,会"受限于别人",那我们没必要一定要使用它。甚至,这里我们需要搞清一个事实:实际网络中,无论是同网段还是跨网段通信(例如访问互联网),绝大情况下都是使用正常的ARP,而不是代理ARP。
- 重点
- 代理ARP仅仅是正常ARP的一个拓展使用,是可选项不是必选项
- 代理ARP由特定的使用场景,与网关或路由的设置有直接关系:当电脑没有网关/路由功能且需要跨网段进行通信的时候,就会触发代理ARP(电脑有网关或路由功能就不需要代理ARP)
- 正常环境下,当用户接入网络的时候,都会通过DHCP协议或手工配置的方式得到IP和网关的信息
- 当用户接入网络的时候,DHCP和ARP是两个紧密配合但是功能不同的协议,共同确保设备能正常通信
- DHCP:动态分配IP地址、子网掩码、默认网关、DNS等参数
- 交互的过程:设备广播DHCP Discover → DHCP Server响应Offer → 设备请求IP(Request)→ Server确认(ACK)
- ARP:实现通信
- 作用:将DHCP获取的网关地址转换为网关的MAC地址(物理寻址)
- 触发时机:设备首次访问外网时
- 交互的过程:设备广播:Who has 网关IP? → 网关回复:My MAC is XX:XX:XX → 设备缓存ARP条目
- 核心作用:网络层和数据链路层的翻译官
- 物理寻址:IP-->MAC
- 场景:已知网关的IP是192.168.1.1,但是网卡需要知道其MAC才能发送帧
- 本地通信的基石
- 同一子网内通信:直接通过ARP获取打印机的MAC
- 不同子网内的通信:PC通过ARP获取网关的MAC,通过网关转发数据
- ARP缓存优化
- 设备会缓存IP-MAC的映射,减少重复广播
- 缓存超时会重新发起ARP请求
- 物理寻址:IP-->MAC
- DHCP告诉你“网关是谁”(IP),ARP帮你找到“网关在哪”(MAC),两者如同地址簿和导航的关系。若DHCP分配了错误的网关IP,ARP将无法找到正确路径
-
协议 作用层级 核心功能 与另一协议的关系 DHCP 应用层 分配IP、网关等逻辑地址 为ARP提供目标网关IP ARP 网络层 将IP转换为MAC物理地址 依赖DHCP提供的网关IP完成寻址
ARP与代理ARP:不是互斥而是互补
- 当用户访问互联网的时候,使用ARP还是代理ARP?和网关/路由设置有什么关系?数据封装有什么关系?
- 当电脑没有网关的时候,采用代理ARP
当电脑有网关的时候,采用ARP- 电脑没有网关的时候,ARP直接询问目标IP对应的MAC地址(跨网段),采用代理ARP
- 电脑有网关的时候,ARP只需要询问网关IP对应的MAC地址(同网段),采用正常ARP
- 无论是代理ARP还是ARP,电脑最终得到的都是同一个目标MAC地址:网关MAC
- ARP请求的终极目标:ARP始终是通过IP找MAC,无论是否跨网段,关键在于询问的对象是谁(ARP永远在问"这个IP的MAC是谁")
- 普通ARP:直接问目标IP的MAC(PC发一个广播询问目标的MAC地址,目标设备单播回应自己的MAC地址)
- 代理ARP:问网关目标IP的MAC(跨网段的时候网关代为应答)(PC发一个广播询问目标的MAC地址,路由器启用代理ARP,用路由器的MAC应答,数据包会发往路由器,由路由器转发到目标子网)
-
场景 ARP请求内容 响应者 数据最终目标 同一子网 who has [目标IP]? 目标设备自身 目标MAC 跨网段+代理ARP who has [目标IP]? 路由器(代理应答) 路由器MAC → 目标IP 跨网段+无代理ARP who has [目标IP]? 无响应 通信失败
参考文章
图解ARP协议(四)代理ARP:善意的欺骗 - 知乎
图解ARP协议(一) - 知乎
图解ARP协议(二)ARP攻击篇 - 知乎
图解ARP协议(三)ARP防御篇-如何揪出"内鬼"并"优雅的还手"? - 知乎
图解ARP协议(五)免费ARP:地址冲突了肿么办? - 知乎
图解ARP协议(六)RARP与IARP:被遗忘的兄弟协议 - 知乎
图解IP协议(一) IP协议原理与实践 - 知乎