从网关/热点接收 UDP 数据包

从网关/热点接收 UDP 数据包

我将 Raspberry Pi 设置为 WiFi 热点(它是 DHCP 服务器,并且正在运行 HOSTAPD)。它没有互联网连接,也不路由流量。客户端仅在想要与其通信时才连接到其网络。

我在 Raspberry Pi 上有一个 python 脚本,它会在约 5 秒内发送一条 UDP 消息。

我可以看到通过 Wireshark(我已将其安装在 Raspberry Pi 上)发送的数据包,但连接到 Pi 网络的任何客户端都看不到这些数据包。就好像它们在离开 Pi 之前就遇到了死胡同。

我还应该提到客户端已经关闭了防火墙。

以下是 Pi 的一些屏幕截图:您可以看到 Wireshark 显示正在发送的数据包。您还可以看到 wlan0 上启用了 BROADCAST。 在此处输入图片描述

客户端(在本例中是 Windows 10 计算机)也正在运行 Wireshark,您也可以看到它的网络信息: 在此处输入图片描述

我在网络设置中缺少什么,导致此广播无法到达客户端?如果我将 Raspberry Pi 连接到真正的路由器,该网络上的客户端可以正常看到 UDP 消息。这让我认为我设置的自托管主机点有问题。

感谢您提供的任何见解。

hostapd 配置的内容:

interface=wlan0
driver=nl80211
#driver=rtl871xdrv
ssid=PI032378
channel=6
dtim_period=1
beacon_int=400

以下是有关已发送但未接收的数据包的 Wireshark 信息:

Frame 162: 60 bytes on wire (480 bits), 60 bytes captured (480 bits) on interface 0
    Interface id: 0 (wlan0)
    Encapsulation type: Ethernet (1)
    Arrival Time: Feb 21, 2017 16:45:08.000647000 Central Standard Time
    [Time shift for this packet: 0.000000000 seconds]
    Epoch Time: 1487717108.000647000 seconds
    [Time delta from previous captured frame: 0.007711000 seconds]
    [Time delta from previous displayed frame: 0.000000000 seconds]
    [Time since reference or first frame: 1.299469000 seconds]
    Frame Number: 162
    Frame Length: 60 bytes (480 bits)
    Capture Length: 60 bytes (480 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: Shenzhen_0c:b4:25 (40:a5:ef:0c:b4:25), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
    Destination: Broadcast (ff:ff:ff:ff:ff:ff)
    Source: Shenzhen_0c:b4:25 (40:a5:ef:0c:b4:25)
    Type: IPv4 (0x0800)
Internet Protocol Version 4, Src: 192.168.42.1, Dst: 192.168.42.255
    0100 .... = Version: 4
    .... 0101 = Header Length: 20 bytes (5)
    Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
    Total Length: 46
    Identification: 0xa04d (41037)
    Flags: 0x02 (Don't Fragment)
    Fragment offset: 0
    Time to live: 64
    Protocol: UDP (17)
    Header checksum: 0xc420 [validation disabled]
    [Header checksum status: Unverified]
    Source: 192.168.42.1
    Destination: 192.168.42.255
    [Source GeoIP: Unknown]
    [Destination GeoIP: Unknown]
User Datagram Protocol, Src Port: 44661, Dst Port: 5003
    Source Port: 44661
    Destination Port: 5003
    Length: 26
    Checksum: 0x779c [unverified]
    [Checksum Status: Unverified]
    [Stream index: 3]
Data (18 bytes)
    Data: 426c756562657272793a5049303332333738
    [Length: 18]

答案1

802.11 上的多播和广播必须使用每个客户端都可以接收的调制方案(数据速率)发送。它们必须是该网络的基本速率集(强制速率集)中的速率之一,并且必须使用该网络的组密钥和组密码进行加密。

虽然您可能遇到多播速率问题,但如果您使用加密(即 WPA2-PSK),则更可能是加密问题。作为测试,请尝试在 hostapd 配置中关闭无线加密,看看问题是否消失。

答案2

可能是 Raspberry Pi 上的网络接口错误地计算了 UDP 校验和。您可以通过在 Raspberry Pi 上运行ethtool -k eth0(或ethtool -k wlan0,或任何为 DHCP 服务器提供服务的网络接口)来检查校验和是否已卸载到网络接口。如果其输出显示校验和已打开(即tx-checksumming: on),您可以尝试禁用校验和:

sudo ethtool --offload eth0 tx off

我遇到过这个问题,并且有一个相关问题在 Raspberry Pi stackexchange 上。

相关内容