ARP 协议
OSI模式把网络工作分为七层,彼此不直接打交道,只通过接口. IP地址在第三层, MAC地址在第二层。协议在发送数据包时,首先要封装第三层(IP地址)和第二层 (MAC地址)的报头, 但协议只知道目的节点的IP地址,不知道其物理地址,又不能跨第二、三层,所以得用ARP的服务拿到MAC地址。
ARP工作过程
假设主机A和B在同一个网段,A向B发送信息,解析过程如下:
- A先查看自己的ARP缓存表,确定是否包含有B对应的ARP表项。如果找到对应的MAC地址,则A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给B。
- 如果找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送ARP请求报文。报文中的发送端IP地址和MAC地址为A的IP地址和MAC地址,目标IP地址和MAC地址为B的IP地址和全0的MAC地址。ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机会对该请求进行处理。
- B比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行处理:将ARP请求报文中的发送端(A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给A,包含自己的MAC地址。
- A收到ARP响应报文后,将B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。
当A和B不在同一网段时,A先向网关发出ARP请求,报文中的目标IP为网关的IP。当A从响应报文中获得网关的MAC地址后,将报文封装并发给网关。如果网关没有B的ARP表项,网关会广播ARP请求,目标IP为主机B的IP,当网关从响应报文中获得B的MAC地址后,就可以将报文发给B;如果已经有B的ARP表项,直接把报文发给B。
ARP表
网络设备一般都有一个ARP缓存,存放IP地址和MAC地址的关联信息。发送数据前设备先查找缓存表。如果存在对方设备的MAC地址,则直接采用该MAC地址来封装帧。如果不存在则通过 ARP request报文来获得。学习到的IP地址和MAC地址的映射关系被放入缓存表中存放一段时间。在有效期内,设备直接从表中查找。过了有效期,ARP表现会被自动删除。如果目标设备位于其他网络则源设备会在表中查找网关的MAC地址,将数据发送给网关,网关再把数据转发给目的设备。
ARP表项又分为动态ARP表项和静态ARP表项。
动态ARP表项
动态ARP表项由ARP协议通过ARP报文自动生成和维护,可以被老化,可以被新的ARP报文更新,可以被静态ARP表项覆盖。动态ARP缓存项的潜在生命周期是10分钟。新加到缓存中的项带有时间戳,如果某个项添加后2分钟内没有再使用,则过期并从ARP缓存中删除;如果某个项已在使用,则又收到2分钟的生命周期;如果某个项目始终在使用,则一直到10分钟的最长生命周期。
静态ARP表项
静态ARP表项通过手工配置和维护,不会被老化,不会被动态ARP表项覆盖。直到重新启动计算机为止。
配置静态ARP表项可以增加通信的安全性。可以限制和指定IP地址的设备通信时只使用指定的MAC地址,攻击报文无法修改此表项的IP地址和MAC地址的映射关系,从而保护了设备间的正常通信。
静态ARP表项分为短静态ARP表项和长静态ARP表项。
- 在配置长静态ARP表项时,除了配置IP地址和MAC地址项外,还必须配置该ARP表项所在VLAN和出接口。长静态ARP表项可以直接用于报文转发。
- 在配置短静态ARP表项时,只需要配置IP地址和MAC地址项。如果出接口是三层以太网接口,短静态ARP表项可以直接用于报文转发;如果是VLAN虚接口则不能直接用于报文转发,发送IP数据包时,先发送ARP请求,如果响应报文中的源IP地址和MAC地址与所配置的相同,则将接收ARP响应报文的接口加入该静态ARP表项中,之后就可以用于IP数据包的转发。
一般情况下,ARP动态执行并自动寻求IP地址到以太网MAC地址的解析,无需管理员的介入。
当希望设备和指定用户只能使用某个固定的IP地址和MAC地址通信时,可以配置短静态ARP表项,当进一步希望限定这个用户只在某VLAN内的某个特定接口上连接时就可以配置长静态ARP表项。
ARP报文格式
ARP协议是通过报文进行工作的,是一个独立的三层协议,所以ARP报文在向数据链路层传输时不需要经过IP协议的封装,而是直接生成自己的报文,其中包括ARP报头,到数据链路层后再由对应的数据链路层协议封装。报文分为ARP请求和应答报文两种,它们的报文格式可以统一为下图所示。
前面Ethernet Address of destination, Ethernet Address of sender 和 Frame Type属于数据链路层的封装,往后的就是真正的ARP报文数据结构。
ARP代理
当局域网内部主机发起跨网段的ARP请求时,出口路由器/网关设备将自身MAC地址回复该请求时,这个过程称为代理ARP。(eg:1.没有路由功能的主机;2.有路由功能,目的地指向本地出口)
地址解析协议工作在一个网段中,而代理ARP工作在不同的网段间,其一般被像路由器这样的设备使用,用来代替处于另一个网段的主机回答本网段主机的ARP请求。
例如,PC1(192.168.20.66/24)需要向PC2(192.168.20.20/24)发送报文,因为PC1不知道子网的存在且和PC2在同一主网络网段,所以PC1将发送ARP协议请求广播报文请求192.168.20.20的MAC地址。这时路由器将识别出报文的目标地址属于另一个子网(路由器的接口IP地址配置的是28位的掩码),因此向PC1回复自己的硬件地址(0004.dd9e.cca0)。之后PC1将发往PC2的数据包都发往MAC地址0004.dd9e.cca0,由路由器将数据包转发到PC2。(接下来路由器将为PC2做同样的代理发送数据包的工作)。
ARP欺骗
ARP协议是建立在各主机互相信任的基础上的,它的诞生使得网络能够更加高效的运行,但其本身也存在缺陷:
ARP表依赖高速缓冲存储器动态更新的,而存储器的更新受到更新周期的限制,只保存最近使用的表项,这使得攻击者可以在存储器更新表项前修改地址转换表,实现攻击。ARP请求为广播形式发送的,网络上的主机可以自主发送ARP应答消息,当其他主机收到应答报文时不会检测报文的真实性就将其记录在本地的转换表,这样攻击者就可以向目标主机发送伪ARP应答报文,从而篡改本地的MAC地址表。ARP欺骗可以导致目标计算机与网关通信失败,更会导致通信重定向,所有的数据都会通过攻击者的机器。
「防御措施」
- 不要把网络安全信任关系建立在IP基础上或MAC基础上(RARP同样存在欺骗的问题),理想的关系应该建立在IP+MAC基础上。
- 设置静态的MAC-->IP对应表,不要让主机刷新设定好的转换表。
- 除非很有必要,否则停止使用ARP,将ARP做为永久条目保存在对应表中。
- 使用ARP服务器。通过该服务器查找自己的ARP转换表来响应其他机器的ARP广播。确保这台ARP服务器不被黑。
- 使用“proxy”代理IP的传输。
- 使用硬件屏蔽主机。设置好路由,确保IP地址能到达合法的路径(静态配置路由ARP条目),注意,使用交换集线器和网桥无法阻止ARP欺骗。
- 管理员定期用响应的IP包中获得一个RARP请求,然后检查ARP响应的真实性。
- 管理员定期轮询,检查主机上的ARP缓存。
- 使用防火墙连续监控网络。注意有使用SNMP的情况下,ARP的欺骗有可能导致陷阱包丢失。
- 若感染ARP病毒,可以通过清空ARP缓存、指定ARP对应关系、添加路由信息、使用防病毒软件等方式解决。
ARP攻击
基于ARP协议的工作特性,黑客向对方计算机不断发送有欺诈性质的ARP数据包,数据包内包含有与当前设备重复的Mac地址,使对方在回应报文时,由于简单的地址重复错误而导致不能进行正常的网络通信,或者如果不及时处理,便会造成网络通道阻塞、网络设备的承载过重、网络的通讯质量不佳等情况。。
一般情况下,受到ARP攻击的计算机会出现两种现象:
- 不断弹出“本机的XXX段硬件地址与网络中的XXX段地址冲突”的对话框。
- 计算机不能正常上网,出现网络中断的症状。
因为这种攻击是利用ARP请求报文进行“欺骗”的,所以防火墙会误以为是正常的请求数据包,不予拦截。因此普通的防火墙很难抵挡这种攻击。
RARP协议
假如一个设备不知道自己的IP,但知道物理地址,网络上的无盘工作站就是这种情况,设备只知道网络接口卡上的物理地址。这种情况下应该怎么办呢?RARP正是针对这种情况的一种协议。
RARP规定只有RARP服务器能产生应答。许多网络指定多个RARP服务器,这样做既是为了平衡负载也是为了作为出现问题时的备份。
工作原理
- 源主机发送一个RARP广播,包中声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;
- 本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;
- 如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;
- 如果不存在,RARP服务器对此不做任何的响应;
- 源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。