ARP 数据包格式分析

转载 2015年11月19日 10:13:47

1.ARP数据包格式

在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。因此在通讯前必须获得目的主机的硬件地址。ARP协议就起到这个作用。源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播),目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中。

ARP数据报的格式如下所示

2011-09-14-15-37

 

注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。硬件类型指链路层网络类型,1为以太网,协议类型指要转换的地址类型,0x0800为IP地址,后面两个地址长度对于以太网地址和IP地址分别为6和4(字节),op字段为1表示ARP请求,op字段为2表示ARP应答。

2.例子分析

请求帧如下(为了清晰在每行的前面加了字节计数,每行16个字节):

以太网首部(14字节) 
0000: ff ff ff ff ff ff 00 05 5d 61 58 a8 08 06 
ARP帧(28字节) 
0000:                                           00 01 
0010: 08 00 06 04 00 01 00 05 5d 61 58 a8 c0 a8 00 37 
0020: 00 00 00 00 00 00 c0 a8 00 02 
填充位(18字节) 
0020:                               00 77 31 d2 50 10 
0030: fd 78 41 d3 00 00 00 00 00 00 00 00

以太网首部:目的主机采用广播地址,源主机的MAC地址是00:05:5d:61:58:a8,上层协议类型0x0806表示ARP。

ARP帧:硬件类型0x0001表示以太网,协议类型0x0800表示IP协议,硬件地址(MAC地址)长度为6,协议地址(IP地址)长度为4,op为0x0001表示请求目的主机的MAC地址,源主机MAC地址为00:05:5d:61:58:a8,源主机IP地址为c0 a8 00 37(192.168.0.55),目的主机MAC地址全0待填写,目的主机IP地址为c0 a8 00 02(192.168.0.2)。

由于以太网规定最小数据长度为46字节,ARP帧长度只有28字节,因此有18字节填充位,填充位的内容没有定义,与具体实现相关。

应答帧如下:

以太网首部 
0000: 00 05 5d 61 58 a8 00 05 5d a1 b8 40 08 06 
ARP帧 
0000:                                           00 01 
0010: 08 00 06 04 00 02 00 05 5d a1 b8 40 c0 a8 00 02 
0020: 00 05 5d 61 58 a8 c0 a8 00 37 
填充位 
0020:                               00 77 31 d2 50 10 
0030: fd 78 41 d3 00 00 00 00 00 00 00 00

以太网首部:目的主机的MAC地址是00:05:5d:61:58:a8,源主机的MAC地址是00:05:5d:a1:b8:40,上层协议类型0x0806表示ARP。

ARP帧:硬件类型0x0001表示以太网,协议类型0x0800表示IP协议,硬件地址(MAC地址)长度为6,协议地址(IP地址)长度为4,op为0x0002表示应答,源主机MAC地址为00:05:5d:a1:b8:40,源主机IP地址为c0 a8 00 02(192.168.0.2),目的主机MAC地址为00:05:5d:61:58:a8,目的主机IP地址为c0 a8 00 37(192.168.0.55)。

实际在开发板上的测试结果:

开发板发送给pc机实际抓包的结果一致:

发送60字节 ok 
0000  ff ff ff ff ff ff 08 90  90 90 90 90 08 06 00 01   ........ ........ 
0010  08 00 06 04 00 01 08 90  90 90 90 90 c0 a8 00 fa   ........ ........ 
0020  00 00 00 00 00 00 c0 a8  00 64 00 00 00 00 00 00   ........ .d...... 
0030  00 00 00 00 00 00 00 00  00 00 00 00               ........ ....
   

抓包软件实际显示发送的数据为:

收到42字节arp响应包但是实际上是64个字节? 
0000  08 90 90 90 90 90 00 1e  c9 45 61 9e 08 06 00 01   ........ .Ea..... 
0010  08 00 06 04 00 02 00 1e  c9 45 61 9e c0 a8 00 64   ........ .Ea....d 
0020  08 90 90 90 90 90 c0 a8  00 fa
  

开发板调试打印的结果: 
interrupt : st=1 status=1  len= 40 
receive data len=64 
08 90 90 90 90 90 00 1e c9 45 61 9e 08 06 00 01 
08 00 06 04 00 02 00 1e c9 45 61 9e c0 a8 00 64 
08 90 90 90 90 90 c0 a8 00 fa

00 00 00 00 00 00 00 00 
00 00 00 00 00 00 
00 00 00 00 0a 
1f b2 53

现在有个问题:

在上文表述过以太网规定最小数据长度为46字节但是实际抓包的分析只有42个字节,这个怎么解释:

答:46个字节指的是以太网的帧,关键的是不包含以太网的首部也就是说14个字节的首部+28个字节的ARP响应帧(由于不够46个字节需要加上一些填充位,但是这些数据没有意义)+18个字节的填充位+4个字节的CRC校验位=64个字节,也就是说抓包得到的42个字节,实际在开发板上调试得到的数据为64个字节是正确的

原文地址:http://www.cnblogs.com/xmphoenix/archive/2011/09/14/2176323.html

ARP数据包讲解

一. 关于ARP协议的基础知识 1.ARP的工作原理 我们都知道以太网设备比如网卡都有自己全球唯一的MAC地址,它们是以MAC地址来传输以太网数...
  • commandow
  • commandow
  • 2010年08月31日 10:43
  • 15115

arp包格式分析及实例解析

一、ARP包格式分析 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符...
  • shanzhizi
  • shanzhizi
  • 2013年08月16日 09:18
  • 14367

Wireshark-ARP数据包

ARP:地址解析协议;    是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;    ...
  • ahafg
  • ahafg
  • 2016年03月28日 22:57
  • 1939

TCP、UDP、IP、ARP的报文格式以及所代表的含义

TCP报文格式: (上图转载自http://wenku.baidu.com/view/04b0d780e53a580216fcfeaa.html) 源端口: 数据发送方的端口号。 ...
  • henni_719
  • henni_719
  • 2015年01月07日 09:40
  • 4844

TCP/Socket学习----ARP数据报格式

TCP/Socket学习(亚嵌网络版图书) ARP数据报格式 ARP的作用: 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的 主机的硬件地址,而数据包首先是被网卡接...
  • shushengbaoguo
  • shushengbaoguo
  • 2013年08月01日 21:04
  • 592

ARP数据包格式

转载自:ARP数据包格式分析 删除了开发板测试的部分。 1.ARP数据包格式 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址,而...
  • li1914309758
  • li1914309758
  • 2017年12月06日 10:24
  • 55

ARP数据包格式、ARP欺骗编程实现

注意:并不是在有ARP请求时,才会有APR响应数据包。 首先介绍ARP协议的报文格式。 结构ether_header定义了以太网帧首部;结构arphdr定义了其后的5个字段,其信息 用于在任何类型...
  • muyangzhe123
  • muyangzhe123
  • 2015年04月18日 21:43
  • 1492

C/C++手动构造ARP包并发送至网络

所选题目: 1. 在熟悉ARP协议并了解Winpcap编程的前提下,构造ARP包,选择并打开网卡,将ARP包发送出去。 运行格式:程序名源IP地址目的IP地址目的MAC地址flag 源 IP   目的...
  • qqqqqqqqqq1qqqqqqqqq
  • qqqqqqqqqq1qqqqqqqqq
  • 2015年08月07日 16:52
  • 3168

WinPcap实战(一)——发送ARP包

ARP包的结构: ARP包格式:物理帧头(14B)——ARP帧结构(28B)——填充数据(18B)——CRC(4B)。这里给出一张图(图中没有18字节的填充数据和4字节的校验位): 物理帧头(14B)...
  • u013539342
  • u013539342
  • 2015年09月17日 17:00
  • 3558

ARP协议格式和实例分析

ARP协议是一个网络层协议,它的出现是为了完成网络层的ip和数据链路层的MAC地址之间的对应关系。 一、ARP协议的报文格式 arp的报文格式如下: 1.硬件地址类型:该字段表示物理网络...
  • deramer1
  • deramer1
  • 2017年06月19日 14:14
  • 656
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ARP 数据包格式分析
举报原因:
原因补充:

(最多只允许输入30个字)