1. 当前位置: 网站首页 >  路由器百科 >  路由器漫游开关802.11k和v是什么?手机死抱旧节点不撒手,我把这套「导航协议」翻了个底朝天

路由器漫游开关802.11k和v是什么?手机死抱旧节点不撒手,我把这套「导航协议」翻了个底朝天

802.11k/v漫游协议拆解:11k邻居报告给手机递名单、11v发搬家通知的对照与开启路径

家里Mesh组完网那阵子我一直有个疙瘩:走到卧室,手机明明离子路由就一堵墙,信号却显示着连客厅主路由那头的-82dBm,刷视频卡成幻灯片也不挪窝。这事我之前写漫游不切换那篇时治过一轮,靠挪子路由位置解决的。但文里留了个尾巴没展开:手机为什么这么轴?它切换前到底知不知道旁边有更好的节点?这阵子我把家里两台OpenWrt节点的漫游相关配置挨个翻了,答案藏在一对很多人没听过的编号里——802.11k和802.11v。路由器后台和网上教程张口就提「开11k/v」,但十个教程九个不说这俩到底各管什么,这次我连源码带日志拆明白了。

先泼冷水:手机漫游的「家法」,本来就没路由器什么事

要先立个规矩,不然这对开关容易被当成救命稻草。WiFi标准里,「什么时候切换」这个决定权默认在手机手里,不在路由器。每台手机厂商自己定漫游家法:信号掉到多低才走、走了先看谁、看多久。iPhone和安卓不一样,同是安卓,高通和联发科平台的策略又不一样。路由器急得跳脚也没用,人家手机不问你就动手了。

那路由器能做什么?两件事。802.11k管「递名单」,802.11v管「发通知」。手机切换前要扫描周围有哪些节点,传统做法是它自己挨个信道扫一遍,扫描期间没法传数据,这就是切换卡顿的一大来源;11k开了之后,路由器直接把自己知道的邻居节点名单(行话叫邻居报告,Neighbor Report)递给手机,内容是附近每个节点的频道、MAC地址这些,手机照着名单定向去查,省得满楼瞎逛。11v更进一步:路由器可以直接给手机发一条BSS过渡管理请求,说白了就是「搬家通知」——喂,隔壁那个节点信号更好,你挪过去。注意措辞,是建议,不是命令,接不接还是手机说了算。这就是它俩和11r的分界:11r管切得快不快,11k/v管知不知道、提不提这事。11r我写过,在小米Mesh漫游黏性那篇里有细账。

我家实测:这对开关默认多半是关的

先说结果免得你白翻后台:市面上一大半单台路由器,这对开关压根没暴露。我翻过的机器里,OpenWrt默认是关的(要手写UCI配置);小米原厂固件后台没有单独的11k/v选项,新固件的「漫游优化」类开关是打包处理,你分不清里面含没含;华硕的AiMesh在新固件里是默认集成开着的,它后台那个「漫游助手」调节的是触发阈值,不是开关本身。所以先去后台碰运气的可以省了,直接看下一节怎么办。

OpenWrt这边能看到实锤。SSH进路由器,看当前无线配置:

uci show wireless | grep -E "ieee80211k|bss_transition"

我家两台节点刷的是同一个固件版本,这条命令出来空的——默认全关。开起来是往每个wifi-iface段里加三个选项:

uci set wireless.@wifi-iface[0].ieee80211k='1'
uci set wireless.@wifi-iface[0].bss_transition='1'
uci commit wireless && wifi reload

这里有个我踩过的暗坑要交代:11k开的是「无线电资源测量」,11v开的是bss_transition这个选项,名字对不上号,网上教程抄来抄去,有人写ieee80211v='1',OpenWrt的配置脚本根本不认这个字段,静默忽略,你重启半天发现没生效。另外11k开上后邻居报告和信标报告这俩子选项会自动跟着默认打开,不用单独写。改完过几分钟,手机重连一次WiFi,然后就可以验证了。

怎么验证真的开了:抓一手日志比啥都强

改配置最怕的就是「以为开了」。验证分两层,都拿我家的实际输出说事。

第一层看手机有没有认这个能力。手机在连上WiFi的关联请求里,会顺带汇报自己支持哪些可选协议,hostapd会记进日志。看当前关联:

ubus call usteer get_clients

这个输出能告诉你每台设备现在连在哪个节点、信号多少——装usteer跑几天就能看出谁「赖着不走」。但设备认不认11k/v,得去翻关联时的日志,OpenWrt上敲logread | grep -i assoc,支持11k的手机关联记录里会带RRM(无线电资源测量)能力字段,没有的就是不认。我家四台设备里,2020年那台旧安卓翻遍日志都没有这字段——老机器压根不支持,你路由器喊破喉咙它也听不见。这点特别重要,后面还要说。

第二层看手机有没有真的用上。笔记本上敲netsh wlan show interfaces看当前BSSID(连的是哪个节点,具体怎么看我在解读netsh输出那篇写过),然后抱着笔记本从客厅走向卧室,边走边看BSSID跳没跳、跳的瞬间卡多久。我改配置前的对照数据是:走到卧室深处,BSSID死活不跳,信号-82dBm;改完后走到半路约-72dBm的位置,BSSID换成了子路由的MAC,过程里视频通话掉了不到半秒。要说多惊艳谈不上,但「死不撒手」的轴劲儿确实没了。

别高兴太早:三种情况开了也白开

这对开关不是万能钥匙,我在自己家和亲戚家各碰过失效的情况,提前列出来免得你空欢喜。

第一种,手机不支持。就像上面usteer输出里那台旧安卓,能力位是false的设备,名单递过去它不收,通知发过去它不理。安卓这边大体是系统版本越新支持越好,苹果这边支持得早而且积极响应11v的搬家通知——iPhone用户开11v的收益普遍比安卓明显。家里主力设备是老机器的,先死心,去走挪节点位置的老路。

第二种,节点之间根本不通气。11k递的邻居名单,得路由器知道「邻居是谁」才递得出来。两台各自为战的OpenWrt节点互相不知道对方存在,名单里就没内容,11v更无从建议。我第一轮配置失败就栽在这:只给主路由开了,子路由没开,ubus里看邻居列表空空如也。正经做法是两台都开,或者干脆装usteer让它们自动同步邻居信息——OpenWrt 21.02之后的软件源里直接opkg install usteer就有,装完它会自己监听两台节点的信号报告、帮手机做决策。这个小工具我在两台节点上都跑了小半年,稳。

第三种,覆盖重叠区没留够。路由器建议手机切换的前提是「隔壁确实更好」。要是子路由摆太远、中间隔着两堵承重墙,手机在卧室读到的子路由信号只有-85,比当前-82还烂,11v就算发了搬家通知,手机一算账也懒得动。两个节点之间留出一段信号重叠区(我家的经验是走动中两台都能读进-70以内的一段走廊),漫游决策才有得选。节点怎么摆、功率怎么配合,Mesh组网那篇里有完整的摆位思路,不重复展开。

一张表收拢:k、v、r三个编号各管哪段

这几个编号摆在一张表里才看得清边界,网上教程最大的混乱就是把仨混成一谈:

编号管什么一句话类比不开的后果
802.11k邻居报告,给手机递名单告诉你旁边有哪几个门手机切换前瞎扫,慢且费电
802.11vBSS过渡,发搬家建议推荐你走最近的那个门手机自己拿主意,经常轴着不走
802.11r快速切换,压缩握手时间过门手续简化切换瞬间卡一两秒

仨各管一段,互不顶替:k和v影响「切不切、往哪切」,r影响「切的时候卡多久」。真要较真顺序,11k是地基(没有名单后面都是空中楼阁),11v是加速决策,11r是善后。Mesh家庭三个都开收益最大,单路由家庭只有2.4G和5G双频之间漫游的话,也有一半的收益——双频合一开着时手机抱着2.4G不切5G,跟抱错节点是同一种轴法,双频那篇讲的「先关双频合一」是土办法,11k/v是协议层的正路,不冲突,土办法救急、协议管长期。

收个尾:按机器类型给三条路

折腾到这我算是想通了,这对开关的本质是把漫游从「手机猜」变成「全家商量」,但它对硬件和固件有门槛,不是人人够得着。按你家机器对号入座:

OpenWrt用户最顺手,照上面那三条uci命令开k和v,多节点再装个usteer,半天搞定,日志可查,是体验这套协议最完整的路。原厂Mesh用户(华硕AiMesh、网件Orbi这类)新固件里基本都默认集成,去后台确认固件是新的就行,别费劲找单独开关,找不到是正常的;华硕那个「漫游助手」阈值可以调,但属于锦上添花。小米和其他没暴露开关的原厂机器,协议这条路基本堵死,回到物理层想办法:挪节点、留重叠区、关双频合一,796那篇漫游黏性实测的顺序照着走,我后来给丈母娘家就是这么弄的,没碰任何协议,手机该切也切了。

还有个判断题留给你:要是你家手机全是不认11k/v的老机器,别硬上OpenWrt折腾这套,先把设备换代的事排进日程——协议再先进,听不懂的手机也白搭。漫游这事,路由器给梯子,下不下还得看手机。信号读数怎么判断该切不该切,-65dBm那篇的挡位表随时可以翻。

展开全文


版权说明 手机扫码阅读
版权所有:《数巢笔记》 => 《路由器漫游开关802.11k和v是什么?手机死抱旧节点不撒手,我把这套「导航协议」翻了个底朝天》
本文地址:https://www.shunot.com/lybk/1536.html
除非注明,文章均为 《SHUNOT》 原创,欢迎转载!转载请注明本文地址,谢谢。

发表评论

联系我们

在线咨询:点击这里给我发消息

微信号:master_135

工作日:9:00-23:00,节假日休息

扫码关注