Mac 如何强制使用 5G 频段 Wi-Fi

Posted by sysin on 2020-10-02
Estimated Reading Time 6 Minutes
Words 1.5k In Total
Viewed Times

作者:gc(at)sysin.org,主页:www.sysin.org

请访问原文链接:Mac 如何强制使用 5G 频段 Wi-Fi,查看最新版。

场景

在公共 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
2
# sudo mkdir -p /usr/local/bin
ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/local/bin/airport

备注:也可以使用 alias 并写入环境变量。

aiprot 命令参数

1
2
3
4
5
6
7
8
9
10
11
12
13
LEGACY COMMANDS:
Supported arguments:
-c[<arg>] --channel=[<arg>] Set arbitrary channel on the card
-z --disassociate Disassociate from any network
-I --getinfo Print current wireless status, e.g. signal info, BSSID, port type etc.
-s[<arg>] --scan=[<arg>] Perform a wireless broadcast scan.
Will perform a directed scan if the optional <arg> is provided
-x --xml Print info as XML
-P --psk Create PSK from specified pass phrase and SSID.
The following additional arguments must be specified with this command:
--password=<arg> Specify a WPA password
--ssid=<arg> Specify SSID when creating a PSK
-h --help Show this help

可以看到,这些命令已经被 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
2
3
4
5
6
7
8
9
10
11
12
13
14
$ airport -s
SSID BSSID RSSI CHANNEL HT CC SECURITY (auth/unicast/group)
aWiFi 80:f6:2e:b1:ca:85 -92 161,-1 Y CN NONE
ChinaNet 80:f6:2e:b1:ca:80 -92 161,-1 Y CN NONE
sysin.org a8:bd:27:75:b5:d0 -91 149 Y CN NONE
aWiFi 80:f6:2e:d7:3f:c5 -90 161,-1 Y CN NONE
sysin.org a8:bd:27:75:b7:50 -90 52 Y CN NONE
aWiFi 80:f6:2e:b1:d4:85 -89 161,-1 Y CN NONE
ChinaNet 80:f6:2e:b1:d4:80 -89 161,-1 Y CN NONE
ChinaNet 80:f6:2e:d7:3f:c0 -89 161,-1 Y CN NONE
TP5G b0:95:8e:af:d6:44 -88 149 Y CN WPA(PSK/AES/AES) WPA2(PSK/AES/AES)
sysin.org a8:bd:27:75:ba:30 -87 52 Y CN NONE
sysin.org a8:bd:27:75:d9:50 -84 36 Y CN NONE
......

可以看到相同 SSID 的多个 BSSID 的 CHANNEL,数值大于等于 36 的为 5Ghz CHANNEL,记录一个 RSSI 最小的 5Ghz CHANNEL 数字。

可以使用 WiFi Explorer Pro 等软件更加直观的查看。

2、将 Wi-Fi 关闭

3、设置 CHANNEL

1
2
3
$ sudo airport --channel=36
# or
$ sudo airport -c=36

通过第三方工具可以查看频段带宽,数值通常为:20Mhz、40Mhz(Wi-Fi 4),80Mhz(Wi-Fi 5),160Mhz(Wi-Fi 6)

可以加上额外的频段带宽参数,例如频段为 44,频段带宽为 80Mhz,如下:

1
2
3
$ sudo airport --channel=44,80
# or
$ sudo airport -c=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,就有可能引起传输不稳定。




如果文章中使用的内容和图片侵犯了您的版权,请联系作者删除。如果您喜欢这篇文章或者觉得它对您有用,欢迎您发表评论,也欢迎您分享这个网站,或者赞赏一下作者,谢谢!


支付宝打赏 微信打赏

赞赏一下