场景
在公共 Wi-Fi,SSID 单一(即一个网络名称),有多个 2.4 Ghz 和 5 Ghz 的 BSSID(某个接入点的 MAC 地址),如果 2.4Ghz 的信号较好,Mac 会主动连接到 2.4Ghz 网络上,网络异常卡顿,可能因为公共 Wi-Fi 有大量只能支持 2.4Ghz 频段的设备。
Apple 规则:macOS 将始终默认采用 5 GHz 频段而非 2.4 GHz 频段。前提条件是,5 GHz 网络的 RSSI 是 -68 dBm 或更好。
但是公共 Wi-Fi 📶 可能无法达到要求,导致可能优先使用了 📶 略强的 2.4 Ghz 频段。
使用 airport
工具
airport 默认位于如下路径(当前 10.15 适用):
1 | /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport |
创建链接:
1 | sudo mkdir -p /usr/local/bin |
备注:也可以使用 alias 并写入环境变量。
aiprot 命令参数
1 | LEGACY COMMANDS: |
可以看到,这些命令已经被 Apple 标识为 LEGACY COMMANDS(旧版命令),在最新版的 macOS 中可以执行。
在 OS X 10.6 之前的版本可以直接使用 airport 命令连接指定的 BSSID:
airport --associate=XXX --bssid=YYY
这里 XXX 即 SSID(网络名称),YYY 即 BSSID(MAC 地址)
该参数在 OS X 10.6 即以上版本中已经废弃
解决方案
1、扫描无线网络 scan
1 | airport -s |
可以看到相同 SSID 的多个 BSSID 的 CHANNEL,数值大于等于 36 的为 5Ghz CHANNEL,记录一个 RSSI 最小的 5Ghz CHANNEL 数字。
可以使用 WiFi Explorer Pro 等软件更加直观的查看。
2、将 Wi-Fi 关闭
3、设置 CHANNEL
1 | sudo airport --channel=36 |
通过第三方工具可以查看频段带宽,数值通常为:20Mhz、40Mhz(Wi-Fi 4),80Mhz(Wi-Fi 5),160Mhz(Wi-Fi 6)
可以加上额外的频段带宽参数,例如频段为 44,频段带宽为 80Mhz,如下:
1 | sudo airport --channel=44,80 |
使用 Airtool 设置 Channel 和 Chanel Width 作用一样。
4、打开 Wi-Fi,重新连接 SSID
5、查看是否已经连接上了指定的 CHANNEL
按 Alt 键同时点击 Wi-Fi 图标或者执行命令:
1 | airport -I |
6、关闭漫游
Apple 规则**:macOS 客户端将监控和保持当前 BSSID 的连接,直到 RSSI 越过 -75 dBm 的阈值。当 RSSI 越过该阈值后,macOS 会针对当前 ESSID 进行扫描,看是否存在候选的漫游 BSSID。**
在 RSSI 超过 -75 dBm 的环境下,考虑关闭漫游在保持稳定的 Wi-Fi 连接。
1 | sudo defaults write /Library/Preferences/com.apple.airport.opproam disabled -bool true |
该 plist 文件在当前系统(10.15)仍然存在,但比较遗憾,相关资料显示该 plist 仅仅被 10.10 或者 10.11 版本系统中所调用。
所以问题出现了,如果当前 RSSI 越过 -75 dBm 的阈值,macOS 在扫描网络后,可能又重新连接到了 2.4G 频段,进入了网络不稳定的死循环,这是笔者的真实体验,所以才有这篇文章。
结论
macOS 在 5 GHz 网络的 RSSI 是 -68 dBm 或更好时,默认始终优先连接 5 Ghz 频段,且当前 BSSID RSSI 不越过 -75 dBm 的阈值,客户端将保持稳定连接,不会产生漫游。
如果上述条件都不符合,airport
工具也无法解决问题。
此时有两个可能的解决思路:一是禁用无线网卡的 2.4 Ghz 频段(似乎暂无实现途径),二是在本机屏蔽 2.4 Ghz 网络的 MAC 地址( Linux 中通过 iptables 可以实现,BSD 中的 pf 通过 Tagging Ethernet Frames 的方式实现,macOS 的 pf 无法直接套用,有待研究)。
附录:名词解释
SSID:Service Set Identifier 的缩写,服务集标识。SSID 技术可以将一个无线局域网分为几个需要不同身份验证的子网络,每一个子网络都需要独立的身份验证,只有通过身份验证的用户才可以进入相应的子网络,防止未被授权的用户进入本网络。知识兔在使用电脑和手机搜索可接入网络时,显示出的网络名称就是 SSID。
BSSID:基本服务集标识符(Basic Service Set Identifier),是指站点的 MAC 地址,BSSID 的默认是对应的网卡的 MAC 地址(基准 MAC 地址)。如果一个 AP 可以同时支持多个 SSID 的话,则 AP 会分配不同的 BSSID 来对应这些 SSID,此时 BSSID 是根据基准 MAC 地址生成。
RSSI:RSSI(Received Signal Strength Indicator)是接收信号的强度指示。最理想的情况是 RSSI 为 0 dBm(dBm:表示功率绝对值的值,以 1 mW 功率为基准的一个比值)。但是在实际情况下,RSSI 只要大于 -50 dBm,就是信号非常好了;RSSI 一旦小于 -75 dBm,就有可能引起传输不稳定。
下载仅供下载体验和测试学习,不得商用和正当使用。
下载体验