# Wi-Fi 模式

[English]

## ESP32 Wi-Fi AP 通用场景

下图为 AP 模式下的宏观场景，其中包含不同阶段的具体描述：

> AP 模式下 Wi-Fi 事件场景示例

## Wi-Fi Sniffer 模式

Wi-Fi Sniffer 模式可以通过 `esp_wifi_set_promiscuous()` 使能。如果使能 Sniffer 模式， 可以 向应用程序转储以下数据包。

> - 802.11 管理帧

> - 802.11 数据帧，包括 MPDU、AMPDU、AMSDU 等

> - 802.11 MIMO 帧，Sniffer 模式仅转储 MIMO 帧的长度。

> - 802.11 控制帧

> - 802.11 CRC 错误帧

不可以 向应用程序转储以下数据包。

> - 802.11 其它错误帧

对于 Sniffer 模式 可以 转储的帧，应用程序可以另外使用 `esp_wifi_set_promiscuous_filter()` 和 `esp_wifi_set_promiscuous_ctrl_filter()` 决定筛选哪些特定类型的数据包。应用程序默认筛选所有 802.11 数据和管理帧。如果你想要筛选 802.11 控制帧，`esp_wifi_set_promiscuous_filter()` 中的 filter 参数需要包含 “WIFI_PROMIS_FILTER_MASK_CTRL” 类型， 如果你想进一步区分 802.11 控制帧，那么调用 `esp_wifi_set_promiscuous_ctrl_filter()`。

可以在 WIFI_MODE_NULL、WIFI_MODE_STA、WIFI_MODE_AP、WIFI_MODE_APSTA 等 Wi-Fi 模式下使能 Wi-Fi Sniffer 模式。也就是说，当 station 连接到 AP，或者 AP 有 Wi-Fi 连接时，就可以使能。请注意，Sniffer 模式对 station/AP Wi-Fi 连接的吞吐量有 很大影响。通常，除非有特别原因，当 station/AP Wi-Fi 连接出现大量流量，不应使能。

该模式下还应注意回调函数 `wifi_promiscuous_cb_t` 的使用。该回调将直接在 Wi-Fi 驱动程序任务中进行，所以如果应用程序需处理大量过滤的数据包，建议在回调中向应用程序任务发布一个事件，把真正的工作推迟到应用程序任务中完成。

## Wi-Fi AwareTM (NAN)

Wi-Fi AwareTM 或 NAN，即 Neighbor Awareness Networking (邻居感知网络，下文简称 NAN) 协议可以让 Wi-Fi 设备发现附近的其他设备。NAN 使用设备间直接通信，无需通过互联网或 AP 连接。

多个邻近的 NAN 设备组成一个 NAN 集群，集群中的设备可相互通信。同一集群中的 NAN 设备会同步时钟，并定期在信道 6 上互相监听。NAN 设备还可通过服务发现协议，在所处集群内提供（发布）或获取（订阅）服务。通过服务名称和匹配过滤器（可选），可以完成服务匹配。当订阅设备匹配到发布设备时，就可以发送信息（跟进）或与发布设备建立数据通路 (NDP)。NDP 建立后，订阅设备和发布设备都会获得一个 IPv6 地址用于通信。

注意，数据包发送是不加密的，无法保证 NDP 的安全性。NAN 为发现 (Discovery) 和数据通路单独的接口，该接口与 STA 和 AP 所用的接口不同。NAN 以独立模式运行，不支持与 STA 或 AP 接口共存。

要了解如何设置 NAN 发布设备和订阅设备，请参考 ESP-IDF 示例：examples/wifi/wifi_aware/nan_publisher/README.md 和 examples/wifi/wifi_aware/nan_subscriber/README.md。

## 非同步服务发现 (USD)

非同步服务发现 (USD) 是一种机制，可让设备在新的设备进入射频环境时发现其提供的可用服务，而无需设备之间进行同步。

USD 通过发布 (Publish) 及跟进消息 (Follow-up message) 中的 SDEA 的服务信息 (Service Info) 字段来传递服务相关信息。

要了解如何设置 NAN-USD 发布设备和订阅设备，请参考 ESP-IDF 示例：examples/wifi/wifi_aware/usd_publisher/README.md 和 examples/wifi/wifi_aware/usd_subscriber/README.md。

此文档对您有帮助吗？

- 反馈已收到，谢谢！
- 如果您有其他意见，欢迎填写乐鑫文档反馈表。

- 我们重视您的反馈。
- 您可以填写乐鑫文档反馈表告诉我们如何改进该文档。