佳宁健康网

您现在的位置是:主页 > 热点资讯 >

热点资讯

稳了!一文给你讲透 ARP 协议

2023-05-30热点资讯admin 888
通过把第一次ARP获取到的MAC地址作为IP对MAC的映射关系到一个ARP缓存表中,下一次再向这个地址发送数据报时就不再需要重新发送ARP请求了,而是直接使用这个缓存表中的MAC地址进行数据

那么开始我们本篇文章

只要确定了IP地址后,就能够向这个IP地址所在的主机发送数据报,这是我们所熟知的事情。但是再往深了想,IP地址只是标识网络层的地址,那么在网络层下方数据链路层是不是也有一个地址能够告诉对方主机自己的地址呢?是的,这个地址就是MAC地址。

认识MAC地址

MAC地址的全称是MediaAccessControlAddress,译为媒体访问控制地址,它是网络上以太网或网络适配器的唯一标识符。MAC地址能够区分不同的网络接口,并用于多种网络技术,尤其是大多数IEEE802网络。

MAC地址主要用于识别数据链路中互联的节点,如下图所示

稳了!一文给你讲透 ARP 协议

MAC地址长48bit,在使用网卡(NIC)的情况下,MAC地址一般都会烧入ROM中。因此,任何一个网卡的MAC地址都是唯一的。MAC地址的结构如下

稳了!一文给你讲透 ARP 协议

MAC地址中的3-24位表示厂商识别码,每个NIC厂商都有特定唯一的识别数字。25-48位是厂商内部为识别每个网卡而用。因此,可以保证全世界不会有相同MAC地址的网卡。

ARP是什么

ARP协议的全称是AddressResolutionProtocol(地址解析协议),它是一个通过用于实现从IP地址到MAC地址的映射,即询问目标IP对应的MAC地址的一种协议。ARP协议在IPv4中极其重要。

简而言之,ARP就是一种解决地址问题的协议,它以IP地址为线索,定位下一个应该接收数据分包的主机MAC地址。如果目标主机不在同一个链路上,那么会查找下一跳路由器的MAC地址。

ARP的工作机制

下面我们探讨一下ARP的工作机制是怎样的。假设A和B位于同一链路,不需要经过路由器的转换,主机A向主机B发送一个IP分组,主机A的地址是192.168.1.2,主机B的地址是192.168.1.3,它们都不知道对方的MAC地址是啥,主机C和主机D是同一链路的其他主机。

稳了!一文给你讲透 ARP 协议

主机A想要获取主机B的MAC地址,通过主机A会通过广播的方式向以太网上的所有主机发送一个ARP请求包,这个ARP请求包中包含了主机A想要知道的主机B的IP地址的MAC地址。

稳了!一文给你讲透 ARP 协议

主机A发送的ARP请求包会被同一链路上的所有主机/路由器接收并进行解析。每个主机/路由器都会检查ARP请求包中的信息,如果ARP请求包中的目标IP地址和自己的相同,就会将自己主机的MAC地址写入响应包返回主机A

稳了!一文给你讲透 ARP 协议

由此,可以通过ARP从IP地址获取MAC地址,实现同一链路内的通信。

这就要使用到代理ARP了,通常ARP会被路由器隔离,但是采用代理ARP(ARPProxy)的路由器可以将ARP请求转发给临近的网段。使多个网段中的节点像是在同一网段内通信。

ARP缓存

现在你知道了发送一次IP分组前通过发送一次ARP请求就能够确定MAC地址。那么是不是每发送一次都得经过广播-封装ARP响应-返回给主机这一系列流程呢?

想想看,浏览器是如何做的呢?浏览器内置了缓存能够缓存你最近经常使用的地址,那么ARP也是一样的。ARP高效运行的关键就是维护每个主机和路由器上的ARP缓存(或表)。这个缓存维护着每个IP到MAC地址的映射关系。通过把第一次ARP获取到的MAC地址作为IP对MAC的映射关系到一个ARP缓存表中,下一次再向这个地址发送数据报时就不再需要重新发送ARP请求了,而是直接使用这个缓存表中的MAC地址进行数据报的发送。每发送一次ARP请求,缓存表中对应的映射关系都会被清除。

通过ARP缓存,降低了网络流量的使用,在一定程度上防止了ARP的大量广播。

稳了!一文给你讲透 ARP 协议

一般来说,发送过一次ARP请求后,再次发送相同请求的几率比较大,因此使用ARP缓存能够减少ARP包的发送,除此之外,不仅仅ARP请求的发送方能够缓存ARP接收方的MAC地址,接收方也能够缓存ARP请求方的IP和MAC地址,如下所示

稳了!一文给你讲透 ARP 协议

不过,MAC地址的缓存有一定期限,超过这个期限后,缓存的内容会被清除。

我们可以在Linux或者Windows中使用arp命令查看ARP缓存。选项-a用于显示两个系统缓存中所有的缓存项。

在Linux中使用arp查询缓存

稳了!一文给你讲透 ARP 协议

主要包含五项

主机名---对应一个IP地址

硬件地址类型

硬件地址

标志

本地网络接口

标志主要分为三类:C、M或P,C表示的是由ARP协议动态学习。M类可以通过arp-s增加一条。P类表示的是发布,对于任何P类项目,主机对输入的ARP请求都返回一个ARP响应。这个选项用于配置代理ARP。

比如我们在Windows中进行ARP缓存查询

稳了!一文给你讲透 ARP 协议

Windows中的ARP程序显示了IPv4的地址,它的接口是十六进制数,Windows版本还指出地址是手动输入还是ARP动态学习的。在上面的例子中,既有静态的也有动态的。48位的MAC地址被显示为6个十六进制数,在Linux中使用:号,在Windows中使用-进行分隔。

ARP结构

我们上面说到,ARP对想要知道MAC地址的目标主机会首先发送ARP请求,那么这个请求中都携带哪些信息呢?下面cxuan就来和你聊一下。下面是在以太网中转换一个IPv4的地址常用的ARP请求或响应的报文格式。

稳了!一文给你讲透 ARP 协议

前面14个字节构成标准以太网的首部,前两个字段DST和SRC分别表示以太网的目的地址和以太网的源地址,以太网的目的地址如果是ff:ff:ff:ff:ff:ff全部为1表示广播地址,在同一广播域中的所有以太网接口可以接收这些帧。后面紧跟着的是ARP请求的长度/类型,ARP请求和ARP应答这个值为0x0806。

硬件类型表示硬件地址的类型,硬件地址常见的有MAC物理或者以太网地址,对于以太网来说,此值为1。

协议类型指出映射的协议地址类型,对于IPv4地址,这个值是0x0800。

硬件大小和协议大小分别指出硬件地址和协议地址的字节数。对于以太网中使用IPv4的ARP请求或应答,它们的值分别是6和4。

Op字段指出如果是ARP请求,Op=1,ARP应答,Op=2,RARP请求Op=3,RARP应答,Op=4。

紧跟在Op之后的是发送方硬件地址(MAC地址),发送方的协议地址(IPv4地址),目的硬件地址和目的协议地址。

ARP抓包实战

我们分别演示在Mac和Linux下的ARP报文的截获

在Mac环境下,我这边使用的是WireShark进行抓包,你可以从官网下载,地址如下

稳了!一文给你讲透 ARP 协议

下载完成后阅读安装说明的手册,阅读后会发现需要安装两个插件,根据提示安装即可,然后我们打开WireShark,开始报文拦截,下面是我解惑的ARP数据包

稳了!一文给你讲透 ARP 协议

这款软件很好的一个地方是对不同的数据包会有不同的颜色标识,这点非常好。

然后我们查看ARP请求

稳了!一文给你讲透 ARP 协议

可以看到,这就是一个完整的ARP请求包,我们使用的硬件类型是以太网,协议类型是IPv4,默认值是0x0800,然后硬件大小是6个字节,协议大小占用2个字节,Op的全称是Opcode,Op=1表示这是一个ARP请求,然后是发送方的硬件地址和协议地址,接收方的硬件地址和协议地址。

ARP响应如下

稳了!一文给你讲透 ARP 协议

可以看到Op=2,表示这是ARP响应。

在Linux环境下,你可以使用tcpdump截获ARP数据包,如果tcpdumpnotfound的话,你可以使用yuminstall-ytcpdump安装。

使用tcpdump-iens33可以打印出在ens33地址下的数据包,下面是我截取的ARP数据包。

稳了!一文给你讲透 ARP 协议

更多关于tcpdump的用法,你可以参考这篇博客

大佬写的很详细,这里就不再说明了。

ARP缓存超时

缓存超时通常与ARP缓存中的项有关系,arp命令可以允许管理员设置永不超时。ARP把保存在高速缓存中的每一映射地址都设置生存时间,一般为20分钟。如果是不完整的映射,那么缓存超时时间为3分钟,不完整的映射通常会强制发送一条不存在主机的ARP请求。

RARP

与ARP相对的,RARP(ReverseAddressResolutionProtocol)是将ARP反过来,从MAC地址定位IP地址的一种协议,将打印机服务器等小型嵌入式设备接入网络时会使用到。

稳了!一文给你讲透 ARP 协议

平常我们设置IP地址一般会有两种方式,手动设置和DHCP动态获取

稳了!一文给你讲透 ARP 协议

但是对于嵌入式设备来说,它没有任何输入接口,也无法通过DHCP获取动态地址。

在这种情况下,就要使用到RARP了,你需要准备一个RARP服务器,在这个服务器上注册设备的MAC地址和IP地址,然后将设备接入网络,设备会发出一条IP和MAC地址的查询请求给服务器,服务器会告诉设备其IP地址和MAC地址。

稳了!一文给你讲透 ARP 协议

ARP攻击

ARP是一种非常不安全的协议,目前已经有很多涉及ARP的攻击,最主要的就是使用代理ARP功能假扮主机,对ARP请求作出应答,通过伪造ARP数据包来窃取合法用户的通信数据,造成影响网络传输速率和盗取用户隐私信息等严重危害。

ARP攻击分类

ARP主要攻击方式分为下面这几种

ARP泛洪攻击:通过向网关发送大量ARP报文,导致网关无法正常响应。首先发送大量的ARP请求报文,然后又发送大量虚假的ARP响应报文,从而造成网关部分的CPU利用率上升难以响应正常服务请求,而且网关还会被错误的ARP缓存表充满导致无法更新维护正常ARP缓存表,消耗网络带宽资源。

ARP欺骗主机攻击:ARP欺骗主机的攻击也是ARP众多攻击类型中很常见的一种。攻击者通过ARP欺骗使得局域网内被攻击主机发送给网关的流量信息实际上都发送给攻击者。主机刷新自己的ARP使得在自己的ARP缓存表中对应的MAC为攻击者的MAC,这样一来其他用户要通过网关发送出去的数据流就会发往主机这里,这样就会造成用户的数据外泄。

欺骗网关的攻击:欺骗网关就是把别的主机发送给网关的数据通过欺骗网关的形式使得这些数据通过网关发送给攻击者。这种攻击目标选择的不是个人主机而是局域网的网关,这样就会攻击者源源不断的获取局域网内其他用户韵数据.造成数据的泄露,同时用户电脑中病毒的概率也会提升。

中间人攻击:中间人攻击是同时欺骗局域网内的主机和网关,局域网中用户的数据和网关的数据会发给同一个攻击者,这样,用户与网关的数据就会泄露。

IP地址冲突攻击:通过对局域网中的物理主机进行扫描,扫描出局域网中的物理主机的MAC地址,然后根据物理主机的MAC进行攻击,导致局域网内的主机产生IP地址冲突,影响用户的网络正常使用。

总结

ARP是TCP/IP实现中的一个基本协议,它通常在应用程序或用户没有察觉到的情况下运行。ARP可以用于映射IP地址为MAC地址。

这篇文章我们主要讲了ARP的基本原理,ARP的帧结构,ARP的工作机制,以及ARP代理、ARP攻击、RARP和ARP的区别等。

如果这篇文章读者们觉得还不错,跪求点赞、留言,你的支持将是我继续肝文的动力!