千兆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

千兆UDP学习调试记录(一)

语法3:arp -d  :删除指定的ip 地址项,对于指定的接口,要删除表中的某项,可以使用ifaceaddr参数,此处的ifaceaddr代表指派给该接口的ip地址。

这个删除跟上面语法2方法一样,只是把参数改成-d就行了。

 

然后,配置网络调试助手。

协议类型:UDP

本机IP地址:192.168.0.3

本地端口号(需和FPGA程序中一致):8080

例程测试成功:长度在46~1500字节间。

千兆UDP学习调试记录(一)

数据捕获成功:

千兆UDP学习调试记录(一)

更改发送数据后:

千兆UDP学习调试记录(一)

使用TCP&UDP工具测试也OK了。

 

遇到问题:改了FPGA程序中的PC物理地址后,才正常发送的。

问题描述如下图:当FPGA程序采用广播MAC地址的时候,没有连接到PC上,尽管所有配置都是对的。

分析原因:①通过固定目的地址的MAC地址后,问题解决。②PC端显示“未识别的网络”。

结论:最大原因应该是,FPGA开发板的MAC硬件控制的自动协商功能不完善,出现下面现象,问题应该在于,协商未成功,网络没有匹配,无法连接。

千兆UDP学习调试记录(一)

 

以下都是基于固定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 ~