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

跨子网UDP广播接收异常问题求助(新旧嵌入式系统版本对比)

跨子网UDP广播接收异常问题求助(新旧嵌入式系统版本对比)

大家好,我遇到一个跨子网UDP广播接收的异常问题,想请教下各位大佬:

我搭建了一个独立的测试网络(没有连接外部其他设备),用一台集线器连接了4台设备,每台设备都配置在不同的/24子网:

  • Raspberry Pi: 10.10.0.1/24
  • 旧版本嵌入式PC: 10.11.0.1/24
  • 新版本嵌入式PC: 10.12.0.1/24
  • Mac: 10.13.0.1/24

我用以下Python代码发送UDP广播:

广播发送代码

import socket

UDP_IP_ADDRESS = "255.255.255.255"
UDP_PORT_NO = 5007
MESSAGE = "Hello, world!"

udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
udp_socket.sendto(bytes(MESSAGE, "utf-8"), (UDP_IP_ADDRESS, UDP_PORT_NO))
udp_socket.close()

同时所有设备都运行以下监听代码接收广播:

广播接收代码

import socket

client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)  # UDP
client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
client.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
client.bind(("", 5007))

while True:
    data, addr = client.recvfrom(1024)
    print("received message: %s" % data)

问题现象

Mac、树莓派和旧版本嵌入式PC都能正常收到跨子网的255.255.255.255广播,但新版本嵌入式PC完全收不到。有意思的是,如果发送端和新PC在同一个子网,它就能正常接收广播。

设备系统版本差异

  • 旧嵌入式PC:
    • 内核版本:5.3
    • OpenEmbedded版本:Warrior
  • 新嵌入式PC:
    • 内核版本:6.1
    • OpenEmbedded版本:Kirkstone

我想请教的是:这两个版本的系统之间,有没有什么默认配置或者内核行为的变化会导致跨子网UDP广播接收失败?是不是需要调整networkd的某个配置项?


更新1:网络统计数据验证

为了确认问题,我用netstat -i查看了新PC的网络接收情况:

  • 发送255.255.255.255广播后,RX-OK计数没有变化(依然是64),说明数据包根本没到应用层:
root@VIA-511723:~# netstat -i
Kernel Interface table
Iface            MTU   RX-OK RX-ERR RX-DRP RX-OVR   TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0            1500      64     0     0 0           25     0     0     0 BMRU
lo             65536       0     0     0 0            0     0     0     0 LRU
  • 发送同子网的广播192.168.10.255后,RX-OK计数增加到65,说明数据包正常被接收:
root@VIA-511723:~# netstat -i
Kernel Interface table
Iface            MTU   RX-OK RX-ERR RX-DRP RX-OVR   TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0            1500      65     0     0 0           25     0     0     0 BMRU
lo             65536       0     0     0 0            0     0     0     0 LRU

更新2:内核版本回测结果

我尝试把新PC的内核换回5.3(搭配Kirkstone版本的OE),结果问题依然存在。这说明问题可能不是内核版本导致的,而是OpenEmbedded从Warrior升级到Kirkstone带来的默认配置变化?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 14:48:12