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地址是否冲突。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

浅谈 USB Bulk 深入浅出 (3) - USB Bulk 装置传输的注意事项

来源:大大通 作者:冷氣團 1 USB Bulk 是什么 USB 是即插即用使用差动信号的装置界面,是以 端点 ( Endpoint ),做为传输装置的输出入端,透过不同的端点 ( Endpoint ) 和模式,来进行与装置的沟通&#xff…

WWW 指南-万维网联盟(World Wide Web)

WWW - 万维网联盟 WWW通常称为网络。 web是一个世界各地的计算机网络。 电脑在Web上使用标准语言沟通。 万维网联盟(W3C)制定了Web标准 什么是WWW? WWW 代表 World Wide Web(万维网)万维网常常被称为 网络网络是世界各地的计算机网络网络中…

nestjs守卫/全局守卫校验jwt

一、守卫 目标 部分接口需要用户登录后才可以访问,用户登录后可以颁发 jwt_token 给前端,前端在调用需要鉴权的接口,需要在请求头添加 jwt_token,后端校验通过才能继续访问,否则返回403无权访问 创建守卫 anth 安装…

java.lang.NegativeArraySizeException

构建maven项目时发生的异常 maven-resources-production:gci-system-start:java.lang.NegativeArraySizeException:-1972174848解决方案 先将 target 目录删除,然后重新构建项目即可

【从零开始学习JVM | 第九篇】了解 常见垃圾回收器

前言: 垃圾回收器(Garbage Collector)是现代编程语言中的一项重要技术,它提供了自动内存管理的机制,极大地简化了开发人员对内存分配和释放的繁琐工作。通过垃圾回收器,我们能够更高效地利用计算机的内存资…

基于pandoraNext使用chatgpt4

1.登陆GitHub 获取pandoraNext项目GitHub - pandora-next/deploy: Pandora Cloud Pandora Server Shared Chat BackendAPI Proxy Chat2API Signup Free PandoraNext. New GPTs(Gizmo) UI, All in one! 在release中选择相应版本操作系统的安装包进行下载 2.获取license_…

【OS】操作系统总复习笔记

操作系统总复习 文章目录 操作系统总复习一、考试题型1. 论述分析题2. 计算题3. 应用题 二、操作系统引论(第1章)2.1 操作系统的发展过程2.2 操作系统定义2.3 操作系统的基本特性2.3.1 并发2.3.2 共享2.3.3 虚拟2.3.4 异步 2.4 OS的功能2.5 OS结构2.5 习…

聊聊Java中的常用类String

String、StringBuffer、StringBuilder 的区别 从可变性分析 String不可变。StringBuffer、StringBuilder都继承自AbstractStringBuilder ,两者的底层的数组value并没有使用private和final修饰,所以是可变的。 AbstractStringBuilder 源码如下所示 ab…

鸿蒙ArkTS Web组件加载空白的问题原因及解决方案

问题症状 初学鸿蒙开发,按照官方文档Web组件文档《使用Web组件加载页面》示例中的代码照抄运行后显示空白,纠结之余多方搜索后扔无解决方法。 运行代码 import web_webview from ohos.web.webviewEntry Component struct Index {controller: web_webv…

MuMu模拟器12如何连接adb?

一、MuMu模拟器12端口查看 MuMu模拟器12现已支持adb同时连接多个模拟器进行调试的操作,可以参考以下步骤操作,查看MuMu模拟器12本体以及多开模拟器的adb端口: 单开的MUMU模拟器12可通过模拟器右上角菜单-问题诊断,获取ADB调试端…

VM-Linux 桥接网络设置

VM-Linux 桥接网络设置 文章目录 VM-Linux 桥接网络设置什么是桥接网络环境工具关键配置VM设置CentOS7配置 什么是桥接网络 网络桥接是将两个或多个独立的网络进行连接的一种方法。它可以把两个网络的数据传输机制集成在一起,使得用户可以更顺畅地访问各个网络&…

Linux实操——安装Mysql

安装Mysql 一、检查是否已经安装了mariadb数据库,并卸载二、下载mysql包,并通过ftp上传到服务器三、解压安装包四、创建数据存储文件夹五、创建执行mysqld命令的用户,并初始化mysql六、启用传输安全七、启动mysql,验证是否安装成功 总结 博主…

stm32F407-GPIO的使用——点亮LED并且讲解各个寄存器

stm32F407-GPIO的使用——点亮LED并且讲解各个寄存器 本文为stm32GPIO的介绍与使用,例子是简单的LED点亮。 一、 GPIO GPIO(General Purpose I/O Ports)意思为通用输入/输出端口,通俗地说, 就是一些引脚,可…

数据结构第六课 -------迭代排序(快速排序和归并排序)

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

linux 调试工具 GDB 使用

gdb是linux下常用的代码调试工具,本文记录常用命令。 被调试的应用需要使用 -g 参数进行编译,如不确定可使用如下命令查看是否支持debug readelf -S filename | grep "debug" 启动调试 gdb binFile 例如要调试sshd: 调试带参数…

【淘宝网消费类电子产品销售数据可视化】

淘宝网消费类电子产品销售数据可视化 引言数据爬取与处理数据可视化系统功能1. 总数据量分析2. 店铺总数据3. 店铺销售额排名4. 不同电子商品销售价格5. 单个商品价格排名6. 不同省份平均销量7. 不同地区的平均销售额8. 省份数量9. 每个省份有用的平均个数 创新点结语 引言 随…

平头哥玄铁 E902 编译与使用

玄铁 E902 是平头哥半导体有限公司自主研发的极低功耗、极低成本嵌入式 CPU 核,以 8 位 CPU 的成本获得 32 位嵌入式 CPU 的运行效率与性能。 E902 兼容 RISC-V 指令架构,采用 16/32 位混合编码系统,指令系统与流水线硬件结构精简高效&#x…

单片机的低功耗模式介绍

文章目录 简介一、功耗来源说明1.1、芯片工作模式1.2、静态损耗1.3、I/O额外损耗1.4、动态损耗 二、功耗如何测量三、降低功耗有什么方法3.1、选取合适的芯片工作模式3.2、降低工作频率3.3、关闭不需要使用的外设3.4、 降低静态电流损耗3.5、 周期采集供电3.6、 设置IO口状态 四…

Visual Studio Code (Vscode)配置LaTeX

Visual Studio Code (Vscode)配置LaTeX 实操记录 第一步高效检索,找到官方的、靠谱的安装教程,最好多找几个,英文、中文教程都需要 LaTeX WorkshopInstallation and basic settingsHow to install LaTeX (with previews & autocomplete…

RK3568全国产化多网口板卡带poe供电,支持鸿蒙麒麟系统

信迈XM-3568-01主板采用瑞芯微RK3568四核Cortex-A55 处理器,主频最高可达2.0GHz,效能有大幅提升最高可配8GB内存容量,频率高达1600MHz;支持全链路ECC,让数据更安全可靠配置双千兆自适应RJ45以太网口,并扩展…