开发板裸机跑网卡MAC层驱动,外加自己写的一简易ARP协议栈,
和以太网帧统计程序,通过串口输出接收到的以太网帧长度。
然后局域网测试,开发板只能接收到广播包(主要是ARP包和一些SSDP包)。
主机端向开发板发送UDP包,数据包大小1040Byte,一次发一个UDP包,发送间隔100ms。
开发板那网卡灯狂闪,但是开发板并没有接收到打包好的以太网帧,
我的统计程序直接调用网卡驱动的接收函数,函数的返回值是接收到的以太网帧的长度,仅此而已。
数据接收采用的轮询模式,没有使用中断。
串口输出的结果基本都是ARP包的长度,没有收到长度超过1000字的数据帧,
刚开始我以为是ARP协议栈有问题,但是通过wireshark抓包分析,
主机接收到了开发板的ARP应答包,而且UDP包也能正常发出,
然后查看主机的ARP缓存表,存在开发板的IP地址和MAC地址,
都没有问题。
但是为什么开发板收不到包含UDP数据的以太网帧呢,求解哪个环节出了问题,
这个问题困扰了我好多天了,先谢谢了。
最后说下我的ARP协议处理流程,
首先判断以太网帧头的类型字段,如果是0x0806则是ARP帧,然后判断接收帧的目标IP地址,如果是0.0.0.0(未填写)或者是开发板IP,就构造ARP包应答。 |