地址解析协议(ARP)
在同一局域网内,主机需要访问其他网络设备,但是只知道目标IP地址但是并不知道对方的MAC地址,这样是无法进行通信的。IP数据必须封装成帧才能通过物理层,所以要有IP地址到物理地址存在映射,换句话讲就是必须有目的MAC才可以进行数据传输。
ARP协议基本信息
ARP作用:将IP地址解析为以太网MAC地址。
ARP报文结构:
- 目标IP——(手动:ping、自动:DNS)
- 源IP——(手动:静态配置、自动:DHCP)
- 源MAC——(手动:手动分配、自动:厂商分配)
- 目的MAC——(手动:静态绑定ARP、自动:ARP)
- DATA
- FCS
特点
- ARP包可能是网络中的第一个包
- 其他协议的辅助协议
ARP解析过程
同网段通信
- 将源IP和目标IP与掩码相与,判断是否在同一个网段
- 主机先查看自己的ARP表,如果有对应的ARP条目,则会利用表中MAC地址,直接对IP数据包进行封装,并将数据包转发给目标主机
- 若没有查找的相应的ARP表项,那么就会进行以下步骤
1、主机A发送ARP Request广播报文,源MAC为自身的MAC,目的MAC为全F的广播MAC。Target IP为目的IP,Target MAC为全0的MAC。
2、主机B收到ARP Request 报文,发现Target IP是自己接口的IP,会发送一个ARP Reply 报文,并通过ARP Request报文中的sender IP和sender MAC来更新自己的ARP表项。
3、主机A收到ARP Reply 报文发现Target IP是自己的接口IP并且自身ARP缓存表中存在相应的ARP请求信息,并通过ARP Reply报文中的sender IP和sender MAC来更新自己的ARP表,同时将数据包进行二层封装后发送出去。
跨网段通信
- PC1先将目标IP与自身掩码相与,发现该网段与自身网段不同,且自身ARP缓存表中无网关缓存条目,此时就会发送一个ARP Request广播报文,请求网关的MAC地址,并且在本地ARP缓存中生成一条MAC全为0的临时条目。
- 路由器收到ARP Request的广播报文,发现Target IP是自己的接口IP,回应一个ARP Reply的单播报文,通过Request报文中sender IP和sender MAC来更新自己的ARP表,然后开始发送icmp的请求报文。
- PC1收到ARP Reply报文,发现Target IP是自己的接口IP,并且自己的ARP缓存表中有相应的ARP请求信息,通过ARP Reply报文中的信息来对自己的ARP缓存表进行更新,建立连接之后会开始发ICMP报文。
- 路由器收到了ICMP请求报文之后解封装该报文,根据目的IP查找本地路由表,结果发现是直连路由,但是本地ARP缓存中并没有PC2的MAC地址,此时有需要发送ARP Request 请求,在本地生成一条全0的TargetMAC的临时条目。
- pc2收到arp request报文后,发现target ip是自己 接口的ip,发送一个arp reply单播报文,并且根据arp request中的sender ip和sender mac来更新自己的arp表
- 路由器收到arp reply报文,发现target ip是自己的 ip,通过arp request报文中的sender ip和sender mac 来更新自己的arp表,开始发送去往pc2的icmp请求报文
- pc2收到报文后,解封装该报文,发现目的ip是自 己,接受该报文,发送icmp的回应报文,源ip与自己的 掩码相与,发现与自己是不同网段,所以要把该报文发给 网关,通过自己的arp表中的条目来封装二层头部,并发 送该报文
- 路由器收到icmp回应报文,解封装该报文,发现目 的ip不是自己,查路由表发现是直连网段,并且arp表中 有pc1的条目,根据arp表来封装icmp报文并从直连接口 发送出去
- pc1收到icmp的回应报文,解封装该报文,发现目的 ip是自己,并接收该报文
一次路由,多次交换,源目ip不变,源目MAC逐跳变, ARP帮助路由打通下一跳
ARP缓存
静态ARP表项
静态ARP表项通过手工配置和维护不会老化,不会被动态ARP表项覆盖
短静态ARP表项
在配置静态ARP表项时,除了配置IP地址和MAC地址外,还必须配置ARP表项所在VLAN和出接口。
长静态ARP表项
在配置短静态ARP表项时,只需要配置IP地址和MAC地址项。如果出接口是三层以太网接口,短静态ARP表可以直接用于报文转发,如果出接口是VALN虚接口,短静态ARP表项不能直接用于报文转发,当要发送IP数据包时,先发送ARP请求报文 ,如果收到响应报文中的IP源地址和源MAC地址与配置的IP地址和MAC地址相同,则将接受ARP响应报文的接口加入静态ARP表项中,之后用于IP数据包的转发。
动态ARP表项
动态ARP表项由ARP协议通过ARP报文自动生成和维护,可以被老化,可以被新的
ARP报文更新,可以被静态ARP表项覆盖。当到达老化时间、接口down时会删除相应的动态ARP表项。(缺省老化时间120s)
代理ARP(Proxy ARP)
普通代理ARP
启用代理ARP之后,Router可以应答Host A的ARR请求。同时Router相当于Host B的代理,把从其他主机发送过来的报文转发给他
代理ARP可以只被应用在一个设备上(作用相当于网关)不会影响到网络中其他设备的路由表。代理ARP功能可以在IP主机没有配置缺省网关或者IP主机没有任何路由能力的情况下使用
静态路由的下一跳和出接口的区别
出接口
不开代理ARP:无法进行通信
开代理ARP:(出口路由器)会产生大量的ARP条目对设备CPU和表项压力过大。
下一跳IP:无论多少个人上网,ARP请求只有一个。
免费ARP
如何判断是否为免费ARP:
当ARP报文中Target IP和Sender IP一样时即为免费ARP。
若存在ARP表项:设备会根据免费ARP报文中携带的信息来更新对应的ARP表项。
若不存在ARP表项:设备会根据该免费ARP中携带的信息来新建ARP表项。
定时发送免费ARP功能的作用:
- 防止仿冒网关ARP攻击
- 防止主机ARP表项的老化
- 防止VRRP虚拟IP地址的冲突
- 及时更新模糊终结VLAN内设备的MAC地址表
设备通过对外发送免费ARP报文来确定其他设备的IP地址是否与本机IP地址冲突,当其他的设备收到免费ARP报文之后,如果发现报文中的IP地址和自己的IP地址相同,则会给发送免费ARP的设备发送一个arp应答,告知该设备IP地址冲突。若设备改变了硬件地址,通过发送免费arp报文来通知其他设备更新arp表项。
正常情况下的ARP表
ARP表变化
arp request报文更新ARP表的条件: arp报文中target IP为自己,且用arp报文中的sender IP和sender MAC地址来更新自己的ARP表。
arp reply报文更新ARP表的条件:arp报文中target IP是自己,且arp表中存在sender ip的表项,用arp报文中的sender IP和sender MAC来更新自己的ARP表。
免费ARP报文更新ARP表的条件:免费arp是一种特殊的arp request/reply报文即senderIP和target IP一致。当arp表中已经存在target IP/MAC表项,用ARP中的sender IP和sender MAC来更新自己的ARP表。
ARP报文
ARP广播
ARP Request
ARP Reply
ARP防范技术
接入设备攻击防范:
针对仿冒网关攻击
对arp报文的合法性进行检查,如果合法则进行后续处理,如果非法直接丢弃报文。
- ARP过滤保护功能
- ARP网关保护功能
- ARP Detection功能:在vlan下开启arp Detecting,该vlan收到的所有arp报文应答将被重新定向到cpu进行报文合法性和 有效性检查,合法转发,反之则丢弃。
针对仿冒用户攻击
对arp报文的合法性进行检查,如果合法则进行后续处理,如果非法直接丢弃报文。
针对ARP泛洪攻击:ARP报文限速功能
网关设备攻击防范
针对仿冒网关攻击
通过合法方式建立正确的ARP表项,并阻止攻击者修改
- 授权ARP功能
- ARP自动扫描和固化功能
- 配置静态ARP表项
动态学习ARP表前进行确认,保证学习到的是真实的正确的映射关系。
- ARP主动确认功能:开启主动确认功能后,设备在新建或更新前需要去进行主动确认,防止产生错误ARP表项
- ARP报文源MAC一致性检查功能
针对ARP泛洪攻击
- 源MAC地址固定的ARP攻击检测功能
- 限制接口学习动态ARP表项的最大条目
- ARP防IP报文攻击功能