ARP协议

2023-11-10

什么是ARP

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;

最直白的说法是:在IP以太网中,当一个上层协议要发包时,有了该节点的IP地址,ARP就能提供该节点的MAC地址。

大家都知道,OSI模式把网络工作分为七层,彼此不直接打交道,只通过接口(layre interface). IP地址在第三层(网络层), MAC地址在第二层(数据链路层)。协议在发送数据包时,首先要封装第三层(IP地址)和第二层 (MAC地址)的报头, 但协议只知道目的节点的IP地址,不知道其物理地址,又不能跨第二、三层,所以得用ARP的服务拿到MAC地址。

ARP工作过程

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

  1. 主机A首先查看自己的ARP缓存表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。
  2. 如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。
  3. 主机B比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。
  4. 主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。

当主机A和主机B不在同一网段时,主机A就会先向网关发出ARP请求,ARP请求报文中的目标IP地址为网关的IP地址。当主机A从收到的响应报文中获得网关的MAC地址后,将报文封装并发给网关。如果网关没有主机B的ARP表项,网关会广播ARP请求,目标IP地址为主机B的IP地址,当网关从收到的响应报文中获得主机B的MAC地址后,就可以将报文发给主机B;如果网关已经有主机B的ARP表项,网关直接把报文发给主机B。

ARP缓存表和TTL

ARP表

网络设备一般都有一个ARP缓存(ARP Cache),ARP缓存用来存放IP地址和MAC地址的关联信息。在发送数据前,设备会先查找ARP缓存表。如果缓存表中存在对方设备的MAC地址,则直接采用该MAC地址来封装帧,然后将帧发送出去。如果缓存表中不存在相应的信息,则通过发送ARP request报文来获得它。学习到的IP地址和MAC地址的映射关系会被放入ARP缓存表中存放一段时间。在有效期内,设备可以直接从这个表中查找目的MAC地址来进行数据封装,而无需进行ARP查询。过了这段有效期,ARP表现会被自动删除。如果目标设备位于其他网络则源设备会在ARP缓存表中查找网关的MAC地址,然后将数据发送给网关,网关再把数据转发给目的设备。

ARP表项又分为动态ARP表项和静态ARP表项。

动态ARP表项

动态ARP表项由ARP协议通过ARP报文自动生成和维护,可以被老化,可以被新的ARP报文更新,可以被静态ARP表项覆盖。每个动态ARP缓存项的潜在生命周期是10分钟。新加到缓存中的项目带有时间戳,如果某个项目添加后2分钟内没有再使用,则此项目过期并从ARP缓存中删除;如果某个项目已在使用,则又收到2分钟的生命周期;如果某个项目始终在使用,则会另外收到2分钟的生命周期,一直到10分钟的最长生命周期。

静态ARP表项

静态ARP表项通过手工配置和维护,不会被老化,不会被动态ARP表项覆盖。直到重新启动计算机为止。

配置静态ARP表项可以增加通信的安全性。静态ARP表项可以限制和指定IP地址的设备通信时只使用指定的MAC地址,此时攻击报文无法修改此表项的IP地址和MAC地址的映射关系,从而保护了本设备和指定设备间的正常通信。

静态ARP表项分为短静态ARP表项和长静态ARP表项。

  • 在配置长静态ARP表项时,除了配置IP地址和MAC地址项外,还必须配置该ARP表项所在VLAN和出接口。长静态ARP表项可以直接用于报文转发。
  • 在配置短静态ARP表项时,只需要配置IP地址和MAC地址项。如果出接口是三层以太网接口,短静态ARP表项可以直接用于报文转发;如果出接口是VLAN虚接口,短静态ARP表项不能直接用于报文转发,当要发送IP数据包时,先发送ARP请求报文,如果收到的响应报文中的源IP地址和源MAC地址与所配置的IP地址和MAC地址相同,则将接收ARP响应报文的接口加入该静态ARP表项中,之后就可以用于IP数据包的转发。

一般情况下,ARP动态执行并自动寻求IP地址到以太网MAC地址的解析,无需管理员的介入。

当希望设备和指定用户只能使用某个固定的IP地址和MAC地址通信时,可以配置短静态ARP表项,当进一步希望限定这个用户只在某VLAN内的某个特定接口上连接时就可以配置长静态ARP表项。

ARP报文格式

在局域网中,当主机或其它网络设备有数据要发送给另一个主机或设备时,它必须知道对方的网络层地址(即IP地址)。但是仅仅有IP地址是不够的,因为IP数据报文必须封装成帧才能通过物理网络发送,因此发送站还必须有接收站的物理地址,所以需要一个从IP地址到物理地址的映射。APR就是实现这个功能的协议。

ARP协议是通过报文进行工作的,是一个独立的三层协议,所以ARP报文在向数据链路层传输时不需要经过IP协议的封装,而是直接生成自己的报文,其中包括ARP报头,到数据链路层后再由对应的数据链路层协议(如以太网协议)进行封装。ARP报文分为ARP请求和ARP应答报文两种,它们的报文格式可以统一为下图所示。

前面Ethernet Address of destination, Ethernet Address of sender 和 Frame Type属于数据链路层的封装,往后的就是真正的ARP报文数据结构。

「字段」 「长度(bit)」 「含义」

ARP请求

下面是Wireshark抓的ARP请求报文,大家可以看到数据链路层的Ethernet Address of destination是全ff,说明这是一个广播包,是为了获取指定IP的MAC地址,可以看到ARP包中的Target IP address是192.168.0.7,但Target MAC address是全0,说明当前还不知道目标主机的MAC地址,Opcode为1,说明这是一个ARP请求报文。

ARP响应

下面是Wireshark抓的ARP响应报文,大家参照上面的报文格式解析一下咯:

免费ARP

免费 ARP(Gratuitous ARP)包是一种特殊的ARP请求,它并非期待得到IP对应的 MAC 地址,而是当主机启动的时候,发送一个 Gratuitous ARP请求,即请求自己的IP地址的MAC地址。

免费ARP报文与普通ARP请求报文的区别在于报文中的目标IP地址。普通ARP报文中的目标IP地址是其他主机的IP地址;而免费ARP的请求报文中,目标IP地址是自己的IP地址。

免费 ARP 数据包有以下 3 个作用。

  • 该类型报文起到一个宣告作用。它以广播的形式将数据包发送出去,不需要得到回应,只为了告诉其他计算机自己的IP地址和MAC地址。
  • 可用于检测IP地址冲突。当一台主机发送了免费ARP请求报文后,如果收到了ARP响应报文,则说明网络内已经存在使用该IP地址的主机。
  • 可用于更新其他主机的ARP缓存表。如果该主机更换了网卡,而其他主机的ARP缓存表仍然保留着原来的MAC地址。这时,可以发送免费的 ARP数据包。其他主机收到该数据包后,将更新ARP缓存表,将原来的 MAC地址替换为新的MAC地址。

ARP代理

当局域网内部主机发起跨网段的ARP请求时,出口路由器/网关设备将自身MAC地址回复该请求时,这个过程称为代理ARP。(eg:1.没有路由功能的主机;2.有路由功能,目的地指向本地出口)

地址解析协议工作在一个网段中,而代理ARP(Proxy ARP,也被称作混杂ARP(Promiscuous 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位的掩码),因此向请求主机回复自己的硬件地址(0004.dd9e.cca0)。之后,PC1将发往PC2的数据包都发往MAC地址0004.dd9e.cca0(路由器的接口E0/0),由路由器将数据包转发到目标主机PC2。(接下来路由器将为PC2做同样的代理发送数据包的工作)。代理ARP协议使得子网化网络拓扑对于主机来说是透明的(或者可以说是路由器以一个不真实的PC2的MAC地址欺骗了源主机PC1)。

ARP欺骗

地址解析协议是建立在网络中各个主机互相信任的基础上的,它的诞生使得网络能够更加高效的运行,但其本身也存在缺陷:

ARP地址转换表是依赖于计算机中高速缓冲存储器动态更新的,而高速缓冲存储器的更新是受到更新周期的限制的,只保存最近使用的地址的映射关系表项,这使得攻击者有了可乘之机,可以在高速缓冲存储器更新表项之前修改地址转换表,实现攻击。ARP请求为广播形式发送的,网络上的主机可以自主发送ARP应答消息,并且当其他主机收到应答报文时不会检测该报文的真实性就将其记录在本地的MAC地址转换表,这样攻击者就可以向目标主机发送伪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协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的进行。基于ARP协议的这一工作特性,黑客向对方计算机不断发送有欺诈性质的ARP数据包,数据包内包含有与当前设备重复的Mac地址,使对方在回应报文时,由于简单的地址重复错误而导致不能进行正常的网络通信,或者如果不及时处理,便会造成网络通道阻塞、网络设备的承载过重、网络的通讯质量不佳等情况。。

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

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

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

NDP

地址解析协议是IPv4中必不可少的协议,但在IPv6中将不再存在地址解析协议。在IPv6中,地址解析协议的功能将由NDP(邻居发现协议,Neighbor Discovery Protocol)实现,它使用一系列IPv6控制信息报文(ICMPv6)来实现相邻节点(同一链路上的节点)的交互管理,并在一个子网中保持网络层地址和数据链路层地址之间的映射。邻居发现协议中定义了5种类型的信息:路由器宣告、路由器请求、路由重定向、邻居请求和邻居宣告。与ARP相比,NDP可以实现路由器发现、前缀发现、参数发现、地址自动配置、地址解析(代替ARP和RARP)、下一跳确定、邻居不可达检测、重复地址检测、重定向等更多功能。

「NDP与ARP的区别」

  • IPv4中地址解析协议是独立的协议,负责IP地址到MAC地址的转换,对不同的数据链路层协议要定义不同的地址解析协议。IPv6中NDP包含了ARP的功能,且运行于因特网控制信息协议ICMPv6上,更具有一般性,包括更多的内容,而且适用于各种数据链路层协议;
  • 地址解析协议以及ICMPv4路由器发现和ICMPv4重定向报文基于广播,而NDP的邻居发现报文基于高效的组播和单播。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARP协议 的相关文章

  • vue图片上传组件

    vue图片上传组件 最近在做项目的时候顺便补充了一下公司项目的公共组件库 刚刚手头事情告一段落 就来做个笔记 首先来看看最终效果 1 不允许删除 2 允许用户删除 显示删除按钮 实现的效果就是上图显示内容 接下来说说组件布局那部分直接上代码
  • 循环神经网络-LSTM

    参考 长期以来 隐变量模型存在着长期信息保存和短期输入缺失的问题 解决这一问题的最早方法之一是长短期存储器 long short term memory LSTM Hochreiter and Schmidhuber 1997 它有许多与门
  • 教你如何更改windows10系统默认字体

    以管理员身份运行命令提示符 打开注册表 定位到HKEY LOCAL MACHINE SOFTWARE Microsoft WindowsNT CurrentVersion Fonts 在右边找的Microsoft YaHei Microso
  • 常用继电器模块的PCB设计与实物分享

    今天分享一下自己做的一块继电器模块 因为之前有用到继电器模块的原理图 索性自己画了一下 原理图如图所示 一 原理图 继电器模块还是比较简单的 就是通过三极管的开关作用来使电路导通 从而来控制继电器的磁铁通电吸合内部的衔铁 其高低电平的触发其

随机推荐

  • Day6 - Python第三方模块xpinyin、faker、pymysql、Redis、rediscluster、xlrd、xlutils、openpyxl、request

    一 第三方模块 安装第三方模块 第一种方式 1 将pip命令加入到环境变量 且将python的安装目录下scripts目录加入到环境变量里面 2 pip install 数据库名称 pip install xpinyin python2 e
  • 用超级厉害的VS Code工具来嗨皮编程吧!

    用超级厉害的VS Code工具来嗨皮编程吧 目录 用超级厉害的VS Code工具来嗨皮编程吧 第一步 安装VS Code 第二步 插件宝藏等你来挖 1 装插件如虎添翼 3 快捷键 让编码更轻松 嗨皮 各位同行的学习小伙伴们 今天我来为你们介
  • 关于git cherry-pick

    项目开发过程中 经常遇到多分支的代码库管理 将提交的代码修改从一个分支转移到另一个分支是常见需求 这时分两种情况 一种情况 需要另一个分支的所有代码变动 那么就采用合并 git merge 另一种情况 只需要部分代码变动 某几个提交 这时可
  • Spring Cloud Alibaba,中国 Javaer 的福音,为微服务续上 18 年

    h2 Spring Cloud Alibaba 中国 Javaer 的福音 为微服务续上 18 年 nbsp h2 p 热 p p a href https my oschina net u 3820517 h4cd a nbsp 发布于
  • Vue指令 关于---v-html_指令 和 v-test_指令 详解

    要学会大大方方的表达爱意 爱不是冷冰冰 爱是炙热的 永远都是 笨蛋才会说反话 笨蛋才会把喜欢的人越推越远 一 在讲解 v test 指令 和v html 指令 前我么先回顾一些基本指令 v bind 单项绑定解析表达式 可简写为 xxx v
  • day6-列表的遍历,增删查改,比较运算,列表推导式,列表的相关函数

    列表基础学习 一 遍历列表 1 遍历列表 二 列表的增删查改操作 1 增 1 列表 append 元素 2 列表 insert 下标 元素 2 删 删除元素 1 del 列表 下标 2 列表 remove 元素 3 列表 pop 下标 列表
  • Win7、Win10系统封装后GHO文件太大?是因为虚拟内存没关、休眠文件没删!

    很多镜像文件封装好都是3 5g的 而最近我自己封装系统 封装完是8g 百度才知道是C盘有休眠文件大概5 4g 下图是我正在用的电脑删除休眠文件后的大小对比 删除休眠文件方法 1 在开始栏的 附件 里面找到 命令提示符 右击 以管理员身份运行
  • 文举论金:3.17黄金原油全面走势分析策略指导。

    市场没有绝对 涨跌没有定势 所以 对市场行情的涨跌平衡判断就是你的制胜法宝 欲望 有句意大利谚语 让金钱成为我们忠心耿耿的仆人 否则 它就会成为一个专横跋扈的主人 空头 多头都能赚钱 唯有贪心不能赚 是你掌控欲望还是欲望掌控你 古人云 不积
  • 使用eclipse创建一个图书管理系统(1)-----搭建架构

    目录 思维导图 图书管理系统的创建 第一步 搭建框架 使用者 第二步 搭建框架 被使用者 第三步 操作方法 第四步 main函数 思维导图 前言 昨天学了一下使用Java语言来写一个图书管理系统 于是今天写一篇博客作为一个小笔记巩固一下自己
  • git 打包两个版本差异

    git archive o update zip 当前版本号 git diff name only 上一版本号
  • QMainWindow和QWidget

    一 QMainWindow QmainWindow主窗口为用户提供一个应用程序框架 它有自己的布局 可以在布局中添加控件 在主窗口中可以添加控件 比如将工具栏 菜单栏 状态栏等添加到布局管理器中 窗口类型介绍 QMainWindow QWi
  • 人工智能技术发展历史

    人工智能 Artificial Intelligence 简称 AI 的历史可以追溯到上世纪50年代 以下是其中的关键点 1956年 达特茅斯会议 1956年 美国达特茅斯学院举办了一次会议 邀请了一些研究者共同探讨人工智能的概念 目标和方
  • 【NLP入门教程】三、词性标注

    词性标注 Part of Speech Tagging POS Tagging 是自然语言处理中的另一个基本任务 它涉及将文本中的每个词元 Token 标注为其对应的词性 如名词 动词 形容词等 词性标注有助于我们理解文本的语法结构 进而支
  • win10 家庭版系统安装docker desktop遇到那些坑

    最近开发中需要用到docker来打包镜像 由于我的电脑系统是win10 家庭版 而docker desktop针对win10系统只支持64 位的 Windows 10 专业版 企业版和教育版 我又不想重装系统 因为要重装一堆工具 太麻烦了
  • FILCO Majestouch Convertible 2 键盘连接电脑说明

    键盘连接新电脑频次比较低 每次都忘记了怎么操作 要去翻说明书 上网找方法 在此记录下圣手2代键盘连接新电脑或者切换电脑的连接方式
  • Python数据可视化matplotlib.pyplot的使用

    1 生成数据 安装matplotlib windows cmd中 pip install matplotlib 在Python环境下 使用import matplotlib检测是否安装成功 不报错就是安装成功 重启写py的工具就可以进行使用
  • 2020东京奥运会奖牌排行--数据可视化

    爬取数据1 1 数据来源 https 2020 cctv com medal list index shtml 数据为下面图片的表格数据 2 具体代码 2 1需要提前下载好的pip install 库名 from selenium impo
  • Windows 下 VSCode 使用 SSH 连接报 Bad owner or permissions on C:\\Users\\Administrator/.ssh/config 错误问题解决

    Windows 下 VSCode 使用 SSH 连接报 Bad owner or permissions on C Users Administrator ssh config 错误问题解决 vscode ssh 链接报错情况 解决方法 v
  • JAVA环境变量配置方法(Windows)

    编写一个JAVA程序后 如果想让自己编写的代码可以正常运行 我们便需要对它进行编译和运行 而Java环境变量的配置就显得尤为重要 本篇文章 我们来谈一谈关于Java环境变量配置的一些方法 目录 方法一 方法二 方法三 方法一 1 右击 我的
  • ARP协议

    什么是ARP 地址解析协议 即ARP Address Resolution Protocol 是根据IP地址获取物理地址的一个TCP IP协议 主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机 并接收返回消息 以此确定