目录
1.Band Steering功能简介
在双频路由器中,支持2.4G和5G频段同时接入。当把两个AP的SSID设为相同时,终端(如手机、笔记本)的无线网卡在连接指定的SSID时,可能会连到不同的频段上。一般地,5G频段干扰少,我们会优先连接5G(也可以反过来,优先2.4G),这样,只要用路由器上的Band Steering功能,就可以让终端接入时优先使用指定的频段。
2.基本原理
我们知道,无线终端在一个环境中,首先会进行scan扫描,找到不同信道中的AP。这是通过在不同的信道中主动或被动的接收AP发出的beacon、probe response帧,获得AP信息。然后通过auth、association帧进行认证和关联,建立连接。Band Steering基本原理就是,在优先的频段上,对终端发出的帧进行回应,在非优先频段则有条件地回应,从而使得终端能优先连接到指定的频段上的AP。
Band Steering的算法可以由厂家自定义,没有统一的标准。各种算法大同小异,这里以RTL的驱动代码为例,简单讲一下基础算法。
首先定义prefer band和other band,代表指定优先使用的频段(5G或2.4G)和另外一个频段。数据结构有preferband队列和block队列,其中preferband队列存储已确认支持优先频段的终端信息,block队列存储在other band中暂时被拒绝连接的终端信息。模块中还有几个定时器:aging表示终端在优先频段中正常处理的时间长度;timerX是终端在block队列中阶段1的时长;timerZ是终端在block队列中阶段2的时长。当定时器超时后,终端将会被移出相应的队列。
3.流程

上图描述了prefer band中接收到probeReq帧的处理流程。
- 首先把STA加入preferband队列(如果原来已经加入,则只把aging=0);
- 如果RSSI太低,表明信号弱;而STA如果并没有加入block队列,表明它可以与other band进行连接,这时算法决定让STA连接other band;
- 否则,表明prefer band对STA来说,是可以连接的,进行正常帧处理。
下面再看一下other band接收到probeReq的处理流程:

- 在other band中接收到probeReq,先检查是否在block队列中,是则忽略此帧,目的是让终端可以尝试连接prefer band;
- 如果不在block队列中,再检查是否在preferband队列中,如果是,则表明应该优先连接perfer band,于是把STA加入block队列,暂时阻止其连接other band;如果不在preferband队列,则表明终端可能只支持other band频段,于是走正常处理流程。
后续在prefer band中接收到auth或association帧,要检查此STA是否在preferband队列中,是则正常处理,否则忽略;
在other band中接收到auth或association帧,要检查STA是否在block队列中,是则忽略,否则正常处理。
aging定时器是保证一段时间后,可以把preferband队列中STA进行清除,避免长期记忆的副作用;timerX、timerZ是避免STA被长期锁定在block队列中。aging超时默认值300秒,timerX超时默认值300秒,timerZ超时默认值20秒。
4.总结
Band Steering功能并不复杂,主要考虑避免出现无法连接上的异常情况。要兼容只支持一个频段的终端能正常连接。对支持两个频段的终端,在算法上一定要保证不出现错误选择,同时也可以考虑其他因素对频段选择结果的影响。上面的流程中引入了对RSSI强度的判断,如果RSSI太弱,算法上会放弃preferband的选择,改作使用other band。