Android Wi-Fi 網絡選擇

本頁概述了 Android 12 中用於選擇和切換 Wi-Fi 網絡的算法和過程。 Android 不斷評估連接網絡的質量並評估可用網絡的質量。

自動連接的壽命

這描述了 Android 設備如何評估和連接到可用 Wi-Fi 網絡的過程。

  1. 設備根據屏幕是打開還是關閉,通過以下方式之一掃描可用網絡。

    • 屏幕開啟(已連接): Android 連接子系統會定期評估當前連接是否足夠好以跳過掃描(如屏幕開啟掃描中所定義)。如果連接不足以跳過掃描,則連接子系統會觸發掃描以檢測可用網絡。這些掃描也可以由其他系統組件觸發,例如定位系統或應用程序(包括設置應用程序)。
    • 屏幕開啟(斷開連接): Android 連接子系統按照指數退避計劃發出定期掃描。該模塊評估收到的所有掃描結果並嘗試選擇要連接的最佳網絡。
    • 屏幕關閉(斷開連接):主機 CPU 在屏幕關閉後立即使用首選網絡卸載 (PNO) 掃描使用首選網絡列表對固件進行編程。如果找到任何首選網絡,固件就會喚醒主機。 AOSP 假定設備支持 PNO。

    WifiManager#allowAutojoinGlobal(boolean)方法可用於禁用自動連接。這是一個特權 API,設備製造商可以在有限的情況下使用(例如,非移動、預配置的設備)。

    如果設備已連接並且config_wifi_framework_enable_associated_network_selection覆蓋設置為false ,則不執行連接掃描並且掃描結果不會觸發網絡選擇。此設置在設備斷開連接時無效,這意味著仍然會進行連接掃描和網絡選擇。

  2. 評估掃描結果。

    • 如果設備連接到 Wi-Fi 網絡,框架會評估當前網絡是否足夠好以跳過網絡選擇

      如果滿足以下任何要求,則網絡被定義為足以跳過網絡選擇

      • 自上次選擇網絡後不到 10 秒。
      • 用戶最近手動連接到網絡(最近可以使用config_wifiSufficientDurationAfterUserSelectionMilliseconds覆蓋進行配置)。
      • 設備已連接到在線註冊 (OSU) 連接。
      • 滿足以下所有要求:

        • RSSI 高於所需的 RSSI 閾值或有足夠的流量通過連接(請參閱屏幕上的 RSSI 和流量閾值掃描)。
        • 網絡經過驗證(連接到互聯網)或用戶批准在沒有互聯網訪問的情況下使用。
    • 如果網絡足夠好,可以跳過網絡選擇,則不採取進一步行動。

    • 如果連接的 Wi-Fi 網絡不夠好或設備未連接到網絡,則框架會調用網絡提名器以生成候選 Wi-Fi 網絡列表,以根據過濾後的掃描結果連接到該列表。網絡提名者查找現有 Wi-Fi 配置或為候選網絡創建新配置。

    • 過濾掃描結果以刪除 RSSI 低於條目 RSSI 的 BSSID(可使用config_wifi_framework_wifi_score_entry_rssi_threshold_24GHzconfig_wifi_framework_wifi_score_entry_rssi_threshold_5GHzconfig_wifiFrameworkScoreEntryRssiThreshold6ghz覆蓋進行配置)。此外,會過濾被阻止的 BSSID。 BSSID 可以基於重複的連接失敗、頻繁的斷開連接以及來自 AP 的明確請求在特定時間段內不嘗試關聯 (MBO-OCE) 被阻止。 BSSID 阻塞在下面的SSID 和 BSSID 阻塞中描述。

    • 當設備快速移動時,可以選擇進一步過濾掃描結果以刪除 RSSI 快速變化的 BSSID(表明它們沒有與設備一起移動)。此優化可使用config_wifiHighMovementNetworkSelectionOptimizationEnabled (啟用/禁用優化)以及config_wifiHighMovementNetworkSelectionOptimizationScanDelayMsconfig_wifiHighMovementNetworkSelectionOptimizationRssiDelta覆蓋配置,它們配置對掃描結果的穩定性要求(RSSI 更改掃描結果在時間上充分分離)。

  3. 該框架運行候選評分器以生成每個服務集標識符 (SSID) 候選的分數。 SSID 候選可以包括多個基本服務集標識符 (BSSID) 候選(由網絡提名者生成)。得分最高的候選人為獲勝候選人

  4. 該框架執行用戶連接選擇算法,這可能使用戶選擇的網絡成為新的獲勝候選者,而不是使用來自候選評分者的獲勝候選者。

  5. 該框架確定獲勝的候選人是否與當前連接的網絡匹配。要被視為匹配,必須滿足以下條件之一:

    • 獲勝的候選人和連接的 Wi-Fi 網絡具有相同的 BSSID。
    • 如果固件漫遊可用(包括 BSSID 黑名單功能),獲勝的候選者和連接的網絡具有相同的 SSID 和安全類型。

    如果獲勝的候選人與當前連接的網絡匹配,則不採取進一步的行動。如果獲勝候選者與網絡不匹配,則該設備與獲勝候選者相關聯。

請注意,當應用程序使用Wi-Fi 網絡請求 API時,自動網絡連接被禁用,該 API 會覆蓋系統並創建無互聯網 LAN,但支持雙並發站點的設備除外。

連接網絡的評估

Android 框架或固件會定期評估連接網絡的質量。本節介紹當屏幕打開或關閉時如何評估連接的網絡。

除了上面討論的網絡選擇之外,還進行了此評估。

屏幕開啟

Android 框架通過以下方式評估連接的網絡:

  1. Wi-Fi 服務每 3 秒輪詢一次 RSSI 和鏈路層統計信息(可使用config_wifiPollRssiIntervalMilliseconds覆蓋進行配置)。
  2. Wi-Fi 服務根據 RSSI 和鏈路層統計數據計算連接分數。
  3. Wi-Fi 服務將分數傳遞給連接服務,該服務使用分數來確定是連接到 Wi-Fi 網絡還是連接到其他可用網絡類型,例如蜂窩網絡。

屏幕關閉

該框架不會在連接的網絡上啟動評估,但如果掃描由其他組件(例如,定位服務)啟動,網絡選擇過程仍可能發生。固件會評估網絡質量,如果網絡質量不好,固件可能會漫遊或(最終)與網絡斷開連接並喚醒主機。

連接掃描

根據設備是否打開屏幕、關閉屏幕並連接到 Wi-Fi 或關閉屏幕但未連接到 Wi-Fi 自動執行掃描。

屏幕開啟

當屏幕打開時,框架會以增加的間隔觸發掃描決策。掃描決策間隔由config_wifiDisconnectedScanIntervalScheduleSecconfig_wifiConnectedScanIntervalScheduleSecconfig_wifiSingleSavedNetworkConnectedScanIntervalScheduleSec覆蓋(整數數組)配置。默認情況下,使用 20、40、80 和 160 秒的指數退避間隔進行掃描,隨後的掃描可能以 160 秒的間隔執行(這些是上述覆蓋的默認值)。

每當屏幕狀態發生變化(即屏幕打開或關閉時),指數退避掃描間隔就會重置並在 20 秒後重新啟動。

是否執行或跳過掃描的決定取決於當前網絡連接是否足夠好以跳過掃描。如果滿足以下任何要求,則連接足以跳過掃描

  • 設備已連接到在線註冊 (OSU) 連接。
  • 有足夠的流量流經連接(請參閱下面的流量閾值)。
  • RSSI 高於所需的 RSSI 閾值(請參閱下面的 RSSI 閾值),並且最近執行了網絡選擇(默認情況下為 10 分鐘,但可以使用config_wifiConnectedHighRssiScanMinimumWindowSizeSec覆蓋進行配置),並且網絡已驗證(連接到互聯網)或用戶- 批准在沒有互聯網訪問的情況下使用。

RSSI 和流量閾值為:

  • 對於 2.4 GHz 頻段,RSSI 高於 -73 dBm,配置了config_wifi_framework_wifi_score_low_rssi_threshold_24GHz覆蓋,或 -70 dBm 用於 5 GHz 和 6 GHz 頻段,配置了config_wifi_framework_wifi_score_low_rssi_threshold_5GHzconfig_wifiFrameworkScoreLowRssiThreshold6ghz覆蓋。
  • 使用config_wifiFrameworkMinPacketPerSecondActiveTraffic覆蓋配置的流量(傳輸或接收)高於每秒 16 個數據包 (pps)。

屏幕關閉並連接到 Wi-Fi

當屏幕關閉且設備連接到 Wi-Fi 網絡時,固件 (Wi-Fi SoC) 會執行漫遊掃描。屏幕關閉時,框架不會執行任何掃描。

屏幕關閉且未連接到 Wi-Fi(斷開連接狀態)

當屏幕關閉且 Wi-Fi 斷開連接時,固件會執行PNO掃描以查找 SSID。該框架使用要掃描的 SSID 列表和要掃描的通道列表來配置固件。如果找到配置的 SSID,固件將喚醒框架。

該框架還配置固件執行 PNO 掃描的間隔,使用設備移動狀態來選擇不同的掃描間隔。在低移動性狀態(設備靜止)中,前三個掃描的間隔為 60 秒(由config_wifiStationaryPnoScanIntervalMillis覆蓋控制),後續掃描的間隔為 180 秒(覆蓋的固定 3 倍)。在高移動性狀態下,前三個掃描的間隔為 20 秒(由config_wifiMovingPnoScanIntervalMillis覆蓋控制),後續掃描的間隔為 60(覆蓋的固定 3 倍)秒。

網絡提名人

網絡提名者為以下網絡查找或創建配置 ( WifiConfiguration ):

  • 當前可用(基於掃描結果)或當前連接的網絡(有時會從不穩定的掃描結果中丟失)。
  • 具有最小的 RSSI。 2.4 GHz 頻段的最小 RSSI 為 -80 dBm,5 GHz 和 6 GHz 頻段的最小 RSSI 為 -77 dBm,可使用config_wifi_framework_wifi_score_entry_rssi_threshold_24GHzconfig_wifi_framework_wifi_score_entry_rssi_threshold_5GHzconfig_wifiFrameworkScoreEntryRssiThreshold6ghz覆蓋進行配置。
  • 未阻止,例如,由於之前的連接失敗。
  • 網絡並未指示它不可用(例如,使用 MBO/OCE)。
  • 可以與使用設備上可用的憑據相關聯。

使用以下網絡提名人:

  • 已保存的網絡提名人:評估所有已保存的網絡(包括已保存的 Passpoint 訂閱)。
  • 建議的網絡提名者:使用Suggestion API評估應用程序提供的所有網絡(包括建議的 Passpoint 訂閱)。
  • 外部評分網絡提名者:為設備提供網絡連接選項的 OEM 機制。有關詳細信息,請參閱外部網絡評級提供商

候選記分員

候選人評分員評估並為每個候選人提供分數。 ThroughputScorer (默認記分器)的得分基於以下幾點:

  • 基礎分數基於 RSSI 計算,其中 2.4 GHz 頻段的 RSSI 上限為 -73 dBm,5 GHz 和 6 GHz 頻段的 RSSI 上限為 -70 dBm(使用config_wifi_framework_wifi_score_low_rssi_threshold_24GHzconfig_wifi_framework_wifi_score_low_rssi_threshold_5GHzconfig_wifiFrameworkScoreLowRssiThreshold6ghz覆蓋配置)
  • 基於從技術、信道頻率、帶寬、RSSI、信道條件、空間流的最大數量和其他參數得出的吞吐量估計來計算分數提升。分數提升可使用config_wifiFrameworkThroughputBonusNumeratorconfig_wifiFrameworkThroughputBonusDenominator覆蓋進行配置,並限制為使用config_wifiFrameworkThroughputBonusLimit覆蓋指定的最大值。
  • 最近由用戶或應用程序選擇的候選網絡在使用config_wifiFrameworkLastSelectionMinutes覆蓋可配置的持續時間內獲得很大的分數提升(在該持續時間內,網絡保證在非用戶選擇的網絡上被選擇)。
  • 與當前網絡匹配的候選人會獲得由config_wifiFrameworkCurrentNetworkBonusMinconfig_wifiFrameworkCurrentNetworkBonusPercent覆蓋配置的分數提升(它會根據其 RSSI 和基於吞吐量的分數的百分比獲得額外獎勵,降至可配置的最小值)。
  • 安全網絡的得分高於開放網絡。獎金是使用config_wifiFrameworkSecureNetworkBonus覆蓋配置的。
  • 未計量(免費)網絡的得分高於計量(付費)網絡。獎金是使用config_wifiFrameworkUnmeteredNetworkBonus覆蓋配置的。
  • 保存的網絡得分高於使用 Suggestion API 建議的網絡。獎金是使用config_wifiFrameworkSavedNetworkBonus覆蓋配置的。
  • 不受信任的網絡(可以作為 Suggestion API 的一部分請求)的得分低於任何其他網絡。
  • 如果設備當前連接到另一個可以訪問 Internet 的網絡,則先前檢測到沒有 Internet 的網絡得分為 0。

已保存與建議和未計量與計量(即默認疊加值)的默認獎勵為已保存、建議、計量和未計量產生嚴格的優先級順序:

  1. 保存的未計量網絡
  2. 建議的不限流量網絡
  3. 已保存的計量網絡
  4. 建議的計量網絡

這意味著始終先選擇已保存的未計量(免費)網絡,然後再選擇已保存的計量(付費)網絡。最近選擇的(由用戶或應用程序)得分獎勵可能會覆蓋該嚴格的優先級。

該框架可以安裝多個候選記分器,但一次只能激活一個。其他記分器可用於度量(研究替代算法)。在 Android 11 中,默認記分器是ThroughputScorer

SSID 和 BSSID 阻塞

框架可能會阻止 SSID 和/或 BSSID,也就是說,暫時或永久不考慮將它們用於連接。

BSSID 阻塞

BSSID 阻塞的工作原理是為每個特定的故障類型保留兩個故障計數器,一個連續故障計數器和一個連續故障計數器(請參閱下面的故障類型列表)。發生故障時:

  • 相應故障類型的計數器遞增。
  • 如果達到該故障類型的故障閾值:
    • BSSID 被阻止。
    • 失敗的連續計數器增加。

BSSID 被阻止的持續時間從(可配置的)基值(由config_wifiBssidBlocklistMonitorBaseBlockDurationMsconfig_wifiBssidBlocklistMonitorBaseLowRssiBlockDurationMs覆蓋層指定,具體取決於 RSSI)開始,並以指數方式增加到可配置的上限(由config_wifiBssidBlocklistMonitorFailureStreakCap覆蓋層指定)。如果同一 BSSID 上連續發生故障,則持續時間會增加。持續時間是基礎持續時間隨著失敗次數呈指數增長,也就是說,失敗次數為 2 意味著 4 倍的基礎塊持續時間。

BSSID 阻塞的閾值取決於失敗原因,並且每個都可以使用覆蓋進行自定義:

  • AP 拒絕使用 MBO/OCE無法處理新 STA代碼的關聯: config_wifiBssidBlocklistMonitorApUnableToHandleNewStaThreshold
  • 通過此網絡的 Internet 驗證失敗: config_wifiBssidBlocklistMonitorNetworkValidationFailureThreshold
  • 錯誤密碼認證失敗代碼: config_wifiBssidBlocklistMonitorWrongPasswordThreshold
  • EAP 網絡的 EAP 失敗身份驗證失敗代碼: config_wifiBssidBlocklistMonitorEapFailureThreshold
  • 關聯拒絕,其他一般關聯拒絕: config_wifiBssidBlocklistMonitorAssociationRejectionThreshold
  • 關聯超時: config_wifiBssidBlocklistMonitorAssociationTimeoutThreshold
  • 身份驗證失敗,其他一般身份驗證失敗: config_wifiBssidBlocklistMonitorAuthenticationFailureThreshold
  • DHCP 失敗,無法配置 DHCP: config_wifiBssidBlocklistMonitorDhcpFailureThreshold
  • 異常斷開,設備在連接後很短的時間內就斷開了網絡: config_wifiBssidBlocklistMonitorAbnormalDisconnectThreshold 。時間窗口可通過config_wifiBssidBlocklistAbnormalDisconnectTimeWindowMs進行配置。

BSSID 黑名單清除條件

在以下情況下,BSSID 將從阻止列表中清除:

  • Wi-Fi 已切換:從阻止列表中刪除所有 BSSID。
  • 用戶點擊 Wi-Fi 選擇器中的網絡:用戶選擇的網絡的所有 BSSID 都將從阻止列表中刪除。
  • 超時:當達到阻止持續時間時,BSSID 將從阻止列表中刪除。
  • 重新啟動:清除所有阻止列表。
  • 網絡已刪除:與此網絡關聯的所有 BSSID 均已從阻止列表中刪除。

失敗和條紋計數器重置條件:

  • 重啟:重置所有 BSSID。
  • 網絡已移除:重置與網絡關聯的 BSSID。
  • L2 連接成功:重置以下錯誤代碼。

    • REASON_AP_UNABLE_TO_HANDLE_NEW_STA
    • REASON_WRONG_PASSWORD
    • REASON_EAP_FAILURE
    • REASON_ASSOCIATION_REJECTION
    • REASON_ASSOCIATION_TIMEOUT
    • REASON_AUTHENTICATION_FAILURE
    • REASON_ABNORMAL_DISCONNECT (僅當設備最後一次連接到此 BSSID 的時間超過 3 小時前,才會有條件地清除)
    • REASON_NONLOCAL_DISCONNECT_CONNECTING
  • 網絡驗證成功:重置以下錯誤代碼。

    • REASON_NETWORK_VALIDATION_FAILURE
  • DHCP 配置成功:重置以下錯誤代碼。

    • REASON_DHCP_FAILURE

SSID 阻塞

SSID 阻塞的工作方式與 BSSID 阻塞類似。當發生連接故障(該類型)時,每個網絡的每種故障類型的故障計數器都會增加。當特定類型的故障計數超過閾值時,SSID 將根據配置被永久或臨時阻止。每種故障類型的配置編碼在WifiConfiguration.NetworkSelectionStatus.DISABLE_REASON_INFOS中,總結如下。

* 對於暫時禁用的網絡,禁用持續時間會根據網絡上經歷的連續連接失敗次數動態變化。一個網絡連續五次連接失敗後,每次失敗都會導致禁用持續時間是上一次持續時間的兩倍。例如,連續出現五次故障的網絡將被禁用 5 分鐘,然後在第六次故障時禁用 10 分鐘,第七次故障時禁用 20 分鐘,依此類推,最長限制為 18 小時。

故障碼描述臨界點基礎禁用持續時間*禁用類型
DISABLED_DHCP_FAILURE未能配置 DHCP 5 5分鐘暫時的
DISABLED_NO_INTERNET_TEMPORARY網絡驗證失敗,但用戶聲明他們希望將來繼續連接到此網絡1 10分鐘暫時的
DISABLED_AUTHENTICATION_NO_CREDENTIALS請求者缺少連接到網絡的憑據1不適用永恆的
DISABLED_NO_INTERNET_PERMANENT網絡驗證失敗的默認值1不適用永恆的
DISABLED_BY_WIFI_MANAGER已棄用和未使用1不適用永恆的
DISABLED_BY_WRONG_PASSWORD密碼錯誤,此網絡從未連接成功1不適用永恆的
DISABLED_AUTHENTICATION_NO_SUBSCRIPTION未訂閱 SIM 卡的 EAP 故障1不適用永恆的
DISABLED_ASSOCIATION_REJECTION關聯拒絕失敗5 5分鐘暫時的
DISABLED_AUTHENTICATION_FAILURE其他身份驗證失敗(即不是密碼錯誤或 EAP 失敗) 5 5分鐘暫時的
DISABLED_AUTHENTICATION_PRIVATE_EAP_ERROR提供商特定的(私有)EAP 故障。 1不適用永恆的
DISABLED_NETWORK_NOT_FOUND請求者未能在掃描結果中找到與框架請求連接的網絡匹配的網絡(包括網絡功能)。 2 5分鐘暫時的
DISABLED_CONSECUTIVE_FAILURES網絡連續五次或更多次連接失敗。這些故障的故障類型包括但不限於此表中列出的故障類型。
5 5分鐘暫時的

在以下情況下重新啟用臨時禁用的網絡:

  • 禁用持續時間已過。
  • 用戶手動選擇要連接的網絡。
  • 用戶切換 Wi-Fi。
  • 系統重新啟動。

在以下情況下重新啟用永久禁用的網絡:

  • 用戶手動選擇要連接的網絡。

網絡故障計數器在以下情況下重置:

  • 網絡被刪除。
  • 設備已成功連接到網絡。
  • 禁用持續時間超時後,網絡已重新啟用。
  • 用戶手動選擇要連接的網絡。
  • 系統重新啟動。

記分卡

Android 10 中引入的記分卡記錄有關 BSSID 的設備統計信息。使用IpMemoryStore服務保存記分卡。

Android 11 網絡選擇中不使用記分卡。

用戶連接選擇

Android 有一個用戶連接選擇算法,允許選擇過程優先選擇用戶已明確連接到的 Wi-Fi 網絡,例如家庭網絡。即使性能低於公共網絡,用戶也可能更喜歡此類網絡而不是公共網絡,因為它們提供了額外的服務,例如控製家庭設備的能力。

通過在用戶選擇網絡時標記所有可見的 Wi-Fi 配置及其信號強度來捕獲用戶對網絡的偏好。如果在自動選擇過程中選擇了標記的 Wi-Fi 配置之一併且用戶選擇的網絡可用,則如果滿足以下條件,用戶連接選擇算法將使用用戶選擇的網絡覆蓋選擇:

  • 用戶連接選擇網絡在上次使用時可以訪問互聯網
  • 用戶連接選項的信號強度並不比最初選擇時的信號強度差。可以使用覆蓋配置config_wifiEstimateRssiErrorMarginDb配置此誤差範圍。

用戶連接選擇網絡在重新啟動後仍然存在。用戶連接選項適用於已保存的網絡、Passpoint 網絡和建議網絡。

雙並發站

本節介紹設備支持同時連接兩個 Wi-Fi 網絡時的 Wi-Fi 網絡選擇。

先做後斷

如果啟用了make-before-break功能,設備會先嘗試連接新網絡,然後再斷開舊網絡。 make-before-break 流程使用與 break-before-make 網絡切換相同的網絡選​​擇算法(即設備在連接到新網絡之前斷開與舊網絡的連接)。如果網絡選擇算法選擇了一個無法使用 make-before-break 切換的網絡,則設備會自動回退到 break-before-make。

並發受限和互聯網連接

如果啟用了並發限制和互聯網連接功能,設備可以連接到輔助限制 Wi-Fi 網絡,該網絡僅適用於選擇設備製造商配置的應用程序。設備製造商對此進行配置的說明在並發受限和互聯網連接中。

當網絡選擇算法檢測到與 OEM 付費/私人建議匹配的掃描結果時,它會自動連接到它作為第二個網絡。主要 Wi-Fi 網絡(為常規應用程序提供 Internet 連接)的網絡選擇通常是並行進行的。

常見問題 (FAQ)

  1. 安全網絡總是優先於開放網絡嗎?

    否。保存與建議以及計量與未計量是評估網絡的主要類別。在每個類別中,安全網絡都比開放網絡具有一定的優先級,但連接質量的權重要高得多。

    原因是實際的用戶數據安全是由端到端加密(例如 TLS)提供的。安全網絡只加密通信的第一站,即使這樣,對於具有預共享密鑰的網絡,也不能提供太多隱私。

  2. 為什麼保存的網絡優先於建議的網絡?

    保存的免費(未計量)網絡優先於建議的免費網絡,保存的計量網絡優先於建議的計量網絡。

    保存的網絡優先於建議的網絡,因為保存的網絡是用戶明確添加到設備的網絡。這意味著在可能的情況下傾向於連接到這些網絡。

    請注意,用戶可以禁用個別已保存網絡的自動連接行為,即表明這些網絡僅供手動使用,設備不會自動考慮。

  3. 我可以更改嚴格的優先順序或完全刪除它嗎?

    設備製造商可以通過修改以上部分中列出的獎勵覆蓋來修改網絡選擇決策。但是,不建議更改默認值,因為它們是在仔細考慮了多個用例後選擇的。