以太网ARP协议解析

news2024/11/19 17:49:40

一、什么是ARP协议

        ARP协议,全称是Address Resolution Protocol,即地址解析协议。

        ARP协议的作用,就是在已知目标设备的IP地址但是不知道其MAC地址的时候,根据IP地址,获取到其MAC地址,以便组成完整的IP包进行通信。

        完整的IP数据包,由目标MAC、源MAC、目标IP、源IP等等信息组成。关于IP协议包部分,后面我们再讨论,本文只讨论怎么根据IP地址获取MAC地址。

        完整的ARP协议包含两部分,ARP请求和ARP应答。

        下图是ARP请求的示意图,主机AIP地址为192.168.1.102,需要获取192.168.1.10这个IP地址的设备的MAC地址,便会以单播的形式发送ARP请求包。

        下图是ARP应答的示意图。主机B的IP地址刚好为192.168.1.10,那么他收到ARP请求包后,会返回ARP应答包,该数据包中包含主机B的MAC地址。

二、ARP 协议结构

        ARP数据包的格式如下图:

具体解析如下:

名称字节数数值含义
硬件类型2字节0x0001硬件地址的类型,此处应为以太网硬件,固定为0x0001
协议类型2字节0x0800要映射的协议地址类型。ARP 协议的上层协议是IP协议,即获取IP协议的MAC地址,此处为IP协议类型,即0x0800。
硬件地址长度1字节0x06MAC 地址长度,MAC地址固定6个字节
协议地址长度1字节0x04IP 地址的长度,固定为4个字节
OP2字节/操作码,0x0001表示ARP请求,0x0002表示ARP应答
源MAC地址6字节/发送端的MAC地址,比如0x0011_2233_4455
源IP地址4字节/发送端的IP地址,比如192.168.1.10
目的MAC地址6字节0x0000_0000_0000目标设备的MAC地址,由于此地址未知,此处应该是0x0000_0000_0000
目的IP地址4字节/目标设备的IP地址

        这里需要注意的是,由于以太网协议中有效数据最少是46字节,而ARP数据包总共为28字节,因此为了满足以太网传输的要求,需要填充18个字节的数据(一般填充0x00)。

三、ARP协议在以太网协议中的组帧

根据以太网协议的格式,参考文章:

以太网帧格式解析-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/yindq1220/article/details/138027595?spm=1001.2014.3001.5502将ARP数据摆放到以太网协议中,形成下图的格式。

 准确的字段描述可以参考下表:

协议类型名称字节数数值含义
数据同步前导码7字节0x55_5555_5555_5555
帧起始界定符1字节0xD5
以太网协议目的MAC地址6字节/
源MAC地址6字节/
长度/类型2字节/
ARP 协议硬件类型2字节0x0001
协议类型2字节0x0800
硬件地址长度1字节0x06
协议地址长度1字节0x04
OP2字节/
源MAC地址6字节/
源IP地址4字节/
目的MAC地址6字节0x0000_0000_0000
目的IP地址4字节/
18字节的填充18字节0x00
以太网协议校验FCS4字节/

 

四、实际举例

        下图是从wiresharkz中抓包的ARP请求和ARP应答包。

        主机192.168.10.151请求主机192.168.10.100的MAC地址。然后主机192.168.10.100返回其MAC地址为E880_88BA_9F36。

​​

ARP请求包的具体数据如下:

​​

将数据带入到ARP协议的以太网帧中,表示如下:

协议类型名称字节数数值含义
以太网协议目的MAC地址6字节0xFFFF_FFFF_FFFF广播MAC地址
源MAC地址6字节0x0006_7743_EB39
长度/类型2字节0x0806ARP协议
ARP 协议硬件类型2字节0x0001
协议类型2字节0x0800请求IP协议的MAC地址,为IP协议类型
硬件地址长度1字节0x06
协议地址长度1字节0x04
OP2字节0x0001ARP请求
源MAC地址6字节0x0006_7743_EB39
源IP地址4字节0xC0A8_0A97发送端的IP地址:192.198.10.151
目的MAC地址6字节0x0000_0000_0000未知目标的MAC地址,因此为全0
目的IP地址4字节0xC0A8_0A64目标的IP地址:192.168.10.100
18字节的填充18字节0x00填充18字节0,

ARP应答包具体数据如下:

​​

将数据带入到ARP协议的以太网帧中,表示如下:

协议类型名称字节数数值含义
以太网协议目的MAC地址6字节0x0006_7743_EB39目标MAC地址
源MAC地址6字节0xE880_88BA_9F36源MAC地址
长度/类型2字节0x0806ARP协议
ARP 协议硬件类型2字节0x0001
协议类型2字节0x0800请求IP协议的MAC地址,为IP协议类型
硬件地址长度1字节0x06
协议地址长度1字节0x04
OP2字节0x0002ARP应答
源MAC地址6字节0xE880_88BA_9F36
源IP地址4字节0xCA08_0A64源IP地址:192.168.10.100
目的MAC地址6字节0x0006_7743_EB39
目的IP地址4字节0xC0A8_0A97源IP地址:192.168.10.151
18字节的填充18字节0x00此处正常应该有18个字节的填充,但是电脑的ARP应答中未增加此填充。我们自己做设计的时候,建议还是按照标准协议,增加上18字节的填充。

        PS.在wireshark抓包中,未抓取网卡处理前的数据,只抓取了网卡处理后的数据。所以我们在报文中没有看到前导码+帧起始界定符+校验序列(此三部分字段一般在网卡的MAC控制器中处理)。

 

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

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

相关文章

profinet协议基础

文章目录 工业以太网自动化通讯金字塔工业以太网技术比较 profinet概述profinet特性 EtherNet通信EtherCAT通信EtherCat特性EtherCat过程同步 工业以太网 工业以太网是基于IEEE 802.3 (Ethernet)的强大的区域和单元网络。 自动化通讯金字塔 各个组织与工业以太网 工业以太网…

2024.4.25

#include <iostream> #include <iomanip> using namespace std; class Person{const string name;int age;char sex; public:Person(const string name):name(name){cout << "第一个Person构造函数" << endl;}Person():name("zhangsan&…

面试经典150题——路径总和

​ 1. 题目描述 2. 题目分析与解析 2.1 思路一 注意题目的关键点&#xff1a;判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;起点是root&#xff0c;终点是叶子节点。 那么我们就可以从根节点按照层序遍历的方式&#xff0c;从根节点从根到 叶子不断对路径进行加…

javaSE(九):线程

目录 一、程序,进程,线程 1.概念 2.三者之间的关系&#xff1a; 二、创建线程 ①继承Thread类的方式 ②实现Runnable接口的方式 三、Thread类中方法 1.常用方法 2.线程优先级 四、线程状态 ①线程在它的生命周期中会处于不同的状态 ②线程的状态 五、多线程 1.概念…

君正X2100 RTOS 固件升级

使用cloner工具烧写固件需要在上电之前让boot_sel[2:0]处于boot from USB模式&#xff0c;但是电路板装在机壳内部后不方便改变boot_sel[2:0]的状态&#xff0c;如果要升级固件&#xff0c;需要通过机壳留出的USB口、网口、或者无线网络进行固件更新。 一、升级方案 1、固件分…

vivado Versal 串行 I/O 硬件调试流程、使用 Vivado Serial I/O Analyzer 来调试设计

Versal 串行 I/O 硬件调试流程 Versal ™ ACAP 无需再生成 IBERT IP &#xff0c; 因为使用系统内串行 I/O 调试所需的必要逻辑现已集成到 GTY 收发器架构内。使 用 GTY 收发器的任何设计均可用于串行 I/O 硬件调试。 Versal 串行 I/O 硬件调试流程具有 2 个不同阶…

10.JAVAEE之网络编程

1.网络编程 通过网络,让两个主机之间能够进行通信 >基于这样的通信来完成一定的功能进行网络编程的时候,需要操作系统给咱们提供一组 AP1, 通过这些 API才能完成编程&#xff08;API 可以认为是 应用层 和 传输层 之间交互的路径&#xff09;&#xff08;API:Socket API相当…

【Qt常用控件】—— QWidget 核心属性

目录 &#xff08;一&#xff09;控件概述 1.1 关于控件体系的发展 &#xff08;二&#xff09;QWidget 核心属性 2.1 核心属性概览 2.2 enabled 2.3 geometry 2.4 windowTitle 2.5 windowIcon 2.6 windowOpacity 2.7 cursor 2.8 font 2.9 toolTip 2.10 focus…

java的ArrayList LinkedList的操作

文章目录 ArrayList1. ArrayList集合的特点2. 操作 LinkedList1. LinkedList集合的特点2. 操作 参考链接 ArrayList 1. ArrayList集合的特点 2. 操作 add(Object element) 向列表的尾部添加指定的元素。size() 返回列表中的元素个数。get(int index) 返回列表中指定位置的元素…

Git ignore、exclude for TortoiseGit 小结

1.Ignore Type&#xff1a;忽略类型&#xff0c;也即忽略规则&#xff0c;如何去忽略文件? 1.1.Ignore item(s) only in containing folder(s)&#xff1a;仅忽略在包含在文件夹中项目。 仅忽略该文件夹下选定的patterns。the patterns其实就是文件类型&#xff0c;比如.txt后…

MATLAB循环语句

MATLAB 循环语句 在某些情况下&#xff0c;您需要多次执行一个代码块。通常&#xff0c;语句是按顺序执行的。首先执行函数中的第一条语句&#xff0c;然后执行第二条&#xff0c;依此类推。 编程语言提供了各种控制结构&#xff0c;允许更复杂的执行路径。 循环语句允许我们…

把 KubeBlocks 跑在 Kata 上,真的可行吗?

背景 容器的安全性一直是广受关注的话题。这个领域也产生了很多不错的开源项目。Kata就是其中之一。 Kata Containers&#xff08;简称 Kata&#xff09;是一种开源项目&#xff0c;它提供了一种安全而高性能的容器运行时环境。Kata Containers 利用虚拟化技术&#xff08;通常…

【深度学习实战(24)】如何实现“断点续训”?

一、什么是断点续训&#xff1a; 中断的地方&#xff0c;继续训练。与加载预训练权重有什么区别呢&#xff1f;区别在于优化器参数和学习率变了。 二、如何实现“断点续训” 我们需要使用checkpoint方法保存&#xff0c;模型权重&#xff0c;优化器权重&#xff0c;训练轮数…

TablePlus for Mac/Win:开启高效数据开发新纪元

在当今数字化时代&#xff0c;数据的重要性日益凸显。无论是企业还是个人&#xff0c;都需要一款强大而实用的本地原生数据开发软件来提升工作效率。而 TablePlus for Mac/Win 正是这样一款卓越的工具&#xff0c;它为用户带来了全新的体验&#xff0c;让数据开发变得更加轻松、…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(三)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 4 - 6节&#xff09; P5《04.快速入门》 本节来实现一个 HelloWorld 效果&#xff1a; 1、打开编辑器&#xff0c;选择新建项目&…

【matlab】reshape函数介绍及应用

【matlab】reshape函数介绍及应用 【先赞后看养成习惯】求点赞关注收藏&#x1f600; 在MATLAB中&#xff0c;reshape函数是一种非常重要的数组操作函数&#xff0c;它可以改变数组的形状而不改变其数据。本文将详细介绍reshape函数的使用方法和应用。 1. reshape函数的基本语…

Redisson分布式锁 --- 源码分析

1.获取一把锁 RLock lock redissonClient.getLock("订单lock"); 2.业务代码加锁 lock.lock(); 2.1 lock.tryAcquire Long ttl tryAcquire(leaseTime, unit, threadId); 2.2 lua脚本: tryLockInnerAsync方法 如果获取锁失败&#xff0c;返回的结果是这个key的剩…

ssm项目搭建,springboot项目搭建

一、springboot项目搭建 1.新建一个文件夹用idea打开 2.配置maven工作目录、jdk路径、编码方式 3.pom.xml依赖管理&#xff1a;不同的项目&#xff0c;只需要修改下面的三行就可以 <groupId>com.qcby</groupId> <artifactId>HXQ0419</artifactId> &l…

如何安装、升级英伟达显卡驱动

目录 方式一&#xff1a;GeForce Experience 方式二&#xff1a;英伟达官网手动下载驱动 在做深度学习的过程中&#xff0c;难免会使用到cudatoolkit&#xff0c;而cudatoolkit又需要跟英伟达显卡驱动适配。比如笔者使用的电脑目前安装的英伟达显卡驱动 Driver Version: 516.…

git的安装与配置教程--超详细版

一、git的安装 1. 官网下载git git官网地址&#xff1a;https://git-scm.com/download/win/ 选择需要的版本进行下载 2、下载完成之后&#xff0c;双击下载好的exe文件进行安装。 3、默认是C盘&#xff0c;推荐修改一下路径&#xff0c;然后点击下一步 4、Git配置&#xff…