1. ARP 概述

地址解析协议,即 ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。 它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居发现协议(NDP)所替代。

主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。

网络层使用的是 IP 地址,但在实际网络的链路上传输数据帧时,最终还必须使用该网络的硬件地址。但 IP 地址和下面的网络的硬件地址由于格式不同而不存在简单的映射关系。此外,一个网络上可能会经常会有新主机加入进来,或撤走一些主机。更换网络适配器也会使主机的硬件地址改变。地址解析协议 ARP 解决的方法是:在主机ARP高速缓存中应存放一个从IP地址到硬件地址的映射表,并且这个映射表还经常动态更新(新增或超时删除)。

注意:ARP是解决同一局域网中主机或者路由器的IP地址和硬件地址的映射问题,在每一台主机中都有一个ARP高速缓存(ARP cache),里面存储本主机所知道本局域网中其他主机的IP地址与硬件地址的映射表

2. ARP 协议工作原理

当主机 A 向本局域网上的某台主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,就在 ARP 高速缓存中查出其对应的硬件地址,再把这个硬件地址写入 MAC 帧,然后通过局域网把该 MAC 帧发往此硬件地址。
也有可能查不到主机 B 的 IP 地址。这可能主机 B 才入网,或者主机 A 刚刚加电,其高速缓存还是空的。这种情况下,主机 A 自动运行 ARP,然后按照以下步骤找出主机 B 的硬件地址。

  1. ARP进程在本局域网上广播一个ARP请求分组。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址。
  2. 本局域网所有主机运行的ARP进程收到此ARP请求分组。
  3. 主机B的IP与请求分组里面的IP一致,将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后向A发送ARP响应分组(单播);其他主机则不理睬
  4. 主机 A 收到从主机 B 发来的 ARP 响应分组时,就在其 ARP 高速缓存中写入主机 B 的 IP 地址到硬件地址的映射。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。

如果所要找的主机和源主机不在同一个局域网,则源主机发送 ARP 请求分组,找到本局域网上的一个路由器 R1 的硬件地址。剩下的工作由 R1 完成。

3. ARP 缓存

ARP高速缓存(即ARP表)是 ARP 地址解析协议能够高效运行的关键 (如果有多次ARP响应时,以最后一次响应为准)

每台主机或路由器在其内存中具有一个 ARP 表(ARP table),这张表包含 IP 地址到 MAC 地址的映射关系。该 ARP 表包含一个寿命值(TTL),它指示了从表中删除每个映射的时间。从一个表项放置到某 ARP 表中开始,一个表项通常的过期时间是 20 分钟

4. ARP 报文格式

Wireshark 抓取 ARP 请求报文:

字段1:以太网目的地址(Destination)。是ARP请求的目的以太网地址,全1时代表广播地址。
字段2:以太网源地址(Source)。发送ARP请求的以太网地址。
字段3:帧类型(Type)。以太网帧类型表示的是后面的数据类型,ARP请求和ARP应答这个值为0x0806。(常见类型:0800:IP数据报;0806:ARP请求/应答数据报;8035:RAPP请求/应答;)
字段4:硬件地址(Hardware type)。表示硬件地址的类型,硬件地址不只以太网一种,是以太网类型时此值为1。
字段5:协议类型(Protocol type)。指定协议地址类型,如0x0800表示协议地址类型为IPv4地址。该值与以太帧首部的类型字段相同。
字段6:硬件地址长度(Hardware size)。表示硬件地址的大小(单位:字节),如以太网地址为6。
字段7:协议地址长度(Protocol size)。表示协议地址的大小(单位:字节),如IPv4地址大小为4。
字段8:操作类型(Opcode)。值为1,表示进行ARP请求;值为2,表示进行ARP应答;值为3,表示进行RARP请求;值为4,表示进行RARP应答。
字段9:发送端以太网地址(Sender MAC address)。这里是以太网地址,和字段2相同。
字段10:发送端 IP 地址(Sender IP address)。
字段11:目的端硬件地址(Target MAC address)。
字段12:目的端 IP 地址(Target IP address)。

5. 抓包分析

下图红框中为 Wireshark 抓取的一对 ARP 请求和 ARP 应答

5.1. ARP 请求报文

5.2. ARP 应答报文

6. 免费 ARP

免费 ARP 是指主机发送 ARP 查找自己的 IP 地址。通常,发生在系统引导期间进行接口配置时。与标准 ARP 的区别就是免费 ARP 分组的目的 IP 地址字段封装的是自己的 IP 地址,即向所在网络请求自己的 MAC 地址。

免费 ARP 的作用:

  1. 一个主机可以通过它来确定另一个主机是否设置了相同的 IP 地址。
    主机并不希望对此请求有一个回答。但是,如果收到一个回答,那么就会在终端日志上产生一个错误消息
    “以太网地址: a: b:c:d:e:f 发送来重复的 IP 地址”。这样就可以警告系统管理员,某个系统有不正确的设置。
  2. 更新其他主机高速缓存中旧的硬件地址信息。
    如果发送免费 ARP 的主机正好改变了硬件地址(很可能是主机关机了,并换了一块接
    口卡,然后重新启动),那么这个分组就可以使其他主机高速缓存中旧的硬件地址进行相应的更新。一个比较著名的 ARP 协议事实[Plummer 1982]是,如果主机收到某个 IP 地址的 ARP 请求,
    而且它已经在接收者的高速缓存中,那么就要用 ARP 请求中的发送端硬件地址(如以太网地
    址)对高速缓存中相应的内容进行更新。主机接收到任何 ARP 请求都要完成这个操作(ARP 请求是在网上广播的,因此每次发送 ARP 请求时网络上的所有主机都要这样做)。
    文献[Bhide、Elnozahy和Morgan 1991]中有一个应用例子,通过发送含有备份硬件地址和
    故障服务器的 IP 地址的免费 ARP 请求,使得备份文件服务器可以顺利地接替故障服务器进行
    工作。这使得所有目的地为故障服务器的报文都被送到备份服务器那里,客户程序不用关心
    原来的服务器是否出了故障。但《TCP/IP 详解》作者反对这个做法,因为这取决于所有不同类型的客户端都要有正
    确的ARP协议实现。他们显然碰到过客户端的ARP协议实现与规范不一致的情况。
  3. 网关利用免费 ARP 防止 ARP 攻击。
    有些网关设备在一定的时间间隔内向网络主动发送免费 ARP 报文,让网络内的其他主机更新 ARP 表项中的网关 MAC 地址信息,以达到防止或缓解 ARP 攻击的效果。
  4. 利用免费 ARP 进行 ARP 攻击。
    ARP 协议并不只在发送了 ARP 请求才接收 ARP 应答,计算机只要接收到 ARP 应答数据包,就会使用应答中的 IP 和 MAC 地址对本地的 ARP 缓存进行更新。
    主机可以构造虚假的免费 ARP 应答,将 ARP 的源 MAC 地址设为错误的 MAC 地址,并把这个虚假的免费 ARP 应答发送到网络中,那么所有接收到这个免费 ARP 应答的主机都会更新本地 ARP 表项中相应 IP 地址对应的 MAC 地址。更新成功后,这些主机的数据报文就会被转发到错误的 MAC 地址,从而实现了 ARP 欺骗的攻击。

7. ARP 代理

如果 ARP 请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求,这个过程称作委托 ARPARP 代理(Proxy ARP)。 这样可以欺骗发起 ARP 请求的发送端,使它误以为路由器就是目的主机,而事实上目的主机是在路由器的“另一边”。路由器的功能相当于目的主机的代理,把分组从其他主机转发给它。
ARP 代理也称作混合 ARP(promiscuous ARP)或ARP 出租(ARP hack)。这些名字来自于 ARP 代理的其他用途:通过两个物理网络之间的路由器可以互相隐藏物理网络。在这种情况下,两个物理网络可以使用相同的网络号,只要把中间的路由器设置成一个 ARP 代理,以响应一个网络到另一个网络主机的 ARP 请求。这种技术在过去用来隐藏一组在不同物理电缆上运行旧版 TCP/IP 的主机。分开这些旧主机有两个共同的理由,其一是它们不能处理子网划分,其二是它们使用旧的广播地址(所有比特值为 0 的主机号,而不是目前使用的所有比特值为 1 的主机号)。

ARP 代理的优点:

  1. 最主要的一个优点就是能 够在不影响其他router的路由表的情况下在网络上添加一个新的router,这样使得子网的变化对主机是透明的
  2. ARP 代理应该使用在主机没有配置默认网关或没有任何路由策略的网络上

ARP 代理的缺点:

  1. 增加了某一网段上ARP流量
  2. 主机需要更大的ARP table来处理IP地址到MAC地址的映射
  3. 安全问题,比如ARP欺骗(spoofing)
  4. 不会为不使用ARP来解析地址的网络工作
  5. 不能够概括和推广网络拓扑

8. ARP 攻击

ARP 协议的基本功能就是通过目标设备的 IP 地址,查询目标设备的 MAC 地址,以保证通信的进行。 基于 ARP 协议的这一工作特性,黑客向对方计算机不断发送有欺诈性质的 ARP 数据包,数据包内包含有与当前设备重复的 Mac 地址,使对方在回应报文时,由于简单的地址重复错误而导致不能进行正常的网络通信。

一般情况下,受到ARP攻击的计算机会出现两种现象:

  1. 不断弹出“本机的XXX段硬件地址与网络中的XXX段地址冲突”的对话框。
  2. 计算机不能正常上网,出现网络中断的症状。

因为这种攻击是利用ARP请求报文进行“欺骗”的,所以防火墙会误以为是正常的请求数据包,不予拦截。因此普通的防火墙很难抵挡这种攻击。

[参考文献]

  1. 百度百科 ARP
  2. 《计算机网络》 谢希仁.
  3. 《计算机网络自顶向下方法》
  4. 《TCP/IP 详解 卷1:协议》
  5. ARP 详解 https://blog.csdn.net/lm409/article/details/80299823
  6. ARP 地址解析协议原理 https://www.cnblogs.com/csguo/p/7542944.html
  7. 代理ARP(proxy ARP)的原理及其工作方式 https://www.cnblogs.com/yxmx/articles/1684944.html

ARP(地址解析协议)的更多相关文章

  1. ARP地址解析协议

    ARP地址解析协议:为IP地址到相应的硬件地址之间提供动态映射. 下面图为例说明地址解析协议的详细工作流程. 结合图中的序号进行说明. client通过FTP协议连接server时,首先解析器会把主机 ...

  2. ARP地址解析协议原理

    概述 网络层以上的协议用IP地址来标识网络接口,但以太数据帧传输时,以物理地址来标识网络接口.因此我们需要进行IP地址与物理地址之间的转化. 对于IPv4来说,我们使用ARP地址解析协议来完成IP地址 ...

  3. 《TCP/IP详解 卷1:协议》第4章 ARP:地址解析协议

    4.1 引言 本章我们要讨论的问题是只对TCP/IP协议簇有意义的IP地址.数据链路如以太网或令牌环网都有自己的寻址机制(常常为48 bit地址),这是使用数据链路的任何网络层都必须遵从的.一个网络如 ...

  4. ARP:地址解析协议

    ARP是地址解析协议,简单语言解释一下工作原理.1:首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系.2:当源主机要发送数据时,首先检查ARP列表中 ...

  5. arp:地址解析协议(Address Resolution Protocol)(来自维基百科)

    地址解析协议(Address Resolution Protocol),其基本功能为通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在I ...

  6. 【网络协议】ARP地址解析协议

    地址解析协议ARP 在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址.而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址.这就导致在以太 ...

  7. 【网络基础】ARP地址解析协议

    ARP(Address Rssolution Protocol) 地址解析协议 用于将IP地址解析为MAC地址. MAC地址是设备的物理地址,是被分配给每一个网络接口卡的全球唯一序号. 全球唯一:理论 ...

  8. 网络协议抓包分析——ARP地址解析协议

    前言 计算机之间可以相互通信的前提是要知道对方的地址,才可以发送信息给其他计算机,就像别人要联系你也得先知道你的电话号码一样.这里的地址因为网络分层的原因就包括IP地址和MAC地址(即网卡地址.硬件地 ...

  9. 第二章ARP——地址解析协议

    本章我们要讨论的问题是只对 T C P / I P协议簇有意义的I P地址.数据链路如以太网或令牌环网都有自己的寻址机制(常常为 48 bit地址),这是使用数据链路的任何网络层都必须遵从的.一个网络 ...

  10. 第四章:ARP 地址解析协议

    网络接口有一个硬件地址,48bit的值,在硬件层次上进行的数据帧交换必须有正确的接口地址.tcp/ip有自己的地址,32bit的IP地址. 但是知道主机的IP地址并不能让内核发送一帧数据给主机.内核( ...

随机推荐

  1. 【cl】cmd相关命令

    cd  进入目录 dir  列出当前目录下的文件[在linux上是ls] e:  进入E盘 tab键可以快速进入目录

  2. 深入理解 C 指针阅读笔记 -- 第二章

    Chapter2.h #ifndef __CHAPTER_2_ #define __CHAPTER_2_ /*<深入理解C指针>学习笔记 -- 第二章*/ /* 内存泄露的两种形式 1.忘 ...

  3. Xmind8破解激活

    1.下载安装包: https://www.xmind.cn/download/ 进行安装 2.下载破解补丁: https://stormxing.oss-cn-beijing.aliyuncs.com ...

  4. linux下udev简介【转】

    本文转载自:http://blog.csdn.net/skyflying2012/article/details/9364555 一.关于Udev u即user space,dev是device,通过 ...

  5. CH Round #46A 磁力块

    还是一道好题的 对于一个磁石是否被吸引,有两个关键字:距离和质量.(二维偏序??) 好像是很厉害的分块姿势,先按第一关键字排序,在块中按第二关键字排 进行bfs,对于当前磁石,有1~k-1个块是第一关 ...

  6. [ligerUI] grid封装调用方法

    /** * 获取页面参数 */ function getPageSize(){ var xScroll, yScroll; if (window.innerHeight && wind ...

  7. Mysql数据类型(二)

    字符类型 #官网:https://dev.mysql.com/doc/refman/5.7/en/char.html #注意:char和varchar括号内的参数指的都是字符的长度 #char类型:定 ...

  8. Aspose.cell中的Excel模板导出数据

    //Excel模板导数据(Eexcel中根据DataTable中的个数,给多个Sheet中的模板赋值) public void DataSetToManyExcel(string fileName, ...

  9. Android 关于Toolbar和FragmentActivity的问题

    今天在工作中遇到用Fragment搭Tab框架时,FragmentActivity无法使用Toolbar的问题.查了许多资料,其实AppComponent继承自FragmentActivity,所以A ...

  10. phpExcel导出大量数据出现内存溢出错误的解决方法

    phpExcel将读取的单元格信息保存在内存中,我们可以通过 代码如下:PHPExcel_Settings::setCacheStorageMethod() 来设置不同的缓存方式,已达到降低内存消耗的 ...