数据长度小于 12 字节的 UDP 数据包未到达

数据长度小于 12 字节的 UDP 数据包未到达

我有一个特定的 Ubuntu VM在我的网络上,不会发送带有数据长度低于 12 个字节.例如:

"HelloWorld123"被发送。

"HelloWorld"没有被发送。

我尝试了各种不同的方法,但结果都一样。

所有这些数据包都将被发送:

printf 'HelloWorld123' | nc -u 192.168.20.49 30303
echo -n 'HelloWorld123' > /dev/udp/192.168.20.49/30303
php udp_send.php 192.168.20.49 30303 "HelloWorld123"

所有这些数据包都不会在这台机器上发送:

printf 'HelloWorld' | nc -u 192.168.20.49 30303
echo -n 'HelloWorld' > /dev/udp/192.168.20.49/30303
php udp_send.php 192.168.20.49 30303 "HelloWorld"

在我的网络中的每台其他机器(旧的 Ubuntu VM 和 Windows 机器)上,所有数据包都会被发送,无论长度有多少字节(正如预期的那样)。

我需要这个,因为一个特定的硬件需要一个 11 字节长的 UDP 数据包(见我的Stack Overflow 上的原始问题

Wireshark 会记录所有数据包,就好像它们已正确发送一样:

# 'HelloWorld123' entry:
537 11.677245720    192.168.20.8    192.168.20.49   UDP 55  51956 → 30303 Len=13

# 'HelloWorld' entry:
207 5.684951175 192.168.20.8    192.168.20.49   UDP 52  58603 → 30303 Len=10

有人知道这是怎么回事吗?Ubuntu 最新的 UDP 校验和生成中存在错误,用于处理小于 12 个字节的消息?我如何才能找到更多关于谁最终拒绝了这些 UDP 数据包的信息?

答案1

这是由 Microsft VM 中有关校验和创建的一个错误引起的。请参阅此处了解详细信息: StackOverflow 上的 WSL 问题和解决方法

相关内容