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 칩을 사용하는 것이 좋습니다.

  • 기기는 IWifiChip의 AIDL 또는 HIDL 구현에서 다음 API를 지원해야 합니다.

    • IWifiChip.setMultiStaPrimaryConnection(String ifName)
    • IWifiChip.setMultiStaUseCase(MultiStaUseCase useCase)
  • 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를 참고하세요.

로컬 전용 연결 및 인터넷 연결 유효성 검사

이 함수를 검증하려면 MultiStaConcurrencyWifiNetworkSpecifierTest CTS 테스트를 사용하세요.

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

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

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

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

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

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

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

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

이 함수를 검증하려면 MultiStaConcurrencyRestrictedWifiNetworkSuggestionTest CTS 테스트를 사용하세요.

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

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%.