以太网ARP协议解析

一、什么是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协议在以太网协议中的组帧

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

以太网帧格式解析-优快云博客icon-default.png?t=N7T8https://blog.youkuaiyun.com/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控制器中处理)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值