Arp 协议

ARP(Address Resolution Protocol,地址解析协议)是一个位于TCP/IP协议栈中的低层协议,负责将某个IP地址解析成对应的MAC地址。 用于局域网中mac与ip的映射, 发送数据到外网则直接使用网关的mac地址

  • mac 地址为 48bit的以太网地址
  • arp -a 查看arp高速缓存

    [root@iz2zecj7a5r32f2axsctb9z ~]# arp -a
    ? (172.17.159.253) at ee:ff:ff:ff:ff:ff [ether] on eth0

Arp 报文格式

arp报文格式

  • 以太网目的地址: 6字节,为ARP请求的目的以太网地址,全1时代表广播地址
  • 以太网源地址: 6字节,发送ARP请求的以太网地址
  • 帧类型: 2字节,表示后面的数据类型,ARP请求和ARP应答这个值为0x0806
  • 硬件类型: 1字节,表示硬件地址的类型,以太网地址为1
  • 协议类型: 1字节,ipv4映射值为 0x0800
  • 字段6、7字节: 表示硬件地址和协议地址长度,mac占6字节,ip占4字节,因此一般为6,4
  • op: 2字节,值为1,表示进行ARP请求;值为2,表示进行ARP应答;值为3,表示进行RARP请求;值为4,表示进行RARP应答
  • 发送端以太网地址: 发送端ARP请求或应答的硬件地址,这里是以太网地址,和字段2相同
  • 发送端IP地址: 发送ARP请求或应答的IP地址
  • 目的以太网地址和目的ip地址: 目的端的硬件地址和协议地址

抓包分析

tcpdump -e 显示硬件地址

抓包分析

Arp请求报文

0001 表明为以太网地址
0800 协议类型
0604 mac为6字节,IP为4字节
0001 表明为ARP请求
0242 4233 a176 发送端mac地址
ac12 0001 发送端ip地址为 172.18.0.1
0000 0000 0000 目的以太网地址
ac12 0002 目的ip地址 172.18.0.2

Arp 响应报文

0001 硬件地址类型为以太网地址
0800 协议地址类型为ipv4地址
0604 mac地址为6字节,ip地址为4字节
0002 ARP应答
0242 ac12 002 为应答端mac地址
ac12 0002 为应答端ip地址 172.18.0.2
0242 4233 a176 目的端硬件地址
ac12 0001 目的端ip地址 172.168.0.1

Arp 工作流程

arp工作流程
假设主机A和B在同一个网段,主机A要向主机B发送信息,具体的地址解析过程如下:

  1. 首先,每台主机都会在自己的ARP缓冲区 (ARP Cache)中建立一个 ARP列表,以表示IP地址和MAC地址的对应关系。
  2. 当源主机需要将一个数据包要发送到目的主机时,会首先检查自己 ARP列表中是否存在该 IP地址对应的MAC地址
    • 如果有﹐就直接将数据包发送到这个MAC地址;
    • 如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址(注意,已知的是IP地址,未知的是MAC地址)。此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机的IP地址。
  3. 网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个 ARP响应数据包,告诉对方自己是它需要查找的MAC地址;
  4. 源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

如果不同网段,地址解析流程如下:查看ARP高速缓冲区是否有网关的mac地址

- 如果有, 则直接将网关的mac地址填入目标地址, 发送给网关
- 如果没有,则发起广播,得到网关的mac地址

图解工作流程:
图解1
图解2
图解3

Arp 高速缓存

如果不使用ARP高速缓存,那么任何一个主机只要进行一次通信,就必须在网络上用广播方式发送ARP请求分组,这就使网络上的通信量大大增加。ARP将已经得到的地址映射保存在高速缓存中,这样就使得该主机下次再和具有同样目的地址的主机通信时,可以直接从高速缓存中找到所需的硬件地址而不必再用广播方式发送ARP请求分组。

ARP将保存在高速缓存中的每一个映射地址项目都设置生存时间(例如,10~20分钟)。凡超过生存时间的项目就从高速缓存中删除掉。设置这种地址映射项目的生存时间是很重要的。设想有一种情况。主机A和B通信。A的ARP高速缓存里保存有B的物理地址。但B的网卡突然坏了,B立即更换了一块,因此B的硬件地址就改变了。A还要和B继续通信。A在其ARP高速缓存中查找到B原先的硬件地址,并使用该地址向B发送数据帧。但B原先的硬件地址已经失效了,因此A无法找到主机B。但是过了一段时间,A的ARP高速缓存中已经删除了B原先的硬件地址(因为它的存在时间到了),于是A重新广播发送ARP请求分组,又找到了B。

为什么不直接使用mac地址通信

设想有两个主机可以直接使用硬件地址进行通信(具体实现方法暂不必管)。再假定其两个主机的网卡都同时坏了,然后又都更换了一块,因此它们的硬件地址也都改变了。这时,这两个主机怎样能够知道对方的硬件地址呢?显然很难。但IP地址是独立于主机或路由器的硬件地址的。硬件地址的改变不会影响使用IP协议的主机的通信。

Arp攻击

ARP攻击主要是存在于局域网中,通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。

假设PC3这台主机安装了ARP攻击软件或遭受ARP病毒,成为这个网络的攻击者(hacker),接下来,PC3是如何攻击的?

一般在正常情况下,若主机收到的ARP请求不是给自己的,则直接丢弃;而这里PC3(Hacker)在监听之后,发起了ARP回应包:我就是PC2并把自己的MAC地址封装在MAC帧里面(IP2—MAC3)

从上面的拓扑中可以看出,PC3明明是IP3对应MAC3,很显然这就是一个ARP欺骗行为。于此同时,PC2正常的ARP回应包也交到了PC1手中,由于PC2、PC3的响应包都回到了PC1,接下来我们来看看PC1是如何处理这种问题的

PC1广播之后收到的两个ARP回应包,内容分别如下:

       PC2包:我是PC2,我的IP地址是IP2,我的MAC地址是MAC2;

       PC3包:我是PC2,我的IP地址是IP2,我的MAC地址是MAC3;

由于PC2是两个MAC,那么PC1该怎么选择呢:是接受先来的响应包 (遵循先到先得原则)、还是接受后来的响应包 (遵循后到优先原则)
为了解决这些问题,这里给大家介绍一下网络协议里各种表在处理缓存信息的方式:

      ARP表  :后到优先原则

      CAM表  :后到优先原则

      DHCP表:先到先得原则

那么问题来了,上面两个ARP回应包到底哪个先到哪个后到呢?其实不用去管这些东西,只要PC3不断的向PC1发送欺骗包(利用稳健的ARP嗅探/渗透工具)就一定可以覆盖掉PC2的正常回应包,最后PC1的ARP表中一定存放的是IP2和MAC3的映射关系

这种ARP攻击(中间人投毒)在局域网内的危害也是很大的,如:断网攻击,个人账号密码的窃取(在这里指出:任何基于明文传输的应用,都可以被窃取,除了http(web应用),常见的还有telnet、ftp、pop3/smtp/imap(邮箱)等应用,都很容易泄露密码)

文档更新时间: 2021-02-03 16:18   作者:周国强