테더링

Android 13의 업데이트

업데이트 추가 정보
CrossDevice 도입 CrossDevice
분할 터널링 도입 분할 터널링

개요

테더링 모듈은 Wi-Fi, USB, 블루투스 또는 이더넷을 통해 테더링 기기에 연결된 다른 클라이언트 기기와 Android 기기의 인터넷 연결을 공유합니다. 이 모듈에는 테더링 구성요소(USB, Wi-Fi 액세스 포인트, 블루투스 등) 및 종속 항목(테더링 사용 권한, IpServeroffloadController와의 상호작용)이 포함됩니다. 이 모듈은 업데이트할 수 있습니다. 즉, 일반적인 Android 출시 주기 외에도 기능 업데이트를 받을 수 있습니다.

테더링 모듈을 통해 Android 생태계 전반의 OEM이 다음과 같은 이점을 제공하는 단일 표준 참조 구현을 사용할 수 있습니다.

  • 최종 사용자는 모듈 업데이트를 통해 Android 기기 전반에 걸쳐 일관된 환경을 경험하고 상호 운용성 문제를 수정할 수 있습니다.

  • OEM은 이동통신사 요구사항을 충족하는 동시에 개별 맞춤설정 비용을 절감할 수 있습니다(동일한 요구사항을 서로 다른 방식으로 다양하게 구현할 필요가 없음).

분할 터널링

Android 13에는 분할 터널링 사용 사례를 지원하기 위해 제외 경로를 지정하는 새 API가 추가되었습니다.

분할 터널링이란 특정 트래픽은 VPN을 통과하고 그 밖의 트래픽은 통과하지 않는 구성을 가리킵니다. 대표적인 예로 조직에서 일반적인 웹 서핑, 대역폭이 많이 소비되는 애플리케이션(예: YouTube, 넷플릭스) 또는 지연 시간에 민감한 애플리케이션(예: Office 365)이 VPN을 우회하도록 하려는 경우를 들 수 있습니다. 분할 터널링이 지원되기 전에는 VpnService.Builder에서 VPN 클라이언트가 일부 서브넷만 클라이언트로 라우팅되어야 함을 나타낼 수 있도록 지원했습니다(포함 경로). 분할 터널링이 지원됨에 따라 개발자는 그 반대로 특정 서브넷을 제외한 모든 트래픽을 VPN으로 라우팅하도록 지정할 수 있습니다(제외 경로).

새로운 분할 터널링 API의 서명은 다음과 같습니다.

public Builder excludeRoute(@NonNull IpPrefix prefix)

CrossDevice

Android 13에서 도입된 CrossDevice의 목표는 표준 프로토콜을 사용하여 교차 기기 통신 기술을 제공하는 것입니다. CrossDevice는 기기 검색, 인증된 연결, 기타 교차 기기 경험을 위한 API와 기능을 제공합니다.

CrossDevice의 의의

  • OEM 파트너 간 긴밀한 공동작업. OEM은 Google 솔루션을 사용할 필요 없이 자체 계정 키 시스템을 CrossDevice 구현에 통합할 수 있습니다.
  • 프로토콜의 시각적 구현 향상. CrossDevice 모듈은 오픈소스이므로 CrossDevice 기술 구현을 위한 구현 세부정보와 더 나은 개인 정보 보호에 대한 가시성을 제공합니다.

CrossDevice 모듈 경계

CrossDevice API packages/modules/CrossDevice/framework
  • NearbyManager
  • AccountProviderBase
CrossDevice 서비스 packages/modules/CrossDevice/service
  • NearbyService - API 스캔 중

CrossDevice 패키지 형식

이 모듈의 main 함수는 APEX 패키지에 포함되어 있습니다. 리소스는 APK로 패키징되어 있습니다.

CrossDevice 종속 항목

CrossDevice는 다음에 종속됩니다.

  • Wi-Fi
  • 블루투스
  • UWB
  • modules-utils-preconditions
  • Proto 라이브러리

CrossDevice 맞춤설정 옵션

OEM이 RRO를 통해 절반 시트 UI를 맞춤설정할 수 있도록 지원할 계획입니다. 이 기능의 맞춤설정을 지원할 계획은 없습니다.

CrossDevice 테스트 전략

CrossDevice 기능 검증을 위해 Android 호환성 테스트 모음(CTS) 테스트를 추가하고 MTS에 교차 기기 테스트를 추가할 계획입니다.

eBPF 테더링 오프로드

하드웨어 오프로드에 응답할 필요 없이 고속 테더링을 제공하기 위해, Android 11에서는 IPv6 다운로드용 eBPF 테더링 오프로드(테더링된 기기로 유입되는 트래픽)라는 테더링 소프트웨어 오프로드 솔루션을 제공합니다.

Android 12부터는 이 기능(eBPF 프로그램 코드 포함)이 전적으로 테더링 모듈에서 제공됩니다. 테더링 모듈은 다음을 지원합니다.

  • IPv6 다운로드(테더링된 기기로 유입되는 트래픽)
  • IPv6 업로드(테더링된 기기에서 나오는 트래픽)
  • IPv4 TCP/UDP 업로드 및 다운스트림(테더링된 기기로 유입되고 기기에서 나오는 트래픽)
  • eBPF 오프로드

이 기능은 기본적으로 사용 설정되어 있으며 사용자는 RRO를 통해 config_tether_enable_bpf_offload 구성을 false로 재정의할 수 있습니다. 자세한 내용은 맞춤설정을 참고하세요.

IPv4 및 IPv6 지원

테더링 모듈은 IPv4 및 IPv6 듀얼 스택을 지원합니다.

  • IPv4 네트워크의 경우 모듈은 네트워크 주소 변환(NAT)을 설정하고 IP 주소 할당에 동적 호스트 구성 프로토콜(DHCP)을 사용합니다.

  • IPv6 네트워크의 경우 모듈은 IP 주소 할당에 IPv6 스테이트리스 주소 자동 구성(SLAAC)을 사용합니다.

모듈 경계

Android 12 및 이후 버전에서는 packages/modules/Connectivity 아래의 모든 파일/폴더가 테더링 모듈 범위에 해당합니다.

Android 11 및 이전 버전에서는 테더링 모듈이 packages/modules/Tethering에 다음과 같은 Android 10 파일을 갖습니다.

  • frameworks/base/services/core/java/com/android/server/connectivity/Tethering.java
  • frameworks/base/services/core/java/com/android/server/connectivity/tethering/
  • frameworks/base/services/core/java/com/android/server/NetworkManagementService.java
  • frameworks/base/services/net/java/android/net/ip/{InterfaceController,IpServer,RouterAdvertisementDaemon}.java
  • frameworks/base/services/net/java/android/net/{netlink,dhcp}/*
  • frameworks/base/services/net/java/android/net/util/{InterfaceSet,InterfaceParams,NetdService,PrefixUtils,SharedLog,VersionedBroadcastListener}.java
  • frameworks/base/core/java/android/net/{ITetheringEventCallback,ITetheringStatsProvider}.aidl
  • frameworks/base/core/java/android/net/{NetworkUtils,util/IpUtils}.java
  • frameworks/base/core/java/com/android/internal/util/{BitUtils,IndentingPrintWriter,State,StateMachine}.java
  • frameworks/base/core/java/com/android/server/connectivity/MockableSystemProperties.java
  • frameworks/base/core/java/android/os/INetworkManagementService.aidl
  • frameworks/base/core/java/android/bluetooth/BluetoothPan.java
  • frameworks/base/services/core/jni/com_android_server_connectivity_tethering_OffloadHardwareInterface.cpp
  • packages/apps/Settings/src/com/android/settings/wifi/tether/TetherService.java
  • packages/apps/Settings/src/com/android/settings/network/TetherProvisioningActivity.java

모듈 형식

테더링 모듈(com.android.tethering)은 APEX 형식이며 Android 11 이상을 실행하는 기기에서 사용할 수 있습니다.

ConnectivityService 포함

Android 12부터, L3+ 연결의 핵심 구성요소를 구현하는 ConnectivityService 코드가 테더링 APEX에 추가되었습니다. 테더링의 범위는 연결 모듈로 확장됩니다.

모듈 종속 항목

테더링 모듈에는 다음과 같은 종속 항목이 있습니다.

  • 시스템 서버의 공개 및 시스템 API 메서드
  • 시스템 서버와의 안정적인 AIDL IPC 인터페이스
  • tetheroffload HIDL(hardware/interfaces/tetheroffload/에 정의됨)
  • DHCP 서버(네트워크 스택 모듈의 일부)

맞춤설정

테더링 모듈은 맞춤설정을 지원하지 않습니다.

테스트

Android 호환성 테스트 모음(CTS)은 테더링 모듈의 기능을 확인합니다.