接收UDP数据包

Receive UDP packets

我目前正在处理 FPGA 和 Ubuntu 20 主机 pc 之间的 UDP 连接(防火墙已关闭,已测试不同的 NIC)。为了发送 UDP 数据包,在 FPGA 上实现了自定义以太网程序。在接收方,有一个简单的 UDP 服务器接收这些数据包。

问题是,我收不到任何数据包。简单的 UDP 服务器已经过测试,当我从另一台电脑向它发送消息时它可以工作。为了对 FPGA 进行故障排除,使用 Wireshark 来监控流量。在 Wireshark 中,可以看到每个数据包及其数据,这意味着第 1-4 层不负责 (wireshark record). Even the terminal command "ip -s link" showed that no packets are dropped (terminal output)。

如何找出数据包被丢弃的位置?

工作和“FPGA”UDP 数据包之间的区别:difference

  • 239.255.255.250 不是有效的源地址,因为它是多播地址。多播地址的第一部分在 224 到 239 范围内(并且 240-255 保留用于将来扩展)。多播源地址没有意义,内核可能因此丢弃数据包。
  • 它也与接收器位于不同的子网上。我不认为这有什么不同,但也许它特别适用于 169.254 子网(如果没有路由器,则默认获得的子网)。尝试以 169.254 开头的源地址。
  • 也太短了。 The minimum size of a valid Ethernet packet is 64 bytes 包括以太网 CRC。您不必为 UDP 数据使用所有字节 - UDP 长度可以比​​数据包短,多余的字节未使用。
  • 请验证 IPv4 header 校验和。我不确定为什么 Wireshark 不为您验证它。它必须是正确的,否则内核将丢弃数据包。