WIFI - 无缝漫游

征 途
家里户型比较怪,路由器的位置比较偏,所以有些地方wifi无法覆盖到,就想再加一个WIFI路由器来实现无缝漫游。本文为折腾时所学到的知识点。

背景知识点

802.11 k802.11v802.11r 相结合,可以使终端与AP 设备充分利用已建立的行业标准来改进用户的漫游体验。

802.11k/v/r 协议是软件实现的,不涉及硬件,所以同时需要 AP 和终端两者的支持。

  • 优点:不要换硬件,只需要更新软件即可实现,成本低
  • 缺点:各个设备对协议的支持程度不同,造成漫游效果各不相同。

802.11 k (邻居报表)

支持 802.11k 的 APs 能够向终端设备提供一个包含相邻可用 APs 信息 的报表,以便终端设备更好地了解其周围的 APs。终端设备可以通过它缩短寻找可用相邻 APs 的时间。

802.11v (BSS 转换管理框架)

支持 802.11v 的 APs 为终端设备提供另一个它认为可以提供更好 WLAN 体验的 AP。最终终端设备决定是否跳转至此AP。

802.11r (快速 BSS 转换)

802.11r (Fast BSS Transition) 定义了 STA 在同一移动域 (MD) 中的不同 AP 之间漫游时的交互细则,提供了实现 BSS 快速切换的标准。802.11r 快速漫游实现方法为:

  1. STA 首次关联 MD 内的 AP 时,利用 802.1x 认证获得的主会话密钥(MSK,由于该密钥为认证者和申请者共享,也称为成对主密钥PMK)和 MD 内各个 AP 的 R1KH_ID 计算出不同的 PMK_R1 分发给 MD 内的其它 AP;
  2. STA 切换 AP 时,STA 直接利用之前发送到目标 AP 上的 PMK_R1 协商出成对临时密钥(PTK)和组临时密钥(GTK),以此缩短漫游切换时间,避免再重复进行耗时的 802.1x 认证。

802.11r协议主要描述了四个部分的内容:密钥管理、FT初始化关联、快速切换和新增的信息元素。

漫游方案

有 AC + AP 方案,还有最近炒得火热的 Mesh 方案。

AC + AP 漫游方案

此方案依赖 AC 控制器。

低端的AC/AP方案,采用剔除模式来进行漫游。即AC为AP下发功率/信道/密码 等等参数后,主动剔除某AP下信号弱的终端,以强迫终端重新寻找 AP。

  • 优点:在 APs 的覆盖范围内,不用等终端或用户主动去切换信号好的 AP。终端设备无论走到哪都可以连接在信号质量最好的 AP 下。
  • 缺点:造成终端的短暂断网。

高端的 AC/AP 方案,除了剔除模式,还有负载均衡、802.11 k/v/r 协议等等,以使终端在切换 AP 的过程中不断网。价格十分昂贵。

Mesh

802.11 k/v/r 协议的基础上,加上自动化部署 APs 来实现的无缝漫游。
优势是组网和部署更灵活,即可用无线回程,也能插网线做有线回程。
缺点是不同的终端漫游效果不同,如 iPhone 完整的实现的802.11 k/v/r,所以它漫游效果最好。而 Android 手机版本太多,有的完全不支持 802.11 k/v/r 协议,有的只支持部分协议,所以有的手机漫游效果差有的手机漫游效果好。

现在的 Mesh 路由器一般都有一个主一个副,主路由具备一些AC的功能,通过特定协议来为副路由推送 WLAN 相关参数,免去手动配置副路由的步骤。

高通 - 芯片厂家

高通推出的 Wi-Fi SON 概念,就是利用 802.11 k/v/r 来实现漫游的。

所以只要是高通方案的路由器,厂商购买了高通的漫游版权,都可利用 802.11 k/v/r 来实现无缝漫游。

如 网件R7800,为高通方案的路由器。它支持 802.11 k/v
两台原厂固件的 R7800 ,一台做路由器,另一台开启 AP 模式,Wifi 设置为相同的参数,两台都在 “路由地址/debug.htm” 勾选802.11k,就可以开启无缝漫游模式了;或者其它路由器做主路由并关闭WIFI,两台R7800开启 AP模式并打开 802.11k,也可实现无缝漫游。
如下图:
R7800 Roaming

华硕ACRH17,Linksys(领势) 的EA7500/EA8300/EA9000 等高通方案的路由器,在原厂固件下,都可以实现无缝漫游。

无缝漫游经验总结

  1. 合理的射频规划和布局是无缝漫游的第一要素。保证信号的连续覆盖,重叠区域的设计能适应移动设备的漫游阈值,相邻AP信道要错开等等。
  2. 802.11 k/v 主要应用在商用大规模部署的场景,802.11r 也只是对 802.1x 认证的企业网络效果比较显著,家用场景的 PSK 认证速度本来就很快,所以只要做好了合理布局与规划,漫游切换基本就不会掉线了,如果再支持802.11r,漫游切换过程基本就无感知了。
  3. 终端设备对 802.11 k/v/r 的支持
  • iOS 设备触发漫游的阈值为 -70dbm,信号强度大于 -65dbm 时,优先连接5G频段。
    在决定漫游目标AP时,如果当前有数据传输,选择信号强度比当前AP高8dbm的AP,如果当前没有数据传输,选择高12dbm的AP。
  • iPhone 4s及以后的设备支持 802.11 k/r,iPhone 5s及以后的设备支持 802.11v
  • macOS不支持802.11 k/r
  • Windows 10在硬件允许的条件下支持802.11 k/v,在 802.1x 认证网络中支持 802.11r
  • 三星自 Note8 开始支持 802.11 k/v/r
  • 国产的手机未知。
  1. OpenWrt 开启 802.11r 只需设置802.11r Fast Transition这一个选项,其他不用动。
    在PSK认证的网络中,ft_over_ds这个选项没有意义,因为认证所需的信息都是在AP本地生成的,不涉及AP之间的通讯。(更新:看日志还是有区别的,ft_over_ds=1会有一条报错,虽然没有实际影响。建议还是设置ft_over_ds=0)
  2. 无论是同一 AP 还是不同 AP,它们的 5G 和 2.4G 频段之间都可以实现 802.11r 快速切换。
  3. 「Wi-Fi 魔盒」的漫游测试不是很靠谱,还是要以真实环境下 App 的实际表现为准,要知道是否进行了802.11r 快速切换,最准确的方法还是看日志。OpenWrt 在/etc/config/wirelessconfig wifi-device下增加一行option log_level ‘0’即可开启详细日志。
    802.11r快速切换的日志类似于这样:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Tue Jun 11 14:56:32 2019 daemon.debug hostapd: wlan1: STA 14:d0:0d:32:1a:58 IEEE 802.11: binding station to interface 'wlan1'
    Tue Jun 11 14:56:32 2019 daemon.debug hostapd: wlan1: STA 14:d0:0d:32:1a:58 IEEE 802.11: authentication OK (FT)
    Tue Jun 11 14:56:32 2019 daemon.debug hostapd: wlan1: STA 14:d0:0d:32:1a:58 MLME: MLME-AUTHENTICATE.indication(14:d0:0d:32:1a:58, FT)
    Tue Jun 11 14:56:32 2019 daemon.debug hostapd: wlan1: STA 14:d0:0d:32:1a:58 IEEE 802.11: association OK (aid 2)
    Tue Jun 11 14:56:32 2019 daemon.info hostapd: wlan1: STA 14:d0:0d:32:1a:58 IEEE 802.11: associated (aid 2)
    Tue Jun 11 14:56:32 2019 daemon.notice hostapd: wlan1: AP-STA-CONNECTED 14:d0:0d:32:1a:58
    Tue Jun 11 14:56:32 2019 daemon.debug hostapd: wlan1: STA 14:d0:0d:32:1a:58 MLME: MLME-REASSOCIATE.indication(14:d0:0d:32:1a:58)
    Tue Jun 11 14:56:32 2019 daemon.debug hostapd: wlan1: STA 14:d0:0d:32:1a:58 IEEE 802.11: binding station to interface 'wlan1'
    Tue Jun 11 14:56:32 2019 daemon.debug hostapd: wlan1: STA 14:d0:0d:32:1a:58 WPA: event 6 notification
    Tue Jun 11 14:56:32 2019 daemon.debug hostapd: wlan1: STA 14:d0:0d:32:1a:58 WPA: FT authentication already completed - do not start 4-way handshake

References:
Koolshare
Koolshare
docs-microsoft