TCP/IP详解——ARP 协议

文章目录

  • 一、ARP 协议
    • 1. ARP 数据包格式
    • 2. ARP 工作过程
    • 3. ARP 缓存
    • 4. ARP 请求
    • 5. ARP 响应
    • 6. ARP 代理
    • 7. ARP 探测IP冲突
    • 8. ARP 协议抓包分析
    • 9. ARP 断网攻击
    • 10. 总结

一、ARP 协议

ARP(Address Resolution Protocol)协议工作在网络层和数据链路层之间,通常被认为是一个跨两层的协议。

当网络设备有数据要发送给另一台网络设备时,必须要知道对方的网络层地址(即IP地址)。IP地址由网络层来提供,但是仅有IP地址是不够的,IP数据报文必须封装成帧才能通过数据链路进行发送。数据帧必须要包含目的MAC地址,因此发送端还必须获取到目的MAC地址。通过目的IP地址来获取目的MAC地址的过程是由ARP(Address Resolution Protocol)协议来实现的

image-20230719110609039

1. ARP 数据包格式

image-20230719110733692

说明

  • Hardware Type:表示硬件地址类型,一般为MAC地址。它的值为1表示以太网地址
  • Protocol Type:表示三层协议地址类型,一般为IP。它的值为0x0800即表示IP地址。它的值与包含IP数据报的以太网数据帧中的类型字段的值相同。
  • Hardware LengthProtocol Length:表示MAC地址和IP地址的长度,单位是字节。值分别是6和4。(6 * 8=48,4 * 8 = 32)
  • Operation Code指定了ARP报文的类型,包括ARP RequestARP Reply。(1为ARP请求,2为ARP应答)
  • Source Hardware Address:指的是发送ARP报文的设备MAC地址(源MAC地址)
  • Source Protocol Address:指的是发送ARP报文的设备IP地址(源IP地址)。
  • Destination Hardware Address:指的是接收者MAC地址,在ARP Request报文中,该字段值为0(目的MAC地址)。
  • Destination Protocol Address:指的是接收者的IP地址(目的MAC地址)。

ARP Request 请求包

image-20231118151145102

ARP请求是广播包,并且数据包长度不够的话会补齐,最小长度是46,但是正常的ARP只有28,所以会使用PAD字段进行补齐。

image-20231118211440760

image-20231118154420384

ARP Reply 响应包

image-20231118151252217

ARP响应是单播

image-20231118153922513

2. ARP 工作过程

image-20230719111056258

通过ARP协议,建立目的IP地址和MAC地址的映射。通过网络层获取目的IP地址还要判断目的MAC地址是否已知。如在主机A发送数据给主机C时,首先获取主机C的MAC地址。同时主机B是看不到主机A和主机C之间的单播包的。

3. ARP 缓存

image-20230719111127528

image-20230719112616449

存放IP地址和MAC地址关联信息

  • 发送信息前,查找ARP缓存表,存在对方MAC地址,直接封装成帧。如果不存在,通过发送 ARP Request报文获取对方MAC地址。如果目标在其他网络,源设备会先查找网关MAC地址,将数据发给网关,再转发。
  • IP和MAC关系映射关系会放入ARP缓存表一段时间,有效期内都可查到,过了这个有效期会自动删除

Windows查看ARP缓存表

arp -a

image-20231118151940222

清空ARP表

arp -d

4. ARP 请求

image-20230719111427578

主机A 的 ARP 缓存表中不存在主机C 的 MAC 地址,所以主机A 会发送 ARP Request 来获取目的 MAC 地址。

ARP Request 报文封装在以太帧里。帧头中的源MAC地址为发送端主机A 的 MAC 地址。

此时,由于主机A不知道主机C 的 MAC 地址,所以目的 MAC 地址为广播地址 FF-FF-FF-FF-FF-FF。(注意:目的 MAC 地址FF-FF…是帧头部中的,目的 MAC 地址00-00…是 ARP 请求包中里的内容。)

ARP Request 报文中包含源 IP 地址、目的 IP 地址、源 MAC 地址、目的 MAC 地址,其中目的 MAC 地址的值为0。

ARP Request 报文会在整个网络上传播(广播),该网络中所有主机包括网关都会接收到此 ARP Request 报文。所有设备收到 ARP 请求后,主机C 检查请求中的目标 IP 地址是否与自己的 IP 地址匹配。如果匹配,主机C 会发送一个ARP 响应给主机 A(单播)。主机A 接收到主机C 的 ARP 响应后,会将主机C 的 IP 地址和 MAC 地址的映射关系存储在自己的 ARP 缓存表中,以便将来的通信中使用。

网关将会阻止该报文发送到其他网络上

5. ARP 响应

image-20230719111919845

image-20230719112158710

主机C会向主机A回应ARP Reply报文。ARP Reply报文中的源协议地址是主机C自己的IP地址,目标协议地址是主机A的IP地址,目的MAC地址是主机A的MAC地址,源MAC地址是自己的MAC地址,同时Operation Code被设置为Reply(Operation Code:指定了ARP报文的类型,包括ARP Request和ARP Reply。)。ARP Reply报文通过单播传送。

这样主机A就可以拿到主机C的mac地址,从而封装报文进行数据发送。

ARP请求

  • 帧头的目的MAC用广播形式进行发送,ARP请求包中的目的MAC值为0,操作类型为Request。同时,网关会阻止该报文发送到其他网络。
  • 所有主机收到后,会检查IP地址是否匹配,不匹配则不响应,匹配后主机C把源MCA和IP地址将记录到自己ARP缓存表中。发送ARP Reply进行响应。

ARP响应

  • 向主机A发送的ARP Reply报文,源地址和源MAC都是主机C的地址,操作类型为Reply,以单播形式传送。
  • 主机A收到Reply报文后,检查MAC地址是否匹配,然后将源MAC和源IP地址记录主机A的ARP缓存表中。

6. ARP 代理

在某些情况下,网络中可能会存在ARP代理。ARP代理是一种允许一个设备(代理)代表其他设备进行ARP请求和响应的网络配置模式。当一个设备需要发送数据到另一个子网或者在本地网络上没有直接连接的目标主机时,它可以将ARP请求发送给代理设备。

image-20230719112546644

说明

  • 同一网段,不同物理网络上的计算机之间,通过ARP代理进行相互通信,默认所有的路由器是不开起ARP代理的。因为路由器无法转发广播报文,主机B收不到ARP Request报文,也无法进行应答。

  • 路由开启代理ARP功能后,路由器收到ARP Request报文后会先去查找路由表,如果存在主机B的路由表,那么路由器会把自己的G0/0/0接口作为MAC地址回应主机A。主机A通过该MAC地址进行数据转发。

  • 主机A 在子网A 中发送一个ARP请求,用来寻找子网B 中的主机B 。路由器R 作为ARP代理收到了ARP请求,这个时候路由器R 会先去查找路由表,发现没有主机B 路由表。然后会在子网B中发送一个ARP请求,寻找主机B的MAC地址。主机B在收到ARP请求后,发送ARP响应,其中响应包中包含了主机B的MAC地址。而路由器收到主机B的ARP响应后,会把自己的G0/0/0接口MAC地址信息返回给主机A,完成ARP代理的全部过程。

ARP协议的一个特性是“后到优先

  • 在某些网络环境中,使用ARP代理可以允许多个设备对同一个IP地址进行ARP请求和响应。当多个设备同时发送ARP请求时,代理设备会收到多个ARP请求,并根据其自身的优先级规则进行处理。具体而言,在ARP代理中,后到的ARP请求会覆盖先前的ARP请求,从而实现"后到优先"的特性。
  • 这意味着,如果有多个设备对同一个IP地址发送ARP请求,只有最后一个到达的设备的ARP响应会被接受并记录在ARP缓存中。其他先前的ARP响应将被忽略。因此,后到的设备将成为该IP地址的代理,并负责处理与该IP地址相关的数据包。

image-20231127151816523

在配置路由的时候,如果只写出接口的话就会存在ARP代理的“后到优先”。

上图中R2先进行了ARP回复,那么路由器R1作为ARP代理会记录的是R2路由器的MAC地址。如果路由器R3在之后回复路由器R1,那么后到的会覆盖先前回复的。

7. ARP 探测IP冲突

当局域网中的某台主机被分配了IP地址或者IP地址发生变更后,必须立刻检测其所分配的IP地址在网络上是否是唯一的,以避免地址冲突。主机通过发送ARP Request报文来进行地址冲突检测。

如下:主机A将ARP Request广播报文中的目的IP地址字段设置为自己的IP地址,且该网络中所有主机包括网关都会接收到此报文。当目的IP地址已经被某一个主机或网关使用时,该主机或网关就会回应ARP Reply报文。通过这种方式,主机A就能探测到IP地址冲突了。

image-20230719113036351

8. ARP 协议抓包分析

开启虚拟机,该虚拟机的网卡设置为桥接。

image-20231118150855033

真实机开始 ping 虚拟机的 IP 地址。

image-20231118150907277

同时Wireshark抓包

image-20231118150952386

9. ARP 断网攻击

ARP欺骗原理

在局域网中,主机通信前必须通过ARP协议把IP地址转换为MAC地址,ARP欺骗就是通过伪造IP地址与MAC地址的映射关系实现的一种欺骗攻击。因为局域网内的主机根据MAC地址进行通信,发送方检查其ARP缓存中是否已存储目标IP的MAC地址,否则它会广播发送ARP请求报文,只有目标IP的主机才会响应一个包含其MAC地址的ARP应答报文,发送方收到该应答后,立即更新自身的ARP缓存。攻击者可以发送虚假的ARP请求或应答报文,使得目标主机接收错误的IP和MAC绑定关系。

image-20230707203119205

流程:pc1想与pc2通信时,先在arp缓存表(arp -a)中查看pc2(10.9.136.55)的mac地址,若没有,则会发送广播包:”谁是10.9.136.55“给交换机,交换机给每个端口都会广播发送一个请求包:”谁是10.9.136.55“,正常来说只有pc2会收到这个请求包然后会发送一个应答包:“我是10.9.136.55,我的mac地址是mac2”发送给交换机,交换机会发送给pc1,因为是pc2应答pc1的应答包,pc1接收到应答包后会更新自己的arp缓存表。

arp缓存表中存入了大量的IP地址与MAC地址的映射。

image-20230707192649623

ipconfig /all # 查看网关接口

image-20230707194134274

arp -a #mac地址缓存表(ip地址与mac地址映射表)

找到网关的MAC地址。

image-20230707194335154

现在通过网关访问百度,必然要和路由器进行通信。局域网里面的通信会先去arp缓存表中查找有没有网关对应的MAC地址。

本来和网关是不能通信的,现在通过ARP广播找到了网关的IP地址和MAC地址映射到ARP缓存表中。

攻击者可以发送虚假的ARP请求或应答报文,使得目标主机接收错误的IP和MAC绑定关系。那么发送给百度的数据就不再走网关了,而是到攻击者那里。如果攻击者拦截数据包不进行转发的话,本机就会断网。

攻击实验

win7中的网关是192.168.188.2

image-20230707200209873

对应网关的MAC地址

image-20230707200328724

然后开始ping百度,这个时候可以一直ping

image-20230707200429890

通过kali发起ARP断网攻击,开启终端输入命令如下:

arpspoof -i etho -t 192.168.188.130 -r 192.168.188.2

说明

  • arpspoof:是一款进行arp欺骗的工具,攻击者可以通过它来毒化受害者arp缓存,将网关mac替换为攻击者mac,然后攻击者可截获受害者发送和收到的数据包,可获取受害者账户、密码等相关敏感信息。

  • -i:指定要使用的接口(即指定一块网卡)。

  • etho:这个网卡和网关属于同一网段的。

  • -t:是要攻击的IP地址(这里是Win7的IP地址)。

  • -r:是网关的IP地址。

image-20230707200809771

发起攻击

image-20230707201227394

发起攻击后Win7已经不能和百度进行通信了

image-20230707201240007

检查Win7的ARP缓存表

image-20230707201451792

之前网关对应的MAC地址是00-5a-56-ee-91-e6,而现在对应的是00-0c-29-70-2e-59。而这个00-0c-29-70-2e-59MAC地址正是Kali的MAC地址。

预防措施

  1. 客户端静态绑定网关的真实MAC地址。
  2. 在交换机和路由器上设置端口与MAC地址的静态绑定。
  3. 定期检测自身的ARP缓存,检测是否有MAC地址相同的不同表项,即可发现异常。
  4. 使用防火墙持续监控ARP缓存,检测异常变化。

10. 总结

  • 网络设备在什么情况下发送ARP Request

    • 源设备在发送数据给目的设备前,会首先查看自身的ARP缓存,查找ARP缓存中是否存在目的设备的IP地址和MAC地址的映射。如果存在则直接使用,如果不存在则会发送ARP Request。
  • 网络设备什么时候产生免费ARP

    • 当网络上的一个设备被分配了IP地址或者IP地址发生变更后,可以通过免费ARP来检查IP地址是否冲突。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/222317.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CCF编程能力等级认证GESP—C++2级—20230923

CCF编程能力等级认证GESP—C2级—20230923 单选题(每题 2 分,共 30 分)判断题(每题 2 分,共 20 分)编程题 (每题 25 分,共 50 分)⼩杨的 X 字矩阵数字⿊洞 答案及解析单选题判断题编程题1编程题…

使用Docker本地安装部署Draw.io绘图工具并实现远程访问协作办公

前言 提到流程图,大家第一时间可能会想到Visio,不可否认,VIsio确实是功能强大,但是软件为收费,并且因为其功能强大,导致安装需要很多的系统内存,并且是不可跨平台使用。所以,今天给…

电脑开机出现:CLIENT MAD ADDR (网卡启动系统)的解决办法

文章目录 前言步骤1、确定情况2、对症下药——关闭网卡启动 补充1、关于BIOS2、关于PXE 前言 最近给旧电脑重装系统安了下开发环境和常用软件啥的,之前还好好启动的电脑,开机突然需要额外加载一个页面,虽然最后正常启动了不影响使用&#xf…

Qt5 CMake环境配置

Qt5 CMake环境配置 设置Qt路径 有两种方法 Qt5_DIR,使用这个变量,必须把路径设置到Qt5Config.cmake所在文件夹,也就是安装目录下的lib/cmake/Qt5CMAKE_PREFIX_PATH,只需要设置到安装目录就可以了,这个目录就是bin、…

OpenStack和Docker结合?为何现在流行?

为何现在流行OpenStack和Docker结合? 结合的好处 1、资源管理与调度灵活: OpenStack提供了完善的虚拟机管理能力,而Kubernetes(使用Docker作为容器运行环境)在容器调度方面非常高效。将两者结合,可以实现…

RNN介绍及Pytorch源码解析

介绍一下RNN模型的结构以及源码,用作自己复习的材料。 RNN模型所对应的源码在:\PyTorch\Lib\site-packages\torch\nn\modules\RNN.py文件中。 RNN的模型图如下: 源码注释中写道,RNN的数学公式: 表示在时刻的隐藏状态…

ES6学习(三):Set和Map容器的使用

Set容器 set的结构类似于数组,但是成员是唯一且不会重复的。 创建的时候需要使用new Set([])的方法 创建Set格式数据 let set1 new Set([])console.log(set1, set1)let set2 new Set([1, 2, 3, 4, 5])console.log(set2, set2) 对比看看Set中唯一 let set3 new Set([1, 1,…

多架构容器镜像构建实战

最近在一个国产化项目中遇到了这样一个场景,在同一个 Kubernetes 集群中的节点是混合架构的,也就是说,其中某些节点的 CPU 架构是 x86 的,而另一些节点是 ARM 的。为了让我们的镜像在这样的环境下运行,一种最简单的做法…

Rust语言基础语法使用

1.安装开发工具: RustRover JetBrains: Essential tools for software developers and teams 下载: RustRover: Rust IDE by JetBrains 下载成功后安装并启动RustRover 安装中文语言包插件 重启RustRover生效

vue3引入echarts正确姿势

echarts文档地址: echarts官网地址 echarts配置手册 echarts 模板地址 1、安装 (1)安装echarts包 npm install echarts --save 或者 cnpm install echarts --save(2)安装vue echarts工具包 npm install echart…

持续集成交付CICD:Jenkins使用基于SaltStack的CD流水线下载Nexus制品

目录 一、理论 1.salt常用命令 二、实验 1.SaltStack环境检查 2.Jenkins使用基于SaltStack的CD流水线下载Nexus制品 二、问题 1.salt未找到命令 2.salt简单测试报错 3. wget输出日志过长 一、理论 1.salt常用命令 (1)salt 命令 该 命令执行s…

蓝牙物联网智慧物业解决方案

蓝牙物联网智慧物业解决方案是一种利用蓝牙技术来提高物业管理和服务效率的解决方案。它通过将蓝牙技术与其他智能设备、应用程序和云服务相结合,为物业管理和服务提供更便捷、高效和智能化的支持。 蓝牙物联网智慧物业解决方案包括: 1、设备管理&#…

JupyterNotebook安装依赖 使用conda环境

怎么使用JupyterNotebook安装依赖?(使用conda环境?) 预装的jupyter中有conda,可以进入终端执行相关命令 预装的Jupyter,目标用户是轻度的Jupyter用户,如果想使用conda的多环境等高级功能&#x…

Unity中的ShaderToy

文章目录 前言一、ShaderToy网站二、ShaderToy基本框架1、我们可以在ShaderToy网站中,这样看用到的GLSL文档2、void mainImage 是我们的程序入口,类似于片断着色器3、fragColor作为输出变量,为屏幕每一像素的颜色,alpha一般赋值为…

微信小程序单图上传和多图上传

图片上传主要用到 1、wx.chooseImage(Object object) 从本地相册选择图片或使用相机拍照。 参数 Object object 属性类型默认值必填说明countnumber9否最多可以选择的图片张数sizeTypeArray.<string>[original, compressed]否所选的图片的尺寸sourceTypeArray.<s…

从开源项目中学习如何自定义 Spring Boot Starter 小组件

前言 今天参考的开源组件Graceful Response——Spring Boot接口优雅响应处理器。 具体用法可以参考github以及官方文档。 基本使用 引入Graceful Response组件 项目中直接引入如下maven依赖&#xff0c;即可使用其相关功能。 <dependency><groupId>com.feiniaoji…

螺旋矩阵算法(leetcode第59题)

题目描述&#xff1a; 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。示例 1&#xff1a;输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]] 示例 2&#xff1a;输入&#…

电商API代码如何接入写

要接入一个API&#xff0c;通常需要遵循以下步骤&#xff1a; 1. 【了解API文档】&#xff1a;首先&#xff0c;需要了解你想要接入的API的文档。这些文档通常会包含关于如何使用该API的重要信息&#xff0c;比如基本的请求格式、可用的端点&#xff08;endpoints&#xff09;…

Process On在线绘制流程图

目录 一.ProcessOn 1.1.介绍 1.2.直接网上使用 二.绘制门诊流程图 三.绘制住院流程图 四.绘制药库采购入库流程图 五.绘制OA会议流程图 今天就到这里了哦!!!希望能帮到你哦&#xff01;&#xff01;&#xff01; 一.ProcessOn 1.1.介绍 ProcessOn&#xff08;流程&#…

Linux,Web网站服务(一)

1.准备工作 为了避免发生端口冲突&#xff0c;程序冲突等现象&#xff0c;建议卸载使用RPM方式安装的httpd [rootnode01 ~]# rpm -e http --nodeps 挂载光盘到/mnt目录 [rootnode01 ~]# mount /dev/cdrom /mnt Apache的配置及运行需要apr.pcre等软件包的支持&#xff0c;因此…