千兆UDP学习调试记录(一)
基于FPGA的TCP硬件协议栈研究与设计——总标题
前言:笔者的最终目的在于,实现基于FPGA的Verilog纯逻辑TCP硬件协议栈,目前还处在前中期,看了《TCPIP详解卷一:协议》一书,收获颇丰。现在开始利用黑金的开发板AX516,计划逐步动手实现,并将一路的学习记录下来,算是反思总结,也是期待分享交流,希望有感兴趣,或从事相关工作的朋友,能留言、加友等,一起分享与探讨。
笔者是在校研究生,对TCPIP协议及FPGA等相关理论进行了大量的阅读和学习,但是工程实践偏少,本系列的博文会真实全面地记录笔者的学习过程,如果文中有什么问题,还请多多指出,及一些未能解决(理解)的问题,还期望有朋友能帮助解答。
在此,欢迎所有莅(lu)临(guo)本文的朋友,哈哈~
千兆UDP学习调试记录(一)
注:分标题才是本文记录的内容
20181006 周六
基于黑金的例程,实现以下各要求。
- 利用例程,掌握以太网传输的整个测试流程,和性能分析。
- 根据例程,新建工程,理解之后,编写自己的UDP测试程序。
- 完全掌握UDP后,结合TCP的要求,在该程序上进行改进,以实现TCP的功能。
好,接下来,修改本机地址作为目标IP。
修改PC的IP地址:192.168.0.3
默认网关地址:192.168.0.1
然后,添加IP静态地址,作为PC机信任的一个对接IP地址。
ARP命令语法(首先将本机地址更改为上述地址,并且要把UDP程序下载到FPGA板上,才会有如下命令数据,否则什么数据都没有)
语法1:arp -a :这个命令是显示所有接口的当前arp缓存表,如果要显示特定的ip地址的arp缓存项,请使用带有inetaddr参数的arp -a ,此处的inetaddr代表的是ip地址。
语法2:arp -s inetaddr etheraddr: 向arp 缓存添加可将ip地址inetaddr解析成物理地址etheraddr的静态项。
操作命令:ARP -s 192.168.0.2 00-0a-35-01-fe-c0
语法3:arp -d :删除指定的ip 地址项,对于指定的接口,要删除表中的某项,可以使用ifaceaddr参数,此处的ifaceaddr代表指派给该接口的ip地址。
这个删除跟上面语法2方法一样,只是把参数改成-d就行了。
然后,配置网络调试助手。
协议类型:UDP
本机IP地址:192.168.0.3
本地端口号(需和FPGA程序中一致):8080
例程测试成功:长度在46~1500字节间。
数据捕获成功:
更改发送数据后:
使用TCP&UDP工具测试也OK了。
遇到问题:改了FPGA程序中的PC物理地址后,才正常发送的。
问题描述如下图:当FPGA程序采用广播MAC地址的时候,没有连接到PC上,尽管所有配置都是对的。
分析原因:①通过固定目的地址的MAC地址后,问题解决。②PC端显示“未识别的网络”。
结论:最大原因应该是,FPGA开发板的MAC硬件控制的自动协商功能不完善,出现下面现象,问题应该在于,协商未成功,网络没有匹配,无法连接。
以下都是基于固定PC端(目标MAC地址)测试得到的结果,对于广播未能连接的问题,未知确切原因。
分析测试:对改程序进行各种尝试性测试,得到一下结果。
1)若PC端不是设定地址,但向FPGA发送数据,FPGA进行了接收;只是在PC端没有接收。也就是说,UDP通信不是基于连接的,只要是匹配到自己的地址,就会去接收该数据。
2)若PC端没有连接,只是开始FPGA端,则抓取到许多ARP请求包,当然还有FPGA发出的UDP包。也就是说,就算没有匹配到目标地址,UDP数据也照发不误,它也不管接收情况,只管自己能发出去。
3)双方彼此建立通信后,PC发一次,FPGA就接收一次;FPGA采用循环发,发送间隔0.5S(通过Wireshark可观察)。虽然建立了连接,但ARP包仍然存在,并以不定时地(每个几个UDP就会出现一个,且间隔时间不是定值)广播,内容为寻找UDP发送的目标地址。
有兴趣的朋友,欢饮留言,交流。本人扣扣:1021100382 ~