Wi-Fi STA/STA 동시 실행

Android 12에 기기가 동시에 두 개의 Wi-Fi에 연결할 수 있는 Wi-Fi STA/STA 동시 실행 기능이 추가되었습니다. 이 선택적 기능은 다음 기능을 사용 설정합니다.

  • make-before-break: 기기가 새 Wi-Fi 네트워크에 연결한 후에 기존 연결을 해제합니다. 따라서 Wi-Fi 네트워크 간 전환이 더 매끄럽게 이루어집니다.
  • 로컬 전용 연결 및 인터넷 연결 동시 실행: 기기가 기기에 인터넷을 제공하는 기본 연결을 중단하지 않고 로컬 전용 네트워크에 연결합니다.
  • 제한된 연결 및 인터넷 연결 동시 실행: 기기가 기기에 인터넷을 제공하는 기본 연결을 중단하지 않고 제한된 네트워크(권한 있는 특정 앱만 사용 가능한 네트워크)에 연결합니다.
  • (Android 13 이상) 인터넷 연결이 있는 여러 네트워크 동시 실행: 기기가 모든 앱에서 사용할 수 있고 제한이 없으며 인터넷 연결을 제공하는 두 개의 네트워크에 연결됩니다.

이 페이지에서는 이 기능이 사용 설정된 경우의 기기 동작과 기기 제조업체 및 공급업체를 위한 구현 세부정보를 설명합니다.

구현

Wi-Fi STA/STA 동시 실행을 구현하려면 기기에서 다음을 지원해야 합니다.

  • Wi-Fi 칩 또는 펌웨어가 두 개의 동시 STA 연결을 지원해야 합니다. 펌웨어는 두 연결 모두의 모든 채널 및 대역 조합을 지원해야 합니다. 성능 문제를 피하려면 2x2+2x2 DBS 지원 Wi-Fi 칩을 사용하는 것이 좋습니다.

  • 기기가 공급업체 HAL 버전 1.5의 다음 API를 지원해야 합니다.

    • IWifiChip.setMultiStaPrimaryConnection()
    • IWifiChip.setMultiStaUseCase()
  • HAL Wi-Fi 인터페이스 조합은 [{STA} <= 2, ...]와 같은 사양 형식을 사용하여 노출된 두 개의 동시 AP 인터페이스 가져야 합니다. 자세한 내용은 Wi-Fi 다중 인터페이스 동시 실행을 참고하세요.

이러한 기본 요건을 충족했다면 다음과 같이 Wi-Fi STA/STA 동시 실행을 구현합니다.

  1. 런타임 리소스 오버레이(기본적으로 사용 중지됨)를 사용하여 하나 이상의 기능을 개별적으로 사용 설정합니다.

    • make-before-break: config_wifiMultiStaNetworkSwitchingMakeBeforeBreakEnabled
    • 로컬 전용 연결 및 인터넷 연결 동시 실행: config_wifiMultiStaLocalOnlyConcurrencyEnabled
    • 제한된 연결 및 인터넷 연결 동시 실행: config_wifiMultiStaRestrictedConcurrencyEnabled
    • 인터넷 연결이 있는 여러 네트워크 동시 실행: config_wifiMultiStaMultiInternetConcurrencyEnabled
  2. 아래 각 섹션의 설명에 따라 각 구현을 검증합니다.

Wi-Fi STA/STA 동시 실행을 더 효과적으로 지원하려면 OEM 맞춤설정 프레임워크와 앱은 단일 네트워크의 WifiInfo만 반환하며 Android 12에서는 지원 중단된 WifiManager#getConnectionInfo() 대신 NetworkCallback#onCapabilitiesChanged() 메서드를 사용할 것을 권장합니다. 자세한 내용은 P2P 연결을 위한 Wi-Fi 네트워크 요청 API를 참고하세요.

make-before-break

make-before-break는 기기가 기존 Wi-Fi 네트워크 연결을 유지한 상태로 새 Wi-Fi에 연결하고, 새 Wi-Fi 네트워크에 성공적으로 연결하여 인터넷 액세스를 확보한 경우에만 기존 네트워크에서 연결 해제할 수 있도록 하는 기능입니다.

make-before-break 사용 사례는 기기가 새 네트워크에 연결하기 전에 기존 Wi-Fi 네트워크에서 연결 해제해야 하는(break-before-make) Android 11 이하의 다음과 같은 문제를 해결합니다.

  • 기기가 새 네트워크에 연결할 때 저장된 Wi-Fi 비밀번호가 올바르지 않거나 새 네트워크에 인터넷 액세스가 없음을 알게 될 수 있습니다. 이 경우 기기가 다시 기존 네트워크로 전환해야 하는데, 이에 따라 Wi-Fi 연결 없이 작동하는 시간이 길어지게 됩니다.

  • 기존 네트워크가 갑작스럽게 연결 해제되어 모든 소켓이 닫힙니다. 연결이 갑작스럽게 끊기면 앱이 제대로 반응하지 못하는 경우가 많은데, 이로 인해 새 연결이 완전히 설정될 때까지 사용자가 몇 초 동안 인터넷 연결을 사용하지 못하게 될 수 있습니다.

  • 기본 네트워크가 기존 Wi-Fi 네트워크에서 셀룰러로, 다시 셀룰러에서 새 Wi-Fi 네트워크로, 이렇게 두 차례 변경됩니다. 따라서 앱이 네트워크 변경에 두 번 반응해야 합니다. 또한 기기가 잠시 모바일 데이터를 사용해야 합니다.

make-before-break 흐름은 OS에서 시작한 자동 Wi-Fi 네트워크 전환에서만 사용됩니다. 사용자가 시작한 네트워크 전환은 기존 네트워크가 완전히 연결 해제된 후에 새 네트워크가 연결되는 레거시 break-before-make 흐름을 사용합니다. OS에서 시작한 자동 전환에서도 break-before-make 흐름이 사용되는 경우가 있습니다. 예를 들어, 공장 MAC 주소를 사용하도록 구성된 두 네트워크 간을 전환할 때는 break-before-make 흐름이 사용됩니다.

앱은 WifiManager#isMakeBeforeBreakWifiSwitchingSupported() API를 사용하여 기기에서 이 사용 사례가 지원되는지 확인할 수 있습니다.

make-before-break 검증

구현을 확인하려면 (현재 연결된 네트워크보다 신호 강도가 센 네트워크가 있는지 확인하여) 자동 Wi-Fi 네트워크 전환을 트리거한 다음 기기가 새 네트워크에 연결하는 동안 기존 연결을 유지하는지 확인합니다. 두 Wi-Fi 인터페이스의 상태를 보고 둘 다 연결되어 있는지 확인하려면 다음 명령어를 사용합니다.

adb shell wpa_cli -i wlan0 status ; echo ; adb shell wpa_cli -i wlan1 status

새 네트워크에 연결이 없는 경우, 기기가 기존 네트워크의 연결을 유지한 상태로 네트워크에 연결을 시도하고, 새 네트워크에 인터넷이 없음을 감지하면 시도를 취소합니다. 그런 다음 계속해서 기존 연결을 기본 Wi-Fi 네트워크로 사용합니다.

로컬 전용 연결 및 인터넷 연결 동시 실행

로컬 전용 연결 및 인터넷 연결 동시 실행은 기기가 인터넷을 제공하는 기본 네트워크와 로컬 전용 연결(예: IoT 기기로의 연결)에 동시에 연결할 수 있도록 하는 기능입니다. 이 기능은 카메라와 같은 IoT 기기에 직접 연결(Android 10에 추가된 WifiNetworkSpecifier API를 통해 직접 연결 가능)할 때 사용자 환경을 개선해 줍니다.

Android 11 이하에서는 기기가 IoT 기기에 연결할 때 기본 Wi-Fi 네트워크의 연결을 해제하므로 (기기에 모바일 데이터와 같은 다른 전송 유형이 있는 경우가 아닌 이상) 인터넷 연결이 손실됩니다.

앱은 WifiManager#isStaConcurrencyForLocalOnlyConnectionsSupported() API를 사용하여 기기에서 이 기능이 지원되는지 확인할 수 있습니다.

Android 12의 로컬 전용 연결 및 인터넷 연결 동시 실행 기능 변경사항에 관한 자세한 내용은 P2P 연결을 위한 Wi-Fi 네트워크 요청 API를 참고하세요.

로컬 전용 연결 및 인터넷 연결 동시 실행 검증

이 기능을 검증하려면 다음 CTS 및 ACTS 테스트를 사용하세요.

  • CTS: MultiStaConcurrencyWifiNetworkSpecifierTest
  • ACTS: WifiStaConcurrencyNetworkRequestTest

제한된 연결 및 인터넷 연결 동시 실행

제한된 연결 및 인터넷 연결 동시 실행은 기기가 사용자를 위한 기본 Wi-Fi 네트워크와 일부 앱에서만 사용 가능한 제한된 Wi-Fi 네트워크에 동시에 연결할 수 있도록 하는 기능입니다.

앱은 WifiManager#isStaConcurrencyForRestrictedConnectionsSupported() API를 사용하여 기기에서 이 기능이 지원되는지 확인할 수 있습니다.

기기가 제한된 보조 Wi-Fi 네트워크에 연결하도록 사용 설정하려면 다음 단계를 따르세요.

  1. setOemPaid 또는 setOemPrivate을 true로 설정하여 Wi-Fi 네트워크 제안을 추가합니다.

  2. ConnectivityManager에서 대응하는 기능을 갖는 NetworkRequest를 제출합니다.

기기가 OEM 유료 제안 또는 OEM 비공개 제안과 일치하는 네트워크 검색 결과를 감지하면 자동으로 이 네트워크에 보조 네트워크로 연결합니다.

제한된 연결 및 인터넷 연결 동시 실행 검증

이 기능을 검증하려면 다음 CTS 및 ACTS 테스트를 사용하세요.

  • CTS: MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest
  • ACTS: WifiStaConcurrencyNetworkRequestTest

인터넷 연결이 있는 여러 네트워크 동시 실행

Android 13 이상에서 제공하는 인터넷 연결이 있는 여러 네트워크 동시 실행 기능을 사용하면 기기가 제한이 없고(모든 앱에서 액세스 가능) 인터넷 액세스를 제공하는 두 개의 네트워크(AP)에 동시에 연결할 수 있습니다.

앱은 WifiManager#isStaConcurrencyForMultiInternetSupported() 메서드를 사용하여 기기에서 이 기능이 지원되는지 확인할 수 있습니다.

이 기능이 지원되면 권한 있는 앱은 WifiManager#setStaConcurrencyForMultiInternetMode(int mode) 메서드를 사용하여 이 기능을 사용 설정할 수 있습니다. 이 기능에는 다음과 같은 모드가 있습니다.

현재 활성 상태인 기능 모드를 쿼리하려면 WifiManager#getStaConcurrencyForMultiInternetMode() 메서드를 사용합니다.

기능이 사용 설정되면 다음 단계에 따라 인터넷을 제공하는 추가 Wi-Fi 네트워크를 요청합니다.

  1. WifiNetworkSpecifier.Builder를 사용하여 Wi-Fi 네트워크 지정자를 생성합니다. setBand() 메서드를 사용하여 지정자 대역을 선택합니다. 지정된 대역을 위한 추가 네트워크는 Wi-Fi 프레임워크가 선택하므로 SSID 또는 BSSID를 지정하지 않습니다.

  2. ConnectivityManager를 사용하여 NET_CAPABILITY_INTERNET 기능으로 NetworkRequest를 생성합니다.

  3. NetworkCallback 인스턴스와 함께 네트워크 요청에 지정자를 추가하여 요청 상태를 추적하고 ConnectivityManager에 요청을 전송합니다. 요청된 대역을 사용하여 저장된 네트워크를 검사 결과에서 사용할 수 있고 네트워크 연결이 성공적이면 콜백 객체에서 NetworkCallback.onAvailable()이 호출됩니다.

인터넷 연결이 있는 여러 네트워크 동시 실행 검증

이 기능을 검증하려면 다음 CTS 테스트를 사용하세요.

  • CTS: MultiStaConcurrencyMultiInternetWifiNetworkTest

공급업체 Wi-Fi 칩 가이드라인

Wi-Fi 칩 공급업체는 다음 가이드라인에 따라 Wi-Fi STA/STA 동시 실행을 지원하세요.

Wi-Fi 칩이 이중 동시 STA 연결을 지원해야 합니다. 즉, 다음을 지원해야 합니다.

  • 각 STA 인터페이스가 프레임워크에 의해 프로그래밍 가능한 고유한 MAC을 갖습니다.
  • 보조 STA 인터페이스는 동적으로 생성 및 소멸될 수 있습니다.
  • 각 STA는 동일한 대역 내의 또는 다른 대역의 다른 SSID에 연결될 수 있습니다.
  • 각 STA는 동일한 대역 내의 또는 다른 대역의 동일한 SSID에 연결될 수 있습니다. 두 STA가 동일한 BSSID에 연결되어서는 안 됩니다.

중요한 기능은 각 인터페이스별로 작동해야 하며 기본 인터페이스에서 사용할 수 있어야 합니다. 다음은 이러한 중요한 기능의 목록입니다.

  • 로밍은 최소한 기본 인터페이스(IWifiChip.setMultiStaPrimaryConnection()을 사용하여 설정)에서 지원되어야 합니다. 두 인터페이스 모두에서 로밍이 지원되는 경우 한 연결에서 이루어진 결정이 두 번째 동시 실행 연결과 충돌해서는 안 됩니다. 예를 들어, 한 인터페이스가 다른 연결의 BSSID로 로밍되어서는 안 됩니다.

  • APF(및 ARP, NS와 같은 기타 오프로드)는 최소한 기본 인터페이스(IWifiChip.setMultiStaPrimaryConnection()을 사용하여 설정)에서 지원되어야 합니다.

  • 링크 레이어 통계는 각 인터페이스별로 작동해야 합니다.

다음은 여러 동시 실행 시나리오에서 권장되는 Wi-Fi 칩 구현입니다.

  • Wi-Fi 칩은 프레임워크가 다음 상수 중 하나로 IWifiChip.setMultiStaUseCase()를 호출하여 현재 기능을 지정할 수 있도록 허용해야 합니다.

    • DUAL_STA_TRANSIENT_PREFER_PRIMARY: make-before-break 기능을 지정합니다. 기본 연결의 품질이 보조 연결보다 우선시되어야 합니다.
    • DUAL_STA_NON_TRANSIENT_UNBIASED: 로컬 전용 연결 및 인터넷 연결 동시 실행 기능 또는 제한된 연결 및 인터넷 연결 동시 실행 기능을 지정합니다. 두 연결의 품질에 동일한 우선순위가 부여되어야 합니다.
  • 이중 동시 STA는 MCC, SCC, DBS 작동 모드로 이어질 수 있으므로 프레임워크가 IWifiChip.setMultiStaUseCase()를 호출하여 기능을 지정하는 경우 공급업체 구현은 최고의 무선 구성을 선택해야 합니다. 다음은 일반적인 가이드라인입니다.

    • 가능한 경우 2x2+2x2 DBS가 선호됩니다.
    • 가능하다면 연결 품질에 과도한 영향을 주는 1x1+1x1 DBS는 피합니다. 그보다는 MCC가 선호됩니다.
    • 드라이버 또는 펌웨어가 여러 기능의 MCC 듀티 사이클을 구성할 수 있어야 합니다. 프레임워크는 MCC 듀티 사이클을 직접 설정하지 않고 StaLinkLayerIfaceStats.timeSliceDutyCycleInPercent를 사용하여 이 정보를 쿼리합니다.
    • MCC를 사용하는 경우 기본 연결과 보조 연결에 다음과 같은 듀티 사이클을 사용하는 것이 좋습니다.

      • DUAL_STA_TRANSIENT_PREFER_PRIMARY: 기본 70%, 보조 30%.
      • DUAL_STA_NON_TRANSIENT_UNBIASED: 기본 50%, 보조 50%.