计算机网络——ARP协议

news2024/11/20 14:15:26

前言

本博客是博主用于复习计算机网络的博客,如果疏忽出现错误,还望各位指正。

这篇博客是在B站掌芝士zzs这个UP主的视频的总结,讲的非常好。

可以先去看一篇视频,再来参考这篇笔记(或者说直接偷走)。

一条视频讲清楚什么是ARP协议-ARP攻击又是什么_哔哩哔哩_bilibili

前篇

  1. 计算机网络——MAC地址和IP地址-CSDN博客
  2. 计算机网络——交换机和路由器-CSDN博客
  3. 计算机网络——网络地址转换(NAT)技术-CSDN博客
  4. 计算机网络——TCP和UDP协议-CSDN博客
  5. 计算机网络——DHCP协议-CSDN博客

引言

想必大家时常会听到ARP协议、ARP攻击等概念。到底ARP协议是什么?

什么是ARP协议。

还是以写信举例子,经常写信的同学都知道,信封上有两个关键的字段需要填写,一个是收件人,一个是收件地址。

假设我只写收件人是张三,不知道张三的地址,那么这封信是无法寄到的。

在这种情况下,聪明的同学都会先打电话给张三,问一下张三的地址,然后填写到信封上,那么这封信就可以正常寄出了。

在网络世界中也是这样的,收件人就是IP地址,而收件地址就是MAC地址。

计算机每发出一包数据都需要填写数据链路层的源MAC、目标MAC和网络层的源IP、目标IP这四个参数。

一般情况下IP地址都是由用户指定的,源MAC是本机的,那目标MAC是如何获取的呢?

那就是ARP协议了。对应刚才举过的例子,ARP会帮我们打电话给目标IP并查询他的MAC地址。

所以总结一句话,ARP协议就是通过IP地址查询MAC地址的协议。

ARP帧结构

ARP帧结构的字段说明

下面是ARP数据帧的结构及各个字段的说明:

目的MAC地址(6字节):指示ARP请求或响应的目标设备的物理MAC地址。在ARP请求中,这个字段通常被设置为全0,表示请求的目标MAC地址未知。在ARP响应中,这个字段包含目标设备的真实MAC地址。

源MAC地址(6字节):指示ARP请求或响应的发送设备的物理MAC地址。

帧类型(2字节):指示数据帧中所携带的上层协议类型,对于ARP数据帧,该字段的值为0x0806。

硬件类型(2字节):指示硬件地址的类型,如以太网的硬件类型为1。

协议类型(2字节):指示上层协议类型,如IPv4的协议类型为0x0800。

硬件地址长度(1字节):指示硬件地址的长度,以字节为单位,如以太网的地址长度为6。

协议地址长度(1字节):指示协议地址的长度,以字节为单位,如IPv4地址的长度为4。

操作码(2字节):指示ARP请求或响应的类型,如请求为1,响应为2。

发送方硬件地址(6字节):指示ARP请求或响应的发送设备的物理MAC地址。

发送方协议地址(4字节):指示ARP请求或响应的发送设备的协议地址,如IPv4地址。

目标硬件地址(6字节):指示ARP请求或响应的目标设备的物理MAC地址。在ARP请求中,该字段通常被设置为全0,表示请求的目标MAC地址未知。在ARP响应中,该字段包含目标设备的真实MAC地址。

目标协议地址(4字节):指示ARP请求或响应的目标设备的协议地址,如IPv4地址。

要注意的是操作码(Opcode)字段,在ARP请求帧中,操作码字段的值为1,表示请求。而在ARP响应帧中,操作码字段的值为2,表示响应。目标MAC地址(Target MAC Address)字段,在ARP请求帧中,目标MAC地址字段被设置为全0,表示请求的目标MAC地址未知。而在ARP响应帧中,这个字段包含了目标设备的真实MAC地址。

ARP协议的工作流程

假设我们有一台计算机A它的IP地址是192.168.1.0。

现在计算机A需要向192.168.1.11发送一包UDP报文。

此时操作系统会把这一包UDP报文暂存,接着用ARP协议去查询对方的MAC地址。

主机A会通过网络向外广播一包ARP请求报文,请求报文中源MAC和源IP都是主机A的,目标MAC是要通过目标IP查询的,这时候,ARP协议中目标IP也就是192.168.1.11,目标MAC是一个全零的MAC地址。

注意这些是ARP协议的内容,属于网络层数据链路层的目标MAC地址是全F的地址,表示在数据链路层进行广播。

这一帧请求报文发出后会在网络中广播,网络中的所有计算机都可以收到这一帧请求报文。

收到报文的计算机会解析报文,查看目标IP地址。

如果跟自己的IP地址相同,那么说明自己需要对这一报文应答。

比如计算机B就是192.168.1.11,它收到后会生成一帧ARP回复报文,在回复报文中会填入自己的MAC地址。这一帧报文是使用单播的方式进行回复的。

回复报文被主机A收到后,从中解析出主机B的MAC地址,并把之前暂存的UDP数据取出,填入目标MAC地址后正常的发送,这样就完成了这帧UDP报文的发送。

当然并不是每次都需要执行这个查询步骤的,通过ARP协议查询到的MAC地址会写入到主机的ARP表中缓存起来,下次再往192.168.1.11发送数据,可以直接从ARP表中查询到其MAC地址即可。

若查询不到,才需要再执行上述的ARP查询步骤。

总结就是:

  1. 主机A需要发送数据到目标主机B,但只知道目标主机的IP地址。在发送数据之前,主机A首先检查本地的ARP缓存表,看是否已经有目标IP地址对应的MAC地址。如果有,则可以直接使用该MAC地址发送数据。
  2. 如果ARP缓存表中没有目标IP地址对应的MAC地址,主机A会发送一个ARP请求广播。ARP请求包含主机A的MAC地址、IP地址和目标IP地址,以及一个操作码,指示这是一个ARP请求。
  3. 所有收到ARP请求的主机都会检查目标IP地址是否与自己匹配。如果目标IP地址与自己匹配,则该主机会将自己的MAC地址作为响应发送给主机A。
  4. 主机A收到ARP响应后,会更新本地的ARP缓存表,将目标IP地址和MAC地址的映射关系存储起来。
  5. 主机A现在知道了目标主机B的MAC地址,可以使用该MAC地址发送数据包到目标主机B。
  6. 主机B收到数据包后,进行相应的处理和响应。

IP地址变更操作

比如当前网络中有3台主机,主机A、主机B和主机C,他们的IP分别是192.168.1.10 、192.168.1.11和192.168.1.12。

当前已经互相发现了对方,ARP表已经完成填充,并且通信也很正常。

这时我们把主机B和主机C的IP地址通过手动设置互换一下。

此时对于主机A来说,它的ARP表并没有发生变化,它将往192.168.1.11发送数据。

从ARP表查询到的是主机B的MAC地址,数据发送出去之后,这一帧数据会被送到主机B上。

实际上现在主机C的IP地址才是192.168.1.11,主机B收到这一帧数据后会直接丢弃。

实际上真实情况不是这样的。

我们先回到初始状态,在这种情况下,当设置完主机的IP地址后,操作系统会主动向网络中广播一包免费IP数据包。

这一包数据不需要回复,目的就是告诉网络中的所有其他主机,当前的IP地址和MAC地址的绑定关系。

每一台收到免费ARP的主机,自己更新自己的ARP表就好了。

这样网络中的其他设备几乎都能立即更新IP地址和MAC地址的映射关系了。

什么是ARP攻击?

假设我们现在有这么一个网络,这个网络中有多台计算机通过交换机互相通信,同时通过一台路由器连接到了互联网上。

假设路由器的IP地址是192.168.1.1,主机A的IP地址是192.168.1.10。

主机A所有访问互联网的数据包,不管是TCP协议还是UDP协议,都要通过路由器发送到互联网上。

也就是说在主机A上所有的数据包中,数据链路层的目标MAC地址都是路由器的MAC地址。

当然这个MAC地址也是通过ARP协议查询网关的IP192.168.1.1得到的。

假设此时网络中另一台主机,比如主机C它的IP是192.168.1.11,它一直在网络中广播一包免费ARP包,这帧IP报文中伪造了其IP地址是192.168.1.1(也就是路由器的MAC地址),MAC地址是自己这一帧,免费ARP包发送到网络中之后,相当于告诉网络中的其他主机192.168.1.1在我这里。

主机A收到后,按照我们上面讲的内容,主机A会误认为192.168.1.1的MAC地址改了,从而修改自己的ARP表。

这样所有正常通信的数据包填写的目标MAC地址都会变成主机C的MAC地址,这些数据包都会被发送到主机C上,从而导致主机A无法正常上网。

这就是一个典型的ARP攻击的案例。

发生ARP攻击后会导致网络中所有设备都无法正常访问。互联网防御ARP攻击是一件非常困难的事情,因为这种ARP欺骗报文无法有效的进行检测。

最简单的方法还是配置静态ARP,通过静态配置的方式将网关的IP地址和MAC地址绑定。这种方法虽然普通用户操作起来也有一定难度,但确实是最简单行之有效的方法。

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

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

相关文章

Javaweb监听器(Listener)

一、概念 1.Listener表示监听器。是Javaweb三大组件(Servlet、Filter、Listener)之一 2.优先级为监听器>过滤器>servlet 3.监听器可以监听就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性…

MySQ数据库: MySQL数据库的安装配置 ,图文步骤详细,一篇即可完成安装完成! MySQL数据库如何与客户端连接

LiuJinTao: 2024年4月14日 文章目录 MySQL的安装配置1. 下载2. 安装 三、 MySQL 启动与停止1. 第一种 方式:2. 第二种方式: 四、MySQL 客户端连接2. 方式二: MySQL的安装配置 1. 下载 官方下载网址:https://www.mysq…

2024蓝桥杯省赛C++软件算法研究生组题解+游记

A题 给你一个音游的游戏记录log.txt,判断玩家的最高连击数 题解 水题,但是要小心,miss的键需要重置k0,超时但正确的键重置k1 个人答案是9 B题 计算1~2024041331404202中有多少个数x满足x! - x*(x1)/2能被100整除 题解 首先…

数字乡村创新实践探索农业现代化与乡村振兴新路径:科技赋能农村全面振兴与农民幸福新篇章

随着信息技术的飞速发展,数字乡村成为推动农业现代化与乡村振兴的重要战略举措。科技赋能下的数字乡村创新实践,不仅提升了农业生产的智能化水平,也为乡村治理和农民生活带来了翻天覆地的变化。本文旨在探讨数字乡村创新实践在农业现代化与乡…

【vue】Vue3开发中常用的VSCode插件

Vue - Official:vue的语法特性,如代码高亮,自动补全等 Vue VSCode Snippets:自定义一些代码片段 v3单文件组件vdata数据vmethod方法 别名路径跳转 参考 https://www.bilibili.com/video/BV1nV411Q7RX

Java+vue2+springboot智慧班牌系统源码,支持PC端、移动客户端、电子班牌端,SaaS模式部署

智慧班牌作为一个班级的标识,也是班级空间日常管理的载体,作为班级文化展示交流窗口与学科教学、德育管理,以及学校信息収布等有机结合起来,作为学生展示的平台,又可应用于普及教育安全知识和科学文化,拓展…

JVM复习

冯诺依曼模型与计算机处理数据过程相关联: 冯诺依曼模型: 输入/输出设备存储器输出设备运算器控制器处理过程: 提取阶段:输入设备传入原始数据,存储到存储器解码阶段:由CPU的指令集架构ISA将数值解…

斯坦福DeepMindGoogle提出SAFE:大模型长篇事实检验新标杆

关注公众号【AI论文解读】回复或者发送:论文解读 获取本文论文PDF 引言:大型语言模型的长篇事实性挑战 在当今信息爆炸的时代,大型语言模型(LLMs)在处理开放式话题的事实性问题时,常常会产生包含事实错…

【进阶六】Python实现SDVRPTW常见求解算法——自适应大邻域算法(ALNS)

基于python语言,采用经典自适应大邻域算法(ALNS)对 带硬时间窗的需求拆分车辆路径规划问题(SDVRPTW) 进行求解。 目录 往期优质资源1. 适用场景2. 代码调整2.1 需求拆分2.2 需求拆分后的服务时长取值问题 3. 求解结果4…

基本的数据类型在16位、32位和64位机上所占的字节大小

1、目前常用的机器都是32位和64位的,但是有时候会考虑16位机。总结一下在三种位数下常用的数据类型所占的字节大小。 数据类型16位(byte)32位(byte)64位(byte)取值范围char111-128 ~ 127unsigned char1110 ~ 255short int / short222-32768~32767unsigned short222…

gitlab:Could not resolve host

fatal: unable to access http://xxx.git/: Could not resolve host: yyy Git-fatal: unable to access ‘https://gitlab.XX.git/‘: Could not resolve host: gitlab.XX.com.cn_drone unable to access .git/: could-CSDN博客 原因: 克隆的时候使用的是这里的HTT…

mysql题目5

tj11: select max(c.teacher_age) 最大的年龄 from tb_teacher c tj12: select a.class_name 班级名称,b.student_name 学生姓名,b.gender 学生性别 from tb_class a join tb_student b on a.class_idb.class_id join tb_teacher c on a.teacher_idc.teacher_id w…

复旦新出!大规模语言模型:从理论到实践,书籍PDF分享

自2018年以来&#xff0c;包含Google、OpenAI、Meta、百度、华为等公司和研究机构都纷纷发布了包括BERT&#xff0c; GPT等在内多种模型&#xff0c;并在几乎所有自然语言处理任务中都表现出色。 今天给大家推荐一本大模型方面的书籍<大规模语言模型&#xff1a;从理论到实…

Python学习笔记20 - 模块

什么叫模块 自定义模块 Python中的包 Python中常用的内置模块 第三方模块的安装与使用

虚拟机安装及拉取阿里云镜像

虚拟机安装及拉取阿里云镜像 1: 2: 3: 4: 5: 6: 7:这里设置为处理器核数的一半 8: 9: 10: 11: 12: 13: 14: 15: 16: 选好 光盘镜像文件后;点击关闭 按钮;然后选择完成 17: 18: 19: 20: 开始漫长的等待… 21: 点击完成配置,然后开始等待 22: 23: 24: 然后点击右下角的 完成配…

sc2024完善pay8001项目

1. 时间格式 package com.hong.entity;import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema;import java.math.BigDecimal; import java.util.Date; import javax.persistence.*;/*** 表名&#xff1a;t_pay* 表注释&…

分享一个预测模型web APP的功能模块和界面的设计

一个临床预测模型web APP功能模块与界面设计 随着医疗技术的不断进步&#xff0c;web APP是临床预测模型在医学领域的应用的重要形式。这里分享一个web APP的设计&#xff0c;手里有医学预测模型的可以尝试将其构建成webAPP&#xff0c;进而在临床实践中体验预测模型带来的便利…

Vitis HLS 学习笔记--优化循环启动间隔(II)

目录 1. 概述 2. 常规矩阵乘法 3. 数据依赖性和内存访问模式 4. 优化循环 5. 总结 1. 概述 Initiation Interval&#xff08;II&#xff09;定义为启动连续操作之间的时间间隔&#xff0c;以时钟周期为单位。低的II是高性能和高资源利用率的关键。 较高的II意味着在单位…

给你的AppImage创建桌面快捷方式

原文链接 https://www.cnblogs.com/HGNET/p/16396589.html 运行环境:Ubuntu 22.04 LTS 1.首先准备好AppImage文件并放在一个你知道的地方 2.打开终端&#xff0c;在/usr/share/applications下新建APP.desktop文件&#xff08;APP可以改成你的应用名称&#xff09; cd /usr/s…

PlantUML 实战示例(使用 PlantUML 画用例图、类图、活动图、时序图)

目录 前言 需求场景 用例图 类图 活动图 时序图 前言 在软件开发的生命周期中&#xff0c;需要先进行设计&#xff0c;最后才是进行具体的编码和测试。设计时就需要画各种 UML 图&#xff0c;有专业的 UML 画图软件&#xff0c;也有很多在线的 UML 画图网站可以来画图&a…