免费ARP数据包对于网络管理者来说并不陌生,检测IP冲突这是大家熟知的一个功能,但随着Windows系统的不断升级,其报文的格式在发生变化,而且ARP的应用也不仅是IP冲突检测这么简单。
图1 源IP和目的IP都是发送主机的IP
图2 源IP为0.0.0.0,目的IP都是发送主机的IP
免费ARP包是标准ARP请求包的特例,目的MAC地址仍是二层广播地址FF-FFFF-FF-FF-FF,源 MAC地址是发送ARP请求主机的MAC地址,然而源IP和目的IP都是发送主机的IP,但这是在Windows XP及之前的数据包格式(如图1)。
从Windows XP版本以后的系统开始,又多了一种源IP是0.0.0.0目的IP都是发送主机的格式(如图2)。而标准ARP请求包的目的IP是所请求的IP,而这就是免费ARP包和标准ARP请求包的区别。
1.Windows XP:源 IP和目的IP都是发送主机的免费ARP数据包。
2.VISTA:源IP为0.0.0.0,目的IP都是发送主机的免费ARP数据包。
3.Windows 7及以上:发送以上两种免费格式的ARP数据包。
Windows 7首先会广播发送源IP为0.0.0.0的免费ARP数据包,如果没有收到应答包,就表示本地网络内没有IP地址冲突,然后会用正式的IP作为源IP再发送一次免费ARP数据包。
这比这前Windows XP之前要“谨慎”多了,因为在确定IP冲突之前,还不能正式启用这个IP,所以就用0.0.0.0代替。如果收到应答包,就会弹出地址冲突的对话框,就不会有后面正式IP发出的免费ARP数据包了。
4.三层交换机、路由器都可管理网络设备(交换端口)都会发出免费ARP。
注意,普通路由器(无线)WAN端口没有任何免费ARP数据包发出了,面对冲突,只能傻傻等待。
比如TP-LINK普通家用无线路由器的WAN端口配置的IP就不会发送免费ARP了。
这个设计肯定让很多用户不理解,其实路由器的WAN口设计主要是应用在外网连接上的,广域网的数据链路层协议,如HDLC、PPP、ATM等,数据帧封装格式不一样了,而ARP协议只是针对局域网的,MAC地址是在链路层上使用的地址,也就是以太网数据帧上。当然,如果把路由器的WAN端口应用在局域网,肯定不会发送免费的ARP数据包了。
系统和设备都会对两种免费ARP的数据包作出对应的应答包。
注意,如何系统安装了某种网络隐身功能的软件,为了防止网络设备探测到自己,是不会对目的IP是自己的ARP请求数据包作出回应,如果是网关发来的数据包就例外了。
比如,360安全卫士的流量防火墙里就存在一个局域网隐身的功能,它就是采用这种“不予理睬”的原理来实现的。
当一台主机发送了免费ARP请求报文后,如果收到了ARP响应报文,则说明网络内已经存在使用该IP 的主机,就会重新向DHCP申请IP(或者提示用户IP冲突),如果没有收到ARP响应报文,就会正式启用这个IP,向整个网络宣告自己的到来。
图3 主动发送免费ARP报文
一般的设备在网卡地址加载阶段都会向网络中发送免费的ARP报文,也有些安全设备为了安全起见,让设备在加载地址期间不向外发送免费ARP报文,当我们想知道某些设备的接口地址但又没有相应记录可查时,我们就可以利用设备的这种特性,抓取其免费ARP报文,从而分析出其接口使用的IP地址。
在实际环境中,当网络负载较大或接收端主机的CPU占用率较高时,可能存在ARP报文被丢弃或主机无法及时处理接收到的ARP报文等现象。这种情况下,接收端主机的动态ARP表项会因超时而被老化,在其重新学习到发送设备的ARP表项之前,二者之间的流量就会发生中断。
为了解决上述问题,可以在网关的接口上使能定时发送免费ARP功能。使能该功能后,网关接口上将按照配置的时间间隔周期性发送接口主IP地址和手工配置的从IP地址的免费ARP报文。这样,接收端主机可以及时更新ARP映射表,从而防止了上述流量中断现象。
当网络中存在VRRP备份组的时候,需要由VRRP备份组的Master路由器周期性的向网络内的主机发送免费ARP报文,使主机更新本地ARP地址表,从而确保网络中不会存在IP地址与VRRP虚拟IP地址相同的设备。
有些网关设备为了防止内部中毒机器对内部其他机器实施网关的ARP欺骗攻击,其会在一定的时间间隔内向网络中主动发送免费ARP报文,让网络内的主机更新ARP表项中的网关MAC地址信息,从而达到防止或缓解ARP攻击的效果,如图3所示。
注意,本来这个功能设计的初衷是好的,但如果不能正确配置,相反会引发网络不通的故障,而且悄无声息。
比如有个客户反应网络访问异常缓慢,通过抓取数据包分析,发现网络内存在大量免费ARP(IP地 址为192.168.1.1)报文,如图4所示。
从以上数据包分析,如果是客户端电脑设备,应该会提示IP地址冲突,但实际环境中没有发现IP地址冲突的设备,而且根据IP地址192.168.1.1可以判断出这应该是网关路由设备的IP。与网络管理员进一步沟通后,发现正常的网关应该是192.168.1.1,其对应的MAC是74:A3:B7:C0:88:C1。
经过逐步排查,在一间办公室发现了一台无线路由器,是用户为了方便无线上网,私自接入了当无线AP使用了,但它默认的IP刚好是192.168.1.1。最要命的是两台路由器都开启发送免费ARP防止被欺骗的功能。
图4 抓取数据包
图5 交互过程示意
路由器发送免费ARP报文的目的就是防止内部存在伪造默认网关地址192.168.1.1的免费ARP报文实施ARP欺骗的主机,如图3所示,其间隔50毫秒发送了多个免费ARP报文可以保证路由下所有的主机ARP表中网关地址(192.168.1.1)的MAC对应关系维持正确。因为大部分的ARP欺骗的发包频率并不需要非常快。
但是当路由器检测到网络中有其他MAC的免费ARP(192.168.1.1)报文后,其认为是内部主机在实施ARP欺骗行为,因此逐步提高了其发免费ARP报文的频率,而这个动作会在两个路由设备上同步进行,由此导致的后果就是,双方不断的增加其发送免费ARP报文的频率,导致网络中存在大量免费ARP数据包,影响了网络的正常通信。其交互过程示意图大致如图5所示。
最后重新配置了办公室的无线路由器,停用了免费ARP数据包自动发送功能,网络通信恢复正常。
在整个网络协议中,ARP协议虽然没有像TCP/IP那样担任重要的角色,但它对整个网络的平衡运行提供了最基础的保障。
免费的ARP数据包只是ARP协议中一个不起眼的请求数据包,但是在Windows版本的变迁中,对免费ARP数据包的格式做出了不断的改进,足可以看出它对细节的处理是非常精准的。对于一个网络工作者来讲,更有必要去探究网络末稍的细节,让网络更加稳定、高效的运行。