ARP - Address Resolution Protocol, 地址解析协议
1. 概述
1.1 作用
ARP(Address Resolution Protocol,地址解析协议):将IP 地址解析为以太网MAC 地址的协议。
在局域网中,当主机或其它网络设备有数据要发送给另一个主机或设备时,它必须知道对方的网络层地址(即IP 地址)。
但是仅仅有IP 地址是不够的,因为IP 数据报文必须封装成帧才能通过物理网络发送,因此发送站还必须有接收站的物理地址,所以需要一个从IP 地址到物理地址的映射。
1.2 报文结构
ARP报文分为ARP请求和ARP应答报文:
- 硬件类型:表示硬件地址的类型。它的值为 1 表示以太网地址;
- 协议类型:表示要映射的协议地址类型。它的值为 0x0800 即表示IP 地址;
- 硬件地址长度和协议地址长度:分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上IP 地址的ARP 请求或应答来说,它们的值分别为6 和4;
- 操作类型(OP):1 表示ARP 请求,2 表示ARP 应答,(3表示RARP请求,4表示RARP应答);
- 发送端 MAC 地址:发送方设备的硬件地址;
- 发送端 IP 地址:发送方设备的IP 地址;
- 目标 MAC 地址:接收方设备的硬件地址。
- 目标 IP 地址:接收方设备的IP 地址。
1.3 地址解析过程
假设主机A和B在同一个网段,主机A要向主机B发送信息。则地址解析过程如下:
- 主机A 首先查看自己的ARP 表,确定其中是否包含有主机B 对应的ARP 表项。如果找到了对应的MAC 地址,则主机A 直接利用ARP 表中的MAC 地址,对IP 数据包进行帧封装,并将数据包发送给主机B。
-
如果主机A 在ARP 表中找不到对应的MAC 地址,则将缓存该数据报文,然后以广播方式发送一个ARP 请求报文。ARP 请求报文中的发送端IP 地址和发送端MAC 地址为主机A 的IP地址和MAC 地址,目标IP 地址和目标MAC 地址为主机B 的IP 地址和全0 的MAC 地址。由于ARP 请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。
-
主机B 比较自己的IP 地址和ARP 请求报文中的目标IP 地址,当两者相同时进行如下处理:将ARP 请求报文中的发送端(即主机A)的IP 地址和MAC 地址存入自己的ARP 表中。之后以单播方式发送ARP 响应报文给主机A,其中包含了自己的MAC 地址。
-
主机A 收到ARP 响应报文后,将主机B 的MAC 地址加入到自己的ARP 表中以用于后续报文的转发,同时将IP 数据包进行封装后发送出去。
当主机 A 和主机B 不在同一网段时,主机A 就会先向网关发出ARP 请求,ARP 请求报文中的目标IP 地址为网关的IP 地址。当主机A 从收到的响应报文中获得网关的MAC 地址后,将报文封装并发给网关。如果网关没有主机B 的ARP 表项,网关会广播ARP 请求,目标IP 地址为主机B 的IP 地址,当网关从收到的响应报文中获得主机B 的MAC 地址后,就可以将报文发给主机B;如果网关已经有主机B 的ARP 表项,网关直接把报文发给主机B。
1.4 ARP缓存(ARP表)
设备通过 ARP 解析到目的MAC 地址后,将会在自己的ARP 表中增加IP 地址到MAC 地址的映射表项,以用于后续到同一目的地报文的转发。
1.4.1 动态ARP表
由ARP 协议通过ARP 报文自动生成和维护,可以被老化,可以被新的ARP 报文更新,可以被静态ARP 表项覆盖。当到达老化时间、接口down 时会删除相应的动态ARP 表项。
RFC定义默认老化时间为20分钟。
1.4.2 静态ARP表
通过手工配置和维护,不会被老化,不会被动态ARP 表项覆盖。
静态 ARP 表项分为短静态ARP 表项和长静态ARP 表项:
- 配置长静态 ARP 表项时,除了配置IP 地址和MAC 地址项外,还必须配置该ARP 表项所在VLAN 和出接口。长静态ARP 表项可以直接用于报文转发。
-
配置短静态 ARP 表项时,只需要配置IP 地址和MAC 地址项。如果出接口是三层以太网接口,短静态ARP 表项可以直接用于报文转发;如果出接口是VLAN 虚接口,短静态ARP 表项不能直接用于报文转发,当要发送IP 数据包时,先发送ARP 请求报文,如果收到的响应报文中的源IP 地址和源MAC 地址与所配置的IP 地址和MAC 地址相同,则将接收ARP 响应报文的接口加入该静态ARP 表项中,之后就可以用于IP 数据包的转发。
2. 免费ARP
一种特殊的ARP 报文,该报文中携带的发送端IP 地址和目标IP 地址都是本机IP地址,报文源MAC 地址是本机MAC 地址,报文的目的MAC 地址是广播地址。
设备通过对外发送免费 ARP 报文来实现以下功能:
- 确定其它设备的 IP 地址是否与本机的IP地址冲突。当其它设备收到免费ARP 报文后,如果发现报文中的IP 地址和自己的IP 地址相同,则给发送免费ARP 报文的设备返回一个ARP 应答,告知该设备IP 地址冲突。
- 设备改变了硬件地址,通过发送免费 ARP 报文通知其它设备更新ARP 表项。
3. ARP procxy, ARP代理
如果ARP 请求是从一个网络的主机发往同一网段却不在同一物理网络上的另一台主机,那么连接它们的具有代理ARP 功能的设备就可以回答该请求,这个过程称作代理ARP(Proxy ARP)。
- 普通代理 ARP :想要互通的主机分别连接到设备的不同三层接口上,且这些主机不在同一个广播域中。通过三层转发实现互通。
- 本地代理 ARP :想要互通的主机连接到设备的同一个三层接口上,且这些主机不在同一个广播域中。通过在Router上启用本地代理ARP功能,可以实现Host A和Host B的三层互通。
3.1 普通代理ARP
设备Router通过两个三层接口Ethernet1/1 和Ethernet1/2 连接两个网络,两个三层接口的IP地址不在同一个网段,接口地址分别为192.168.10.99/24、192.168.20.99/24。但是两个网络内的主机Host A和Host B的地址通过掩码的控制,既与相连设备的接口地址在同一网段,同时二者也处于同一个网段。
当 Host A 需要与Host B 通信时,由于目的IP 地址与本机的IP 地址为同一网段,因此Host A 会直接发出请求Host B 硬件地址的ARP 请求。但是,此时的两台主机处于不同的广播域中,Host B 无法收到Host A 的ARP 请求报文,当然也就无法应答。
在 Router 上启用代理ARP 功能后,Router 可以应答Host A 的ARP 请求。同时,Router 相当于Host B 的代理,把从其他主机发送过来的报文转发给它。代理 ARP 的优点是,它可以只被应用在一个设备上(此时该设备的作用相当于网关),不会影响到网络中其他设备的路由表。代理ARP 功能可以在IP 主机没有配置缺省网关或者IP 主机没有任何路由能力的情况下使用。
3.2 本地代理ARP
Host A和Host B属于同一个VLAN 2,但分别连接到被二层隔离的端口Ethernet1/3 和Ethernet1/1 上。
本地代理 ARP 可以在下列三种情况下实现主机之间的三层互通:
- 想要互通的主机分别连接到同一个 VLAN 中的不同二层隔离端口下;
- 使能 Super VLAN 功能后,想要互通的主机属于不同的Sub VLAN;
- 使能 Isolate-user-vlan 功能后,想要互通的主机属于不同的Secondary VLAN。
4. ARP snooping
4.1. 作用
用于二层交换网络环境的特性,通过侦听ARP 报文建立ARP Snooping表项,从而提供给ARP 快速应答和MFF 手动方式等使用。
4.2. 工作机制
设备上的一个 VLAN 使能ARP Snooping 后,该VLAN 内所有端口接收的ARP 报文会被重定向到CPU。CPU 对重定向上送的ARP 报文进行分析,获取ARP 报文的源IP 地址、源MAC 地址、源VLAN 和入端口信息,建立记录用户信息的ARP Snooping 表项。
ARP Snooping 表项的老化时间为25 分钟,有效时间为15 分钟。如果一个ARP Snooping 表项自最后一次更新后15 分钟内没有收到ARP 更新报文,则此表项开始进入失效状态,不再对外提供服务,其他特性查找此表项将会失败。当收到源IP 地址和源MAC 与已存在的ARP Snooping 表项IP地址和MAC 均相同的ARP 报文时,此ARP Snooping 表项进行更新,重新开始生效,并重新老化计时。当ARP Snooping 表项达到老化时间后,则将此ARP Snooping 表项删除。
如果 ARP Snooping 收到ARP 报文时检查到相同IP 的ARP Snooping 表项已经存在,但是MAC地址发生了变化,则认为发生了攻击,此时ARP Snooping 表项处于冲突状态,表项失效,不再对外提供服务,并在25 分钟后删除此表项。
5. ARP快速应答
5.1. 作用
在无线产品组网中,AC 与AP 会建立隧道连接,Client 通过AP 连接到AC,通过AC,Client 可以与网关建立连接。当Client 发起ARP 广播请求时,需要通过AC 向所有的AP 复制ARP 请求,这样会导致ARP 广播占用隧道的大量资源,导致性能下降。为了减少ARP 广播占用的隧道资源,可以在AC 上启用ARP 快速应答功能,减少ARP 广播报文的影响。
ARP 快速应答功能就是根据AC 设备收集的用户信息(用户信息可以是DHCP Snooping 表项,也可以是ARP Snooping 表项),在指定的VLAN 内,尽可能的对ARP 请求进行应答,从而减少ARP广播报文。
5.2. 工作机制
- 设备接收到ARP 请求报文时,如果请求报文的目的IP 地址是设备的VLAN 虚接口的IP 地址,则由ARP 特性进行处理;
-
如果ARP 请求报文的目的IP 地址不是VLAN 虚接口的IP 地址,则根据报文中的目的IP 地址查找DHCP Snooping 表项:
-
如果查找成功,但是查找到的表项的接口和收到请求报文的接口一致,并且接口是以太网接口,则不进行应答,否则立即进行应答。
-
如果查找失败,则继续查找 ARP Snooping 表项,如果查找成功,但是查找到的表项的接口和收到请求报文的接口一致,并且接口是以太网接口,则不进行应答,否则立即进行应答。
- 如果两个表均查找失败,则直接转发请求报文或将报文交于其他特性处理。
-
6. ARP攻击与ARP防御
6.1. ARP攻击
- 攻击者可以仿冒用户、仿冒网关发送伪造的 ARP 报文,使网关或主机的ARP 表项不正确,从而对网络进行攻击。
- 攻击者通过向设备发送大量目标 IP 地址不能解析的IP 报文,使得设备试图反复地对目标IP地址进行解析,导致CPU 负荷过重及网络流量过大。
- 攻击者向设备发送大量 ARP 报文,对设备的CPU 形成冲击。
6.2. ARP防御
6.2.1 ARP源抑制
发送攻击报文的源是固定时可使用。开启该功能后,如果网络中某主机向设备某端口连续发送目标IP 地址不能解析的IP 报文,当每5 秒内由此主机发出IP 报文触发的ARP 请求报文的流量超过设置的阈值,那么对于由此主机发出的IP 报文,设备不允许其触发ARP 请求,直至5 秒后再处理,从而避免了恶意攻击所造成的危害。
6.2.2 ARP黑洞路由
发送攻击报文的源不固定时可使用。开启该功能后,一旦接收到目标IP 地址不能解析的IP 报文,设备立即产生一个黑洞路由,使得设备在一段时间内将去往该地址的报文直接丢弃。等待黑洞路由老化时间过后,如有报文触发则再次发起解析,如果解析成功则进行转发,否则仍然产生一个黑洞路由将去往该地址的报文丢弃。这种方式能够有效地防止IP 报文的攻击,减轻CPU 的负担。
6.2.3 ARP限速
对上送CPU 的ARP 报文进行限速,可以防止大量ARP 报文对CPU 进行冲击。
6.2.4 源 MAC 地址固定的ARP 攻击检测功能
根据 ARP 报文的源MAC 地址进行统计,在5 秒内,如果收到同一源MAC 地址的ARP 报文超过一定的阈值,则认为存在攻击,系统会将此MAC 地址添加到攻击检测表项中。
对于网关或一些重要的服务器,可能会发送大量ARP 报文,为了使这些ARP 报文不被过滤掉,可以将这类设备的MAC 地址配置成保护MAC,这样,即使该MAC 存在攻击也不会被检测过滤。
只对上送 CPU 的ARP 报文进行统计。
6.2.5 ARP 报文源MAC 一致性检查功能
主要应用于网关设备上,防御以太网数据帧首部中的源MAC 地址和ARP 报文中的源MAC 地址不同的ARP 攻击。
配置本特性后,网关设备在进行ARP 学习前将对ARP 报文进行检查。如果以太网数据帧首部中的源MAC 地址和ARP 报文中的源MAC 地址不同,则认为是攻击报文,将其丢弃;否则,继续进行ARP 学习。
6.2.6 ARP主动确认
主要应用于网关设备上,防止攻击者仿冒用户欺骗网关设备。启用 ARP 主动确认功能后,设备在新建或更新ARP 表项前需进行主动确认,防止产生错误的ARP表项。
6.2.7 ARP授权
授权 ARP(Authorized ARP),就是根据DHCP 服务器生成的租约或者DHCP 中继生成的安全表项同步生成ARP 表项。使能接口的授权 ARP 功能后:
- 系统会启动接口下授权 ARP 表项的老化探测功能,可以检测用户的非正常下线;
- 系统会禁止该接口学习动态 ARP 表项,可以防止用户仿冒其他用户的IP 地址或MAC 地址对网络进行攻击,保证只有合法的用户才能使用网络资源,增加了网络的安全性。
6.2.8 ARP Detection
主要应用于接入设备上,对于合法用户的ARP 报文进行正常转发,否则直接丢弃,从而防止仿冒用户、仿冒网关的攻击。
(1)ARP 报文有效性检查:
对于 ARP 信任端口,不进行报文有效性检查;对于ARP 非信任端口,需要根据配置对MAC 地址和IP 地址不合法的报文进行过滤。可以选择配置源MAC 地址、目的MAC 地址或IP 地址检查模式。
- 对于源 MAC地址的检查模式,会检查ARP 报文中的源MAC地址和以太网报文头中的源MAC地址是否一致,一致认为有效,否则丢弃;
- 对于目的 MAC 地址的检查模式(只针对ARP 应答报文),会检查ARP 应答报文中的目的MAC 地址是否为全0 或者全1,是否和以太网报文头中的目的MAC 地址一致。全0、全1、不一致的报文都是无效的,无效的报文需要被丢弃;
- 对于 IP 地址检查模式,会检查ARP 报文中的源IP 和目的IP 地址,全0、全1、或者组播IP地址都是不合法的,需要丢弃。对于ARP 应答报文,源IP 和目的IP 地址都进行检查;对于ARP 请求报文,只检查源IP 地址。
(2)用户合法性检查
对于 ARP 信任端口,不进行用户合法性检查;对于ARP 非信任端口,需要进行用户合法性检查,以防止仿冒用户的攻击。
用户合法性检查是根据 ARP 报文中源IP 地址和源MAC 地址检查用户是否是所属VLAN 所在端口上的合法用户,包括基于IP Source Guard 静态绑定表项的检查、基于DHCP Snooping 安全表项的检查、基于802.1X 安全表项的检查和OUI MAC 地址的检查。
- 首先进行基于 IP Source Guard 静态绑定表项检查。如果找到了对应源IP 地址和源MAC 地址的静态绑定表项,认为该ARP 报文合法,进行转发。如果找到了对应源IP 地址的静态绑定表项但源MAC 地址不符,认为该ARP 报文非法,进行丢弃。如果没有找到对应源IP 地址的静态绑定表项,继续进行DHCP Snooping 安全表项、802.1X 安全表项和OUI MAC 地址检查。
- 在基于 IP Source Guard 静态绑定表项检查之后进行基于DHCP Snooping 安全表项、802.1X安全表项和OUI MAC 地址检查,只要符合三者中任何一个,就认为该ARP 报文合法,进行转发。其中,OUI MAC 地址检查指的是,只要ARP 报文的源MAC 地址为OUI MAC 地址,并且使能了Voice VLAN 功能,就认为是合法报文,检查通过。 如果所有检查都没有找到匹配的表项,则认为是非法报文,直接丢弃。
(3)ARP 报文强制转发
ARP 报文强制转发功能是将ARP 非信任端口接收到的已经通过用户合法性检查的ARP 报文,按照一定的规则进行转发的防攻击功能,此功能不对ARP 信任端口接收到的通过用户合法性检查的ARP 报文进行限制。
对于从 ARP 非信任端口收到的已经通过用户合法性检查的合法ARP 报文的处理过程如下:
- 对于 ARP 请求报文,通过信任端口进行转发;
- 对于 ARP 应答报文,首先按照报文中的以太网目的MAC 地址进行转发,若在MAC 地址表中没有查到目的MAC 地址对应的表项,则将此ARP 应答报文通过信任端口进行转发。
6.2.9 ARP 自动扫描、固化功能
一般在环境稳定的小型网络中使用。
- ARP 自动扫描:设备会对局域网内的邻居自动进行扫描(向邻居发送ARP 请求报文,获取邻居的MAC 地址,从而建立动态ARP 表项)。
- ARP 固化功能:将当前的ARP 动态表项(包括ARP 自动扫描生成的动态ARP 表项)转换为静态ARP 表项。通过对动态ARP 表项的固化,可以有效的防止攻击者修改ARP 表项。
6.2.10 ARP 网关保护功能
在设备上不与网关相连的端口上配置此功能,可以防止伪造网关攻击。
当端口收到 ARP 报文时,将检查ARP 报文的源IP 地址是否和配置的被保护网关的IP 地址相同。如果相同,则认为此报文非法,将其丢弃;否则,认为此报文合法,继续进行后续处理。
6.2.11 ARP过滤保护功能
限制端口下允许通过的 ARP 报文,可以防止仿冒网关和仿冒用户的攻击。当端口收到ARP 报文时,将检查ARP 报文的源IP 地址和源MAC 地址是否和允许通过的IP 地址和MAC 地址相同:
- 如果相同,则认为此报文合法,继续进行后续处理;
- 如果不相同,则认为此报文非法,将其丢弃。