DM9000网卡ARP 数据包格式分析

 

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应答。

下面举一个具体的例子。

请求帧如下(为了清晰在每行的前面加了字节计数,每行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个字节是正确的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
DM9000是一个常用的网络接口控制器芯片,用于将嵌入式系统连接到以太网。要调试DM9000网卡,可以按照以下步骤进行: 1. 硬件连接:首先,确保DM9000芯片正确连接到嵌入式系统板上,并与以太网接口相连接。检查芯片的供电和时钟信号。 2. 驱动程序:编写适当的驱动程序,以便嵌入式系统能够与DM9000通信。这通常涉及到与DM9000芯片的寄存器进行交互,读取和写入必要的控制和配置参数。确保驱动程序正确加载到系统中。 3. 硬件配置:检查DM9000的配置寄存器,确保MAC地址设置正确,并且与局域网中的其他设备不冲突。还可以配置其他参数,例如速度和双工模式。 4. 命令行工具:一些嵌入式操作系统提供了用于调试以太网接口的命令行工具。使用这些工具,您可以查看和配置DM9000的状态和参数。例如,您可以使用ifconfig命令查看和配置网络接口的IP地址和子网掩码。 5. debug信息:通过在驱动程序中添加适当的调试信息,可以轻松地跟踪和定位问题。打印DM9000的状态、接收和发送的数据包以及其他有用的信息,有助于确定问题所在。 6. 监视网络流量:使用网络分析工具,例如Wireshark,来监视DM9000的数据流量。这将帮助您识别任何异常数据包或通信问题。 7. FQA和论坛:查阅DM9000相关的文档、常见问题解答(FAQ),以及在线社区和论坛寻求帮助。在这些平台上,您可以找到其他用户的经验和解决方案。 总的来说,要调试DM9000网卡,需要确保正确连接硬件,编写驱动程序并配置相关参数。使用命令行工具、添加debug信息、监视网络流量和寻求帮助,可以更容易地发现和解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值