mesh伪概念和无线漫游原理讨论

最近在折腾超低成本全屋wifi,搜“无线mesh”,会发现网上有大量抄来抄去的错误的文章,少量的正确的文章。

省流:无线漫游只依赖802.11 k/v/r,和mesh没有任何关系。

省流2:mesh概念在家用路由器领域被大量误用,实际上应该是EasyMesh,而mesh和EasyMesh是两个完全不同的东西。

场景和概念预设

本文讨论的是家用场景,在墙壁较厚的情况下使用多个路由器覆盖全家,终端设备在不同路由器的覆盖范围内进行切换时,能够无缝地、自动地、快速地切换到其他高质量路由器,用户完全无感知,该需求被定义为“无线漫游”,或“全屋 WiFi”。

802.11s 和 mesh组网

802.11s

先看官方文档:

IEEE 802.11s 标准是 IEEE 802.11 标准的一个扩展,802.11s 允许多个无线节点之间直接互相连接,而无需再在中间添加新的 AP 。这里举一个简单的例子:比如你家里有一个 AP ,有两个笔记本 A 和 B 都连接到了这个 AP 上,那么笔记本 A 拷贝一个文件到 B 的过程就是这样的:A 将数据传输到 AP ,然后 AP 再将这些数据传输给 B 。在该场景中,A 和 B 之间所有的通信都是经过 AP 进行的。

IEEE 802.11s 则允许 A 和 B 在没有 AP 的情况下直接进行通信,而这并非 IEEE 802.11s 的最大用处 —— 无线多节点场景才是 IEEE 802.11s 真正大显身手的地方。通过 802.11s mesh 标准,网络节点能够在全无线的情况下组成多跳网络( multi-hop network ),这就意味着建立网络不再需要有线的基础设施了,这在很多场景下都能带来更便捷的体验——例如,一个救灾队伍中的多个支持 IEEE 802.11s 的笔记本电脑之间,即使无法直接相连,也能通过中间的其他节点实现通信。

IEEE 802.11s 标准定义了一个无线分布式系统(Wireless Distribution System, WDS) 。在大学中就有 WDS 具体实现的例子:校园里中一般都会装很多的 AP ,这些 AP 都有着相同的 SSID 。AP 通过 Ethernet 这类有线网络实现互联,用户能够无线连接到 AP 。802.11s 就相当于是把上面这个场景中连接各个 AP 的物理电缆换成了无线连接。这样就能够省下布线及维护等基础设施的开销,也提高了移动 AP 或添加新 AP 的灵活性。

参考官方链接:https://wireless.wiki.kernel.org/en/developers/documentation/ieee80211/802.11s

推论1:它是一种组网方式,让各个终端或AP之间能够通过MAC地址相互通信。

推论2:校园里多个AP之间可以通过mesh连接起来,省下电缆。

因此,802.11s关注的是 设备之间的连接协议 ,没有任何关于 漫游 的概念。

无线mesh

mesh组网是基于 802.11s 的上层实现,用于建立各个AP之间相互通信的通道,是一种去中心化的模型,在附近AP足够多的情况下,任意一个AP掉线后,其下的终端设备都可以通过其他AP继续上网,但如果关键位置的AP掉线了,可能没有一条合法的上网路径,从而整个子网瘫痪掉。

同样,无线mesh 关注的是 AP之间的连接,没有任何关于 漫游 的概念。

下面这个gif图形象解释了无线mesh的冗余容灾和多跳网络的特性。

有线mesh(常见伪概念)

常见错误观点:无线mesh是多个AP通过无线的方式连到同一个LAN下,因此多个AP通过有线方式连接到同一个LAN下,就称之为有线mesh。

最根本的在于 802.11 是无线协议,只要用到了网线,那必然不是 802.11、必然不是mesh,就不可能有“有线mesh”这个概念。

“抛开事实不谈”,我们继续讨论 mesh 的网状结构,在无线的情况下,10个AP放一起可以组成45组连接,在有线的情况下,将10个交换机用45根网线连起来,才能达到无线mesh同样的效果。这样的东西才能被称为有线mesh,这么高的成本,这概念难道不荒谬么。

继续“抛开事实不谈”,正常人布线,将10个交换机连到一个大交换机上,如果强行称之为mesh,这种星型拓扑,也和 mesh 的常见网状拓扑大相径庭。

EasyMesh协议

它是WiFi联盟提出的协议,背景是各个厂商对于自动配置mesh组网的实现都是私有协议,缺少统一的规范。

不同于802.11s的网格多跳复杂组网及低功耗考虑,EasyMesh采用树形组网,更强调易用和互联互通性。实际体验中,将所有的AP都通过有线或者无线的方式接到同一个LAN下,Controller角色的AP就会向所有的Agent角色的AP发送WPS(Wi-Fi Protected Setup Specification)消息,让所有的Agent都保持同一个SSID和Password。

除了自动配网功能外,还会交换各自的负载信息,从而指导AP进行 无线漫游

EasyMesh指定了 Backhaul,指Agent通过何种方式连接到Controller,可以使用有线或无线,称之为“有线回程”和“无线回程”。

例如:有线回程,Agent 和 Controller 都插在了同一个交换机下。

例如:无线回程,Agent只接了电源,通过隐藏的SSID与Controller建立连接。

EasyMesh不是mesh,EasyMesh不是mesh,EasyMesh不是mesh。重要的话说三遍

总结

mesh组网和 漫游 无关,802.11s和 漫游 无关。

802.11k/v/r 和 无线漫游

远古时期的同名WiFi

很久很久以前,会有这样一个现象:使用两台路由器,将SSID和密码都保持一致,使用电脑或手机查看附近的 WiFi,会发现列表中有两个一模一样的 WiFi,二者只是同名而已,没有关联性,相互之间切换需要数秒,体验极差。

近代的同名WiFi——例如“双频合一”功能

随着5G Wifi的普及,经常会看到这种一个SSID下挂着 2.4G 和 5G 两个频段的 Wifi。(iPhone直接就只有一个SSID)

2.4G穿墙好速度慢、5G穿墙差速度好,终端会自动选择合适的 Wifi 进行连接和切换,基本也是用户无感知的,因此在2.4G和5G之间进行切换属于一种“无线漫游”。

它基于 802.11k,例如部分路由器在关闭“双频合一”功能后,802.11k 的支持也会被关掉。

802.11 k

802.11k协议在 802.11k-2008 发布,后被合入到 802.11-2012 作为其中的特性,包含 Radio Resource Measurement of Wireless LANs 无线电资源度量。

在无线漫游的场景中,AP会周期性地对外发送 beacon,报文中部分 Information Element 是 802.11k 约定的,终端记录该AP的各项信息,最核心的是 RM Enabled Capabilities 的 neighbor report 标志位。

见 《802.11-2012》 8.4.2 Information elements

在终端认为当前信号较差的情况下,会向 AP 发送查询请求(neighbor report request),收到返回(neighbor report response),在返回数据里,解析出附近其他接入点的信息,从而选择保持现状或连入高质量的接入点。

见 《802.11k-2008》7.4.6.5 Neighbor Report Request frame format 和 11.10.9 Usage of the Neighbor Report

因此,在仅有 802.11k 的情况下,其实是能实现无线漫游的。但由于不同终端的策略不同,有的设备信号比较弱就会主动切换,有的设备信号很差时才会切换,此时可能已经卡得不行了,所以体验并不是非常好。

802.11 v

802.11v协议在 802.11v-2008发布,后被合入到 802.11-2012 作为其中的特性,包含无线网络管理Wireless Network Management,最核心的是 Network Assisted Roaming,允许 AP 向终端推送无线漫游的建议信息,因此很适合配合 802.11k。

除此之外,还用于和待机状态的手机通信,极低功耗下保持链接和心跳,从而省电。

802.11 r

似乎是快速认证,无所谓,家用用处不大,适用于 802.11x 企业级身份管理和认证情况下的加速认证。

如何验证路由器是否支持 802.11 kvr

PC端:下载软件 WinFi,这软件有 BUG,需要将日期设置到2022年4月之前,然后运行。(有生之年去研究一下,应该也不难,我不大熟Windows的 API)

安卓端:https://github.com/VREMSoftwareDevelopment/WiFiAnalyzer/releases 。至少需要安卓11,之前的版本没有该功能,我开发了该功能 https://github.com/VREMSoftwareDevelopment/WiFiAnalyzer/pull/459 ,预计在3.1.3以上版本会带上该功能。

iOS:想什么呢,高贵的 iOS 会开放这种不入流功能给你???

如何验证终端是否进行了漫游

Android/iOS:WiFi魔盒。原理是一边ping网关,一边查看连入的WiFi的BSSID,BSSID发生了变化即可认为进行了漫游。

无线漫游原理

做了那么多铺垫,无线漫游其实只需要如下三个条件:

  1. 所有的AP都使用相同的SSID和加密方式
  2. 所有的AP都开启至少 802.11k
  3. 客户端接入任意一个AP后,在网络拓扑中的角色不会发生变化。(例如所有AP都不开启DHCP、使用上一级路由的DHCP,客户端在AP之间切换时IP不变)

实践过程中,每个厂商的路由器设置都不一样,绝大部分成品路由器不提供 802.11k 的开关,没有上文说的术语。

例如浙江电信宽带送的九联路由器UNR030H1,开启双频合一才会有 802.11k,不然只有 802.11v。例如 https://www.acwifi.net/9909.html 《无线路由器支持漫游协议k、v、r查询库》中的记载。

如图,这就是关了双频合一的后果,802.11k直接没了

参考:

学习总结802.11kvr
https://zhuanlan.zhihu.com/p/653814009

How to verify whether 802.11k and 11r are enabled (via a capture) https://mac-wifi.com/how-to-verify-whether-802-11k-and-11r-are-enabled-via-a-capture/

CWSP-802.11r FT Association https://mrncciew.com/2014/09/06/cwsp-802-11r-ft-association/

方案对比

手动配无线漫游 vs 现代mesh路由器一键配网

2024年同品牌的路由器经常可以使用mesh一键配网的功能,和EasyMesh的功能差不多,相当于把手动配置的步骤全都自动地做一遍。由于没有使用过类似产品,所以只能脑补。

下同。

手动配无线漫游 vs AC+AP

场景1:买一堆杂牌路由器,关闭DHCP,连到同一个LAN下,配置SSID、密码、802.11k。

场景2:买正规的AC+AP产品(例如华为q6子母路由),直接一键使用。

既然消费者的直接需求是“无线漫游”,那么二者都是能满足基本要求的,只能说理想情况下,二者没有区别,实际体验下来有如下的差异:

  • 配置方便程度。丐版:麻烦,不知道插LAN口还是WAN口。ACAP:便捷。
  • 漫游临界区。丐版:各个路由器之间(可能)不会产生交互,漫游完全由客户端决定,实测下来经常信号很差也不给切换。ACAP:效果拔群,全程没有一点抖动,应该是AC可以收集所有AP的信息,从而使用802.11v做出最优决策。

网上常见的错误观点

错误1:厂商混淆视听的宣传,本路由器是 mesh路由器、支持mesh组网 等等等。

修正:错误宣传,mesh 是多个AP进行的冗余容灾组网,家用路由器【不可能】为这种场景设计。假设支持mesh,那在WinFi里的 's' 标记应当显示为 enabled,实际上显示为 disabled。实际上 “mesh路由器” 这个概念代表的功能是 “一键自动配网”、 “私有EasyMesh协议” 的意思。再次强调,mesh 和 EasyMesh 是两个完全不同的东西。

在这个错误的概念预设下,我们讨论如下的问题:

错误2:不同品牌的路由器不能mesh组网,因此不同品牌的路由器无法做全屋wifi。

修正:前半句勉强算对,但后半句是不对的,全屋wifi(无线漫游)和mesh无关,手动配置即可实现。

错误3:mesh分为有线mesh和无线mesh。

修正:mesh只能是无线的,且仅用于设备之间点对点通信,有线无线是无稽之谈。这里很可能本意是 EasyMesh 标准支持 有线回程 和 无线回程。有线的比无线的更稳定,因为无线需要占用信道中的带宽,无线和中继勉强有点像。

总结

  • 802.11 k/v/r 是 无线漫游相关的协议
  • 不同路由器,只要支持 802.11k,就能无线漫游,不支持802.11k,就不能无线漫游
  • 802.11 s 是 mesh相关的协议,家用网络中很少见
  • 网上经常说的mesh其实是厂商自研的EasyMesh类似物,属于自动配网的方案,不是mesh
  • 没有有线mesh,只有无线mesh,即使是无线mesh,在家用网络中也很少见