目录
1.ARP协议介绍
ARP(Address Resolution Protocol)是一个非常中药并且经常使用的地址解析协议,它虽然是一个网络层协议,但是也涉及一些数据链路层的信息。ARP协议的基本作用是根据已知的IP地址获得其对应的MAC地址。
2.ARP的基本原理
(1)我们分析帧在交换网络中的运动过程时,总是特别假定源计算机已经知道了目的计算机的MAC地址。事实上,一个源设备开始时不知道目的设备的MAC地址的。
(2)源设备总是通过某种机制(例如DNS)先获取目的设备的IP地址,然后利用ARP协议对此IP地址进行解析,从而获取目的设备的MAC地址。当然,一个设备总是知道自己的MAC地址和IP地址的。
(3)源设备想要解析一个IP地址时,会发出一个广播帧,广播帧的载荷数据是一个ARP请求报文。目的设备在接收到ARP请求报文后,会向源设备发送一个单播帧,该单播帧的载荷数据是一个ARP应答报文,该ARP应答报文中包含目的设备的MAC地址。
3.ARP工作过程
以上图为例,假设源主机PC1已经知道了目的主机PC2的IP地址为10.0.0.2,现在想要获取PC2的MAC地址。
PC1获取PC2的MAC地址的过程有以下步骤:
(1)PC 1会发送一个广播帧,该广播帧的源MAC地址为MAC 1,类型字段的值是 0x0806,表明该广播帧的载荷数据是一个ARP报文(具体为ARP请求报文)。该ARP 请求报文的含义是:我的IP地址是10.0.0.1,我的MAC地址是MAC1,请问IP地址10.0.0.2 所对应的MAC地址是多少?
(2)因为PC 1发送的是一个广播帧,所以PC 2和PC 3都会接收到它,并根据 其类型字段的值(0x0806)将其中的ARP请求报文上送给网络层的ARP处理模块进 行处理。
(3)PC 3的ARP处理模块会发现,10.0.0.2并不是自己的IP地址,所以不会进行 应答,而是将ARP请求报文中10.0.0.1与MAC1的对应关系存放进自己的ARP缓存表, 然后将此ARP请求报文丢弃。
(4)PC 2的ARP处理模块会发现,10.0.0.2正是,自己的IP地址,所以会进行应答。
PC2会向PC 1发送一个单播帧,该帧的目的MAC地址为MAC1,源MAC地址为MAC2, 类型字段的值还是0x0806o该帧的载荷数据是一个ARP应答报文,应答报文中包含了 PC 2的IP地址10.0.0.2和MAC地址MAC2。另外,PC 2也要将所收到的ARP请求报 文中的10.0.0.1与MAC1的对应关系存放进自己的ARP缓存表。
(5)PC 1在收到PC 2发送的单播帧后,会将其中的ARP应答报文上送给三层的 ARP处理模块oPC 1的ARP处理模块会从该应答报文中获取到PC 2的MAC地址MAC2。 另外,PC 1也会将10.0.0.2与MAC2的对应关系存放进自己的ARP缓存表。
从上面的描述中,我们接触到了 ARP缓存表这个概念。设备中的ARP缓存表是用 来临时存放IP地址与MAC地址的对应关系的。当某一设备需要向目的设备发送单播帧 时,会首先査看自己的ARP缓存表中是否已经有了目的设备的MAC地址。如果有,就 直接使用它;如果没有,就会发起ARP请求来获取它。
ARP缓存表也具有动态特性:一个条目(即一个IP地址与MAC地址的对应关系) 从其被建立或最近一次被使用算起,会有180s (该时间值可通过配置进行修改)的生存 期;一旦过了生存期,该条目就会被删除。某个条目在每次被使用时,该条目的生存期 都会被重新设置为180s。
4.ARP报文格式
ARP报文分为ARP请求报文和ARP应答报文,这两种报文的结构相同,但是各个 字段的取值有所不同,有阴影的区域才是ARP报文。
| 字段 | ARP请求报文 | ARP应答报文 |
| 目的MAC地址 | ff-ff-ff-ff-ff-ff(广播帧) | 请求端的MAC地址 |
| 源MAC地址 | 请求端的MAC地址 | 被请求端的MAC地址 |
| 类型(相同) | 长度为2个字节。取值为0x0806 | 长度为2个字节。取值为0x0806 |
| 硬件类型(相同) | 长度为2个字节。表示网络类型:以太网的取值为1 | 长度为2个字节。表示网络类型:以太网的取值为1 |
| 协议类型(相同) | 长度为2个字节。表示协议地址类型;取值为0x0800即表示根据IP地 址来进行映射 | 长度为2个字节。表示协议地址类型;取值为0x0800即表示根据IP地 址来进行映射 |
| 硬件地址长度(hln)(相同) | 长度为1个字节。表示硬件地址的长度;以太网中取值为6,表示MAC 地址长度为6个字节 | 长度为1个字节。表示硬件地址的长度;以太网中取值为6,表示MAC 地址长度为6个字节 |
| 协议地址长度(pin)(相同) | 长度为1个字节。表示协议地址的长度;取值为4表示IP地址长度为4 个字节 | 长度为1个字节。表示协议地址的长度;取值为4表示IP地址长度为4 个字节 |
| op | 长度为2个字节。表示ARP报文的种 类;取值为1表示是ARP请求报文 | 长度为2个字节。表示ARP报 文的种类;取值为2表示是ARP 应答报文 |
| 发送端MAC地址 | 请求端的MAC地址 | 被请求端的MAC地址 |
| 发送端IP地址 | 请求端的IP地址 | 被请求端的IP地址 |
| 目的端MAC地址 | 请求端发出请求时,还不知道该MAC 地址。接收方忽略该字段 | 请求端的MAC地址 |
| 目的端IP地址 | 请求端希望映射的IP地址,也就是被 请求端的IP地址 | 请求端的IP地址 |
| PAD(相同) | PAD字段一共有18个字节,目的是为了凑足以太帧的载荷数据的最小长 度46字节 | PAD字段一共有18个字节,目的是为了凑足以太帧的载荷数据的最小长 度46字节 |
5.免费ARP
(1)定义:
免费ARP是指主机发送ARP查找自己的IP地址。
(2)普通ARP和免费ARP的区别:
普通ARP请求报文(查找别人的IP地址,比如:我需要10.1.1.2的MAC地址,10.1.1.2是别人的IP)广播发送出去,广播域内所有主机都 接收到,计算机系统判断ARP请求报文中的目的IP地址字段,如果发现和本机的IP地址相同,则将自己的MAC地址填写到该报文的目的MAC地址字段,并 将该报文发回给源主机。所以只要发送普通ARP请求的主机接收到报文,则证明广播域内有别的主机使用自己要访问的这个IP地址(这里不考虑路由器的ARP代理问 题)。
免费ARP的报文发(查找自己的IP地址,比如:我需要10.1.1.1的MAC地址,而10.1.1.1就是自己的IP)出去是不希望收到回应的,只希望是起宣告作用;如果收到回应,则证明对方也使用自己目前使用的IP地址。在所有网络设备(包括计 算机网卡)up的时候,都会发送这样的免费ARP广播,以宣告并确认有没有冲突。
6.ARP欺骗攻击
(1)定义
ARP欺骗攻击主要是存在于局域网中,通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。
(2)分类
1.主机欺骗,如同上面的栗子,主机B欺骗局域网中的主机A。
2.网关欺骗,局域网中的主机欺骗网关,从而获取其他主机的进流量。
(3)危害
1.造成局域网中的其他主机断网。
2.劫持局域网中其他主机或网关的流量,获取敏感信息等。