码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2020-10-06 20:03:18      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:优先   ecif   inf   命令   disabled   app   its   ref   系统   

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

请访问原文链接:<https://sysin.org/article/use-5ghz-wifi/>,查看最新版

场景

在公共 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 适用):

/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport

创建链接:

# sudo mkdir -p /usr/local/bin
ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/local/bin/airport

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

aiprot 命令参数

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

$ 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

$ sudo airport --channel=36
# or
$ sudo airport -c=36

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

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

$ sudo airport --channel=44,80
# or
$ sudo airport -c=44,80

使用 Airtool 设置 Channel 和 Chanel Width 作用一样。

4、打开 Wi-Fi,重新连接 SSID

5、查看是否已经连接上了指定的 CHANNEL

按 Alt 键同时点击 Wi-Fi 图标或者执行命令:

$ airport -I

6、关闭漫游

Apple 规则:macOS 客户端将监控和保持当前 BSSID 的连接,直到 RSSI 越过 -75 dBm 的阈值。当 RSSI 越过该阈值后,macOS 会针对当前 ESSID 进行扫描,看是否存在候选的漫游 BSSID。

在 RSSI 超过 -75 dBm 的环境下,考虑关闭漫游在保持稳定的 Wi-Fi 连接。

$ 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.4Ghz 频段(似乎暂无实现途径),二是在本机屏蔽 2.4Ghz 网络的 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,就有可能引起传输不稳定。

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

标签:优先   ecif   inf   命令   disabled   app   its   ref   系统   

原文地址:https://blog.51cto.com/250823/2539793

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!