Wi-Fi 漫游概述

Wi-Fi 漫游机制可以实现无线客户端设备在同一无线网络(拥有相同的网络名称和安全凭证)覆盖范围内,从一个 AP 的覆盖区域自动、平滑的切换到另一个 AP 的覆盖区域,保证网络会话不会中断。

../../_images/roaming_process.svg

Wi-Fi 客户端漫游示意图

Wi-Fi 漫游协议支持

802.11k

11k 提供无线测量与邻居报告机制,让 AP 与终端共享周边 BSS/信道信息,帮助终端更快、更准确地发现与评估候选 AP。

能力

请求者

应答者

描述

Beacon Measurement

AP

STA

AP 请求 STA 对指定信道/SSID/BSSID 的无线环境进行测量,获取 STA 周围的无线质量数据,辅助漫游决策与引导。

请求模式:

1.Passive:指定信道上只收 Beacon,不发送 Probe Request

2.Active:指定信道上发送 Probe Request,收集 Probe Response 和 Beacon

Neighbor Report

STA

AP

STA 请求 AP 提供同一 ESS 内的邻居 AP 列表及必要信息,帮助 STA 更快、更稳地选择漫游的目标 AP

802.11v

11v 提供网络侧管理与漫游引导(如 BSS Transition Management),由 AP 向终端下发候选列表与策略,优化漫游、负载均衡。

能力

请求者

应答者

描述

BSS Transition(BTM)

STA/AP

STA/AP

BTM 是 AP 向已关联的 STA 发送“漫游引导”请求的机制,通过提供候选 AP 列表和策略,让 STA 主动切换到更合适的 AP 上

802.11r

11r 提供快速基本服务集切换(Fast BSS Transition),使站点在漫游时不需要完整的四次握手重新建立整套上层认证,依靠 FT 的密钥层级快速切换。

能力

描述

FT using PSK

在预共享密钥环境下启用 802.11r,实现快速漫游

FT using SAE

在 WPA3-Personal 环境下,使用 SAE 进行身份验证,同时启用 802.11r 实现快速漫游

FT over IEEE Std 802.1X(WPA2-Enterprise)

在企业网络中,将 802.11r 与 802.1X/EAP 结合,实现快速漫游

主动漫游

主动漫游是指当 STA 监测到当前 AP 连接质量下降,主动扫描并依据策略选择同一 ESS 下更优的 AP 去切换。

备注

主动漫游应用实例请参考 wifi roaming plus

主动漫游的流程

  1. 设备初次连线成功后等待 10s,确保 RSSI 稳定后开始循环监测连线 AP 实时的 RSSI。

  2. 如果连续两次监测到 AP 的 RSSI 小于设定的阈值(RSSI_ROAMING_THRESHOLD),就会触发漫游扫描,尝试寻找同一 ESS 下更优的 AP。

  3. 如果扫描到的目标 AP 的 RSSI 大于当前连线 AP 的 RSSI,且差值超过设定的阈值。(FIND_BETTER_RSSI_DELTA),就会尝试漫游到该目标 AP。

  4. 不管漫游成功与否,都会继续保持循环监测连线 AP RSSI 的状态。

../../_images/active_roaming_example_diagram.svg

主动漫游流程

主动漫游的加速机制

  1. Fast connect:设备会保存最近一次连线 AP 的完整信息(包括 PMK)。有两个用处,一是开机可用来尝试快速连线;二是漫游连线可以直接使用保存的 PMK,节省时间。

  2. Scan special channel:漫游扫描会优先扫描特殊信道,如 11k 或 11v 提供的邻居 AP 的信道,或是设备保存的信道(同一 ESS 内曾经连线过的 AP 所在信道)。如果特殊信道扫描失败,才会进行全信道扫描。

  3. Fast roaming(802.11r):漫游连线使用精简的 FT 握手替代完整认证,大幅降低切换时延。

  4. Fast DHCP:设备会保存连线 AP 上获取的 IP ,一旦漫游回曾经连线过的 AP ,就用原来的 IP 进行 DHCP request 续租,跳过 DHCP Discovery 流程。

../../_images/active_roaming_acceleration_mechanism_diagram.svg

主动漫游加速机制

主动漫游的可调参数

参数

描述

默认值

RSSI_ROAMING_THRESHOLD

当连线 AP 的 RSSI 连续2次小于该值,则启动漫游扫描,尝试去找同 ESS 内更好的 AP

-70dBm

FIND_BETTER_RSSI_DELTA

当漫游扫描到的目标 AP 的 RSSI 比连线 AP 大超过该值,则尝试漫游到该 AP

8dB

SUPPORT_SCAN_5G_CHANNEL

指示是否支持 5G,如果支持,漫游扫描全信道会包括 5G 信道

0

MAX_STORED_CH_NUM

设备保存同 ESS 内连线过的 AP 所在信道的最大数目。漫游扫描时可优先扫描这些信道,缩短扫描时间

13

MAX_STORED_IP_NUM

设备保存连线过的 AP 上获取的 IP 的最大数目。漫游到新 AP 后,如果有保存该 AP 的 IP ,可以使用 fast DHCP 加速机制

16

主动漫游的使用指南

  1. 如果想开启 Fast DHCP 功能,在目录 {SDK}/amebadxxx_gcc_project 中执行 ./menuconfig.py

    找到 CONFIG LWIP,选择 Enable Fast DHCP

    (Top) -> CONFIG LWIP
    ----Configuration----
        (X)Enable Fast DHCP
        ( )Enable NAT REPEATER
        ( )Enable LWIP IPV6
    
  2. 如果想开启 802.11kvr 功能,在目录 {SDK}/amebadxxx_gcc_project 中执行 ./menuconfig.py。 找到 CONFIG WIFI > ENABLE WIFI,选择 Enable 11KEnable 11VEnable 11R

    (Top) -> CONFIG WIFI
    ----Configuration----
        (X)Enable WIFI --->
          CONFIG WIFI MODE --->
          (X) Enable 11K
          (X) Enable 11V
          (X) Enable 11R
    
  3. 根据当前的无线环境,设置 RSSI_ROAMING_THRESHOLD 等可调参数(文档路径:{SDK}/component/example/wifi/wifi_roaming_plus/example_wifi_roaming_plus.c)。

  4. 执行 ./build.py -a wifi_roaming_plus 生成固件。

  5. 使用 image tool 下载固件到开发板。

被动漫游

被动漫游(11v)是指 AP 基于客户端状态和网络负载建议或引导 STA 切换到更合适的 AP, STA 按策略决定是否接受并执行漫游,从而实现网络侧主导的优化切换。

被动漫游的流程

  1. AP 主动发送漫游引导请求,提供候选 AP 列表,建议 STA 切换到更合适的 AP。(STA 也可以主动发送询问消息,请求 AP 返回漫游候选与过渡建议以辅助其决策)

  2. STA 处理并响应 BTM request,决定是否切换。

  3. 如果 STA 决定切换,对目标 AP 发起重关联流程,并完成 4 次握手。

../../_images/passive_roaming_example_diagram.svg

被动漫游流程

被动漫游的加速机制

  1. Fast roaming(802.11r):与主动漫游一样,漫游连线可以使用 FT 重关联(FT Authentication + Reassociation),减少中断时延。

../../_images/passive_roaming_acceleration_mechanism_diagram.svg

被动漫游加速机制

被动漫游的使用指南

  1. 在目录 {SDK}/amebadxxx_gcc_project 中执行 ./menuconfig.py

    找到 CONFIG WIFI > ENABLE WIFI,选择 Enable 11V。(如果想同时开启 11k 和 11r,选择 Enable 11VEnable 11R)

    (Top) -> CONFIG WIFI
    ----Configuration----
        (X)Enable WIFI --->
          CONFIG WIFI MODE --->
          (X) Enable 11K
          (X) Enable 11V
          (X) Enable 11R
    
  2. 执行 ./build.py 生成固件。

  3. 使用 image tool 下载固件到开发板。