You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FPGA生成的IPv4/UDP数据包被PC丢弃的问题排查求助

FPGA生成的IPv4/UDP数据包被PC丢弃的问题排查求助

各位前辈好,我最近在做FPGA生成IPv4/UDP数据包的项目,遇到了一个卡壳的问题,想请大家帮忙分析下。

目前遇到的现象

  • 我生成的数据包,只有在执行sudo ethtool -K enp2s0 rx-all on开启网卡全接收模式时,Wireshark才能抓到;
  • 关闭rx-all(也就是网卡正常工作模式)时,这些数据包会被PC在Wireshark之前就丢弃,并且被标记为帧错误;
  • 但如果我去掉IPv4头,只发原始以太网帧的话,即使rx-all关闭,PC也能正常接收,这说明MII接口和以太网帧的封装应该是没问题的。

已经排查过的内容

  • Wireshark检查数据包无错误:UDP校验码设为0x0000(IPv4规范允许这么做),MAC/IP目标地址和我的PC完全匹配,FCS和IPv4校验码也都是正确的;
  • 反复核对了目标MAC和IP地址,确认和PC的enp2s0网卡信息一致;
  • 用sudo ethtool -S enp2s0查看网卡统计信息,没找到能指向问题的错误提示;
  • 裸以太网帧能正常接收,排除了链路层的基础问题。

我的PC网卡配置

$ sudo ifconfig enp2s0
enp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255
ether 74:d4:35:aa:9d:1a  txqueuelen 1000  (Ethernet)
RX packets 26372  bytes 13819100 (13.1 MiB)
RX errors 177  dropped 0  overruns 0  frame 177
TX packets 1613  bytes 137389 (134.1 KiB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

网卡统计信息

$ sudo ethtool -S enp2s0
NIC statistics:
tx_packets: 1597
rx_packets: 26372
tx_errors: 0
rx_errors: 0
rx_missed: 0
align_errors: 0
tx_single_collisions: 0
tx_multi_collisions: 0
unicast: 26372
broadcast: 0
multicast: 0
tx_aborted: 0
tx_underrun: 0

Wireshark抓包详情(rx-all开启时抓到的数据包)

Frame 1257: 54 bytes on wire (432 bits), 54 bytes captured (432 bits) on interface enp2s0, id 0
Section number: 1
Interface id: 0 (enp2s0)
Encapsulation type: Ethernet (1)
Arrival Time: Nov 24, 2023 15:24:18.467278031 SAST
[Time shift for this packet: 0.000000000 seconds]
Epoch Time: 1700832258.467278031 seconds
[Time delta from previous captured frame: 0.127289169 seconds]
[Time delta from previous displayed frame: 0.127289169 seconds]
[Time since reference or first frame: 4627.139850121 seconds]
Frame Number: 1257
Frame Length: 54 bytes (432 bits)
Capture Length: 54 bytes (432 bits)
[Frame is marked: False]
[Frame is ignored: False]
[Protocols in frame: eth:ethertype:ip:udp:data]
[Coloring Rule Name: UDP]
[Coloring Rule String: udp]

Ethernet II, Src: PcsCompu_fb:dd:66 (08:00:27:fb:dd:66), Dst: Giga-Byt_aa:9d:1a (74:d4:35:aa:9d:1a)
Destination: Giga-Byt_aa:9d:1a (74:d4:35:aa:9d:1a)
Source: PcsCompu_fb:dd:66 (08:00:27:fb:dd:66)
Type: IPv4 (0x0800)

Internet Protocol Version 4, Src: 192.168.1.101, Dst: 192.168.1.100
0100 .... = Version: 4
.... 0101 = Header Length: 20 bytes (5)
Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
0000 00.. = Differentiated Services Codepoint: Default (0)
.... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)
Total Length: 40
Identification: 0x0000 (0)
000. .... = Flags: 0x0
...0 0000 0000 0000 = Fragment Offset: 0
Time to Live: 64
Protocol: UDP (17)
Header Checksum: 0xf6ab [correct]
[Header checksum status: Good]
[Calculated Checksum: 0xf6ab]
Source Address: 192.168.1.101
Destination Address: 192.168.1.100

User Datagram Protocol, Src Port: 65535, Dst Port: 65535
Source Port: 65535
Destination Port: 65535
Length: 20
Checksum: 0x0000 [zero-value ignored]
[Checksum Status: Not present]
[Stream index: 43]
[Timestamps]
[Time since first frame: 43.780741653 seconds]
[Time since previous frame: 40.026103244 seconds]

UDP payload (12 bytes)
Data (12 bytes)
Data: 53574954434845533a2087e0
[Length: 12]

我已经把能想到的点都查了一遍,但还是找不到问题根源。我的最终目标是生成能在正常网络环境(比如经过交换机)中传输的UDP数据包,想请教大家:

  • 有没有什么我遗漏的检查点?
  • 是否需要先发送ARP数据包来完成地址解析?
  • 是不是必须要启用UDP校验码,即使IPv4允许设为0?

备注:内容来源于stack exchange,提问作者stanri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 07:38:07