Wireshark抓包分析ARP协议(1)

「作者主页」:士别三日wyx
「作者简介」:优快云 top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「专栏简介」:此文章已录入专栏《计算机网络零基础快速入门》

使用Wireshark工具抓取ARP协议的数据包,分析ARP协议的地址解析过程、自主学习逻辑以及初次访问和多次访问的区别。

第一步:Ping本网段内任意主机

1)cmd执行下面这条命令获取局域网内所有主机:

for /L %i IN (1,1,254) DO ping -w 2 -n 1 192.168.31.%i

命令的意思是:ping 192.168.0.1 到 192.168.0.255 之间的所有IP,注意将IP地址的第3位改成自己的网段。

2)cmd执行 arp -a 命令,从ARP表中查看本网段内有哪些主机。

在这里插入图片描述

3)记录一个本网段的IP,然后 arp -d 清空ARP表

在这里插入图片描述
4)cmd执行 arp -a,验证ARP表已被清空(第五步会解释为什么要清空)

在这里插入图片描述
5)Wireshark开启抓包后,ping 本网段的IP

在这里插入图片描述

第二步:过滤ARP协议的数据包

显示过滤器中输入:arp,过滤ARP协议的数据包。

在这里插入图片描述

抓到了两个数据包,第一个包是ARP请求包,第二个包是ARP响应包。

第三步:数据包分析

先分析一下这两个数据包做了什么

1)先看第一个数据包,源地址(Source字段)是我自己的MAC地址

在这里插入图片描述

cmd 执行 ipconfig /all 验证一下:

在这里插入图片描述
目标地址(Destination字段)是 Broadcast,就是广播的意思
Info 字段,是对当前动作的描述:

在这里插入图片描述
总结一下第一个数据包做了什么:
我的电脑,发送了一个广播,广播的内容是 “谁是192.168.31.118?告诉192.168.31.121”
192.168.31.121是我电脑的IP,意思就是:呼叫192.168.31.118,收到请回复我。

4)第二个数据包的目的地址(Destination 字段)是我电脑的MAC地址

在这里插入图片描述
结合 Info 字段的信息,总结一下第二个数据包做了什么:
有个主机,向我的电脑发送了一个信息,信息的内容是 “192.168.31.118 是 74:b5:87:db:06:ac”
这个主机把MAC地址告诉了我的电脑。

综上所述,我们可以得出一个结论:

ARP地址解析协议就像一个队内语音,他会向局域网内所有主机广播请求,索要目标IP的MAC地址;知道的主机就会响应具体的MAC地址。

第四步:数据内容分析

接下来我们根据包的数据分析一下,这两个包是怎么做的

1)第一个包的数据,重点看我圈起来的两个地方

  • 第一处:ARP后面的括号里是 request,说明这是个请求包
  • 第二处:源IP、源MAC、目标IP都有值,目标MAC却全是0,意思就是告诉他们:我不知道这个IP的MAC地址。

在这里插入图片描述
2)第二个包的数据,重点看我圈起来的两个地方

  • 第一处:ARP后面的括号里是 reply,说明这是个响应包
  • 第二处:源IP、源MAC、目标IP、目标MAC都有值,接收方可以从这里获取IP对应的MAC地址。

在这里插入图片描述

<think>嗯,用户想基于STM32H723和RTL8201开发以太网驱动程序,并确保能通过ping测试。首先,我需要回忆一下STM32H7系列的以太网模块相关知识。记得STM32H723用的是MAC层,需要外接PHY芯片,这里用的是RTL8201。硬件引脚配置是关键,可能参考了之前类似的问题,比如引用[2]提到的DP83848的引脚配置,但RTL8201的接口可能不同。需要确认RTL8201是RMII还是MII接口,通常RMII更常见,所以可能需要配置STM32的RMII相关引脚。 接下来,硬件连接部分。用户可能需要知道具体的引脚映射,比如REF_CLK、TXD0、TXD1、CRS_DV等对应的GPIO。比如引用[2]中提到的一些引脚分配,但需要根据STM32H723的数据手册调整,确保每个信号线正确连接到RTL8201的对应引脚。另外,时钟部分也很重要,PHY需要外部时钟或由MCU提供,这里RTL8201可能使用外部25MHz晶振,或者通过STM32的REF_CLK输出,需要确认。 然后是软件配置,包括初始化MAC和PHY。可能需要使用HAL库或者LL库来配置以太网外设。PHY的初始化可能要通过SMI(MDIO和MDC)进行寄存器配置,比如设置自动协商、双工模式等。引用[1]中提到去掉上拉电阻解决了问题,所以硬件设计上可能需要检查上下拉电阻是否正确,尤其是PHY的复位和配置引脚。 接下来是驱动程序的编写,涉及到DMA描述符的配置,发送和接收数据包的处理。可能还需要实现ARP、ICMP协议来响应ping请求。在测试阶段,如果ping不通,可能需要检查PHY的寄存器状态,比如链接是否建立,是否有数据收发。使用示波器或逻辑分析仪检查时钟信号和数据线是否有活动,引用[1]中提到的时钟信号检测是关键步骤。 最后,确保生成的代码正确集成到项目中,比如正确的中断处理、缓冲区管理。可能还需要配置LWIP或类似的网络协议栈,确保协议栈正确初始化并与硬件驱动配合。用户可能需要详细的步骤,比如CubeMX的配置,代码示例,以及调试技巧。总结时需要强调硬件检查、时钟配置、引脚映射和PHY寄存器设置的重要性,这些都是导致ping不通的常见原因。</think>### STM32H723与RTL8201以太网驱动开发指南 #### 一、硬件配置要点 1. **引脚映射与接口类型** RTL8201支持RMII接口,需配置STM32H723的RMII相关引脚(参考数据手册)。以下为典型引脚配置: - RMII_REF_CLK: PA1(需外部25MHz时钟输入) - RMII_TXD0/TXD1: PB12/PB13 - RMII_RXD0/RXD1: PC4/PC5 - RMII_CRS_DV: PA7 - RMII_MDC/MDIO: PC1/PA2(用于PHY寄存器配置)[^2] 2. **硬件设计验证** - 确保RTL8201的复位引脚(RST)正确连接到STM32 GPIO,并配置上电复位时序 - 检查RMII_REF_CLK信号是否稳定(25MHz±50ppm),可用示波器测量[^1] #### 二、软件驱动开发步骤 1. **CubeMX配置** ```c // 启用ETH外设,选择RMII模式 ETH_HandleTypeDef heth; heth.Instance = ETH; heth.Inx.AutoNegotiation = ETH_AUTONEGOTIATION_ENABLE; heth.Inx.Speed = ETH_SPEED_100M; heth.Inx.DuplexMode = ETH_MODE_FULLDUPLEX; ``` 2. **PHY初始化(RTL8201)** ```c // 通过MDIO配置PHY寄存器 HAL_ETH_WritePHYRegister(&heth, RTL8201_BMCR, PHY_AUTONEGOTIATION); while (!(HAL_ETH_ReadPHYRegister(&heth, RTL8201_BMSR) & PHY_AUTONEG_MASK)); ``` 3. **LWIP协议栈集成** ```c // 初始化LWIP内存池 mem_init(); tcpip_init(NULL, NULL); netif_add(&gnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, &tcpip_input); ``` #### 三、Ping测试调试技巧 1. **常见故障排查** - **现象:** ARP请求无响应 **解决:** 检查MAC地址配置`heth.Inx.MACAddr`是否合法 - **现象:** 接收数据CRC错误 **解决:** 调整PHY寄存器`RTL8201_CR`的延迟参数[^1] 2. **关键验证点** ```shell # 使用Wireshark抓包验证 tcpdump -i eth0 -n -v icmp ``` #### 四、完整代码框架 ```c // 以太网中断处理 void ETH_IRQHandler(void) { HAL_ETH_IRQHandler(&heth); } // 数据接收回调 void HAL_ETH_RxCpltCallback(ETH_HandleTypeDef *heth) { ethernetif_input(&gnetif); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值