我将 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 上。