10G UDP发送过程

10G UDP TX

  • 对 10G UDP的整个工程源码进行了分析,重点分析了发送部分,发送部分的流程如下:

    • UDP-IP-MAC层包含在udp_complete_64.v模块中,模块使用前需要设置local_maclocal_ip两个参数,以上两个参数传递到ARP模块中,被写入arp_cache.v中。

    • UDP层进行数据传输写入,需要设置dest_macdest_ip,关键参数为dest_ipdest_mac不需要指定。

    • UDP包数据传递到IP层,IP层首根据dest_iparp_cache中查询该IP是否存在对应的MAC地址,若没有,则发送ARP请求包。若有则进行IP数据包发送。

    • 以上过程在进行第一次数据包发送前一定会进行,除非收到来自目标电脑的ARP回复包。

    • UDP第一次发送的数据包会被MAC层以下缓存下来,成功收到目标电脑的ARP回复包后,该数据包将被发送出去。

  • 对10G UDP工程,采用SFP0 + UDP-IP-MAC为1号UDP网络,采用SFP1 + UDP_IP_MAC作为2号UDP网络。1号网络发送数据,2号网络接收数据。整个流程如下。 ALL

    • 在2.52us时发送第一个UDP数据包,A0A1A2A3A4A5A6A7为起始,长度为32字节。

    • SFP0_txd为MAC层输出数据。在 5.91us 时网络发送第一个包,type为0806,即ARP包。该包的ARP操作码为0001,为ARP查询包。

    • SFP0_rxd为MAC层输入数据。在 6.45us 时网络收到一个包,type为0806,ARP操作码为0002,表示来自2号网络的ARP回复包。

    • 6.79us 时网络发送一个包,type为0800,即IP数据包。IP头部中,协议部分对应字节为0x11即17,表示IP数据部分为UDP协议。数据部分,起始为A0A1A2A3A4A5A6A7,长度部分为0x28即40,去除8个字节的头部,数据长度为32字节,即为第一次发送的UDP数据。 ARP

    • 后续从 9.72us开始为发送持续发送 UDP 数据包,网络栈不再发送 ARP查询包。SFP0_txc为00表示网络栈正在发送数据包。发送周期为1004.8ns,单次发送 1200bytes数据,理论带宽为9.55Gbps。

  • 分析得知,在10G UDP协议栈第一次发送数据时需要发送一次ARP查询包得到目的IP地址的MAC地址,在得到目标电脑的回复后才能进行后续的发送。即使MAC层以下存在FIFO可以暂存数据,但是考虑到在这段时间内以太网完全不会发送任何数据,数据流量大的情况下完全有可能会写满FIFO,造成数据丢失。

  • 发送流程:首先发送一个UDP空包用于触发ARP发送请求,收到ARP回复后进行后续发送。第一个UDP包数据可以为AD blob和slice、采样配置、序号信息等关键配置信息,用于将以上信息发送给上位机,由上位机确认配置是否为目标配置,检测配置是否正确。

其余

  • 交付一套PP-DT给FRC。
  • 饶老师那边做推进项目的最近一直在询问有关于DT配置的问题,主要是希望脉冲宽度可调和可以循环输出波形。目前修改了DT的源代码,改成了脉冲宽度为1ms,并且给了那边一个新的DT板卡,告诉那边延时指令如何生成。

本文章使用limfx的vscode插件快速发布