为什么我的电脑丢弃了这个 UDP 数据包?

为什么我的电脑丢弃了这个 UDP 数据包?

我正在使用 FPGA 创建 IPv4/UDP 数据包。

下面是数据包的样子。Wireshark 根本没有标记错误。我使用的 UDP 校验和为 0x0000(允许 IPv4),MAC/IP 目标匹配,并且 FCS 和 IPv4 校验和正确。

仅当我使用 EthTool 在 PC MAC 上启用 rx-all 时,我才能看到数据包。

sudo ethtool -K enp2s0 rx-all on

如果关闭此功能(通常的操作模式),这些数据包在到达 wireshark 之前会被 PC 丢弃,并被标记为帧错误。

sudo ethtool -S enp2s0没有显示任何有用的信息。

我已经用我的电脑仔细检查了目标 MAC/IP。

如果我取出标头的 IPv4 部分(因此只是一个原始以太网数据包),即使有 ,数据包也会通过rx-all off。(我也可以在下面包括它,但按原样包括已经很多了)。由于原始数据包有效,我相当确定我的 MII 接口和以太网帧是正确的。

我尝试了所有方法,但还是无法弄清楚为什么这些数据包仍然被丢弃。我的目标是创建可以通过普通网络(通过交换机等)传输的 UDP 数据包。

我还遗漏了什么吗?我是否也需要提供 ARP 数据包?我是否仍然需要 UDP 校验和?

$ 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

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]

之前曾询问网络工程 StackExchange

答案1

终于明白了!!

结果是数据包太短了。以太网数据包的最小长度为 64B,而这个数据包只有 54B。

相关内容