以太网ARP协议解析

news/2024/10/19 21:40:54/

一、什么是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.ppmy.cn/news/1438144.html

相关文章

基于spring boot开发的快递管理系统开题报告

快递公司管理系统开题报告 一、研究背景与意义 随着电子商务的蓬勃发展,快递物流行业迎来了前所未有的增长机遇。然而,快递公司在面对日益增长的业务量时,也面临着管理效率低下、资源分配不合理、客户服务体验不佳等问题。开发一套高效、智…

深入了解MySQL:从基础到特性,全面解读关系数据库管理系统的历史与应用

文章目录 1. MySQL简介1.1 概述1.2 架构与兼容性1.3 开源与社区支持 2. MySQL的历史2.1 创始与初衷2.2 发展历程2.3 在Oracle的持续发展2.4 开源与商业结合 3. MySQL的核心特性4. MySQL在实际应用中的作用4.1 网站建设与内容管理4.2 商业智能与客户关系管理4.3 企业级应用与云集…

API接口开发分享:API接口接入拼多多平台采集商品详情实时数据、获取商品销量、价格、库存、名称等数据,免费接入key获取示例

要接入拼多多平台的API接口采集商品详情数据、商品销量、价格、库存、名称等数据,首先需要注册一个API账号。用来请求调用该api。 接下来,你可以使用Python等编程语言调用拼多多的API接口。以下是一个使用Python调用拼多多API接口的示例: i…

探索数学语言模型的前沿进展——人工智能在数学教育和研究中的应用

数学一直被认为是科学的基石,对于推动技术进步和解决现实世界问题具有重要意义。然而,传统的数学问题解决方式正面临着数字化转型的挑战。MLMs的出现,预示着数学学习和研究方式的一次革命。 MLMs,包括预训练语言模型(…

STM32之HAL开发——FSMC控制带控制器LCD(8080时序)

STM32FSMC模拟8080接口时序 ILI9341的8080通讯接口时序可以由STM32使用普通I/O接口进行模拟,但这样效率太低,STM32提供了一种特别的控制方法——使用FSMC接口实现8080时序。 由于FSMC外设可以用于控制扩展的外部存储器,而MCU对液晶屏的操作实…

自建SQL server 服务无法启动,提示评估期已过

问题背景 在服务器内安装的SQL server无法启动,报错提示如下截图,提示错误代码17051: 结合系统日志查看应用程序日志详情提示评估期已过,报错如下 问题原因 出现此报错原因是SQL server 安装时,使用的评估版本&#xf…

单例模式(设计模式)

文章目录 概述懒汉式饿汉式双重加锁机制类级内部类方式单例模式适用场景Spring 的单例实现原理单例被破坏的五个场景单例的实现方式实现线程安全的单例模式 概述 单例模式:单例对象能保证在一个JVM中,该对象只有一个实例存在。保证被创建一次&#xff0…

C++中的继承与多态

一、继承: 1.什么是继承? 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象…