我正在尝试找到一种方法,让我的 Android 设备频繁地向空中发送 Wi-Fi 数据包,这样我就可以从多个基站检测它们,以便进行内部定位。实现此目的的标准方法是使用 Android 的 Wifi.scan()。不幸的是,它被限制为每 30 秒一次,这对于我的用例来说不够频繁。
如果我向 发送 UDP 广播消息255.255.255.255
,该消息应转换为 的 MAC 层目标ff:ff:ff:ff:ff:ff
。我的问题是该数据包是否“直接”发送到关联网络上的每个客户端,在这种情况下,客户端将具有可用于定位的 RSSI 信息。
或者,该广播消息是否仅发送到路由器,然后路由器在下一个 DTIM 间隔内分发它,在这种情况下,客户端将不会获得有关广播者的任何有用信息(包括其相对位置/RSSI)。
答案1
Wi-Fi 上的所有无线到无线数据包始终由 AP 中继。单播也是如此。是的,正如您所怀疑的那样,AP 会缓冲多播和广播,直到下一个 DTIM 信标发出后,然后 AP 会将每个缓冲的多播或广播传输一次。
当 AP 传输缓冲多播或广播时,它会以较低的数据速率进行传输,所有客户端都应该能够可靠地接收这些数据包,因为这些数据包没有被确认。通常,这种较低的数据速率是 AP 可以使用的最低速率,这使得多播和广播非常昂贵,因为它们总是以较低的速率发出,从而占用大量的通话时间。所以你真的不想在无线上频繁发送多播或广播。
因此无论如何,当 AP 的客户端接收数据包时,它看到的信号强度始终反映 AP 的 Tx 功率和距离,而不是原始发送者的功率和距离。
(*全部:有一种称为 TDLS(隧道直接链路设置)的技术,可以让客户端直接向对方发送数据包,而无需通过 AP 中继,但对 TDLS 的支持似乎非常罕见,甚至根本不存在。)