Actualizaciones en Android 13
Actualizar | Más información |
---|---|
Se introdujo CrossDevice. | CrossDevice |
Se introdujo la tunelización dividida. | Tunelización dividida |
Descripción general
El módulo Tethering comparte la conexión a Internet de un dispositivo Android con otros dispositivos cliente conectados, que pueden conectarse a dispositivos de conexión a través de Wi-Fi, USB, Bluetooth o Ethernet. Este módulo incluye el componente de vinculación (USB, punto de acceso Wi-Fi, Bluetooth, etcétera) y sus dependencias (interacción con el derecho de vinculación, IpServer
y offloadController
). Este módulo se puede actualizar, lo que significa que puede recibir actualizaciones de funcionalidad fuera del ciclo normal de lanzamientos de Android.
El módulo Tethering permite que los OEM de todo el ecosistema de Android usen una sola implementación de referencia estándar que ofrece los siguientes beneficios.
Los usuarios finales obtienen una experiencia coherente en todos los dispositivos Android y se solucionan los problemas de interoperabilidad a través de las actualizaciones de módulos.
Los OEM pueden cumplir con los requisitos de los operadores y, al mismo tiempo, reducir los costos de las personalizaciones individuales (ya que no necesitan diferentes implementaciones de los mismos requisitos de diferentes maneras).
Tunelización dividida
Para admitir casos de uso de túnel dividido, se agregó una nueva API en Android 13 para especificar rutas de exclusión.
La tunelización dividida hace referencia a la configuración en la que cierto tráfico pasa por la VPN, mientras que otro no. Un ejemplo común es cuando una organización desea que la navegación web general, las aplicaciones que consumen mucho ancho de banda (por ejemplo, YouTube y Netflix) o las aplicaciones sensibles a la latencia (por ejemplo, Office 365) omitan la VPN. Antes de que estuviera disponible la tunelización dividida, VpnService.Builder
permitía que el cliente de VPN indicara que solo algunas subredes debían enrutarse a él (rutas de inclusión). Con la tunelización dividida, puedes especificar lo contrario: enrutar todo el tráfico a la VPN, excepto para subredes específicas (rutas de exclusión).
La firma de la nueva API de división de túneles es la siguiente:
public Builder excludeRoute(@NonNull IpPrefix prefix)
CrossDevice
CrossDevice, que se introdujo en Android 13, tiene como objetivo proporcionar tecnologías de comunicación en varios dispositivos con protocolos estándares. Proporciona APIs y funciones para la detección de dispositivos, la conexión autenticada y otras experiencias multidispositivo.
Motivación multidispositivo
- Colaboración más estrecha con los socios OEM Los OEM pueden integrar su propio sistema de claves de cuentas con la implementación de CrossDevice en lugar de tener que usar la solución de Google.
- Implementación más visible del protocolo. El módulo CrossDevice es de código abierto, lo que proporciona más visibilidad sobre los detalles de implementación y una mejor historia de privacidad para la implementación de tecnologías de CrossDevice.
Límite del módulo CrossDevice
APIs de CrossDevice | En packages/modules/CrossDevice/framework
|
Servicios de CrossDevice | En packages/modules/CrossDevice/service
|
Formato del paquete CrossDevice
La función principal de este módulo se incluye en un paquete de APEX. Los recursos se empaquetan en un APK.
Dependencias de CrossDevice
CrossDevice depende de lo siguiente:
- Wi-Fi
- Bluetooth
- UWB
- modules-utils-preconditions
- Bibliotecas de .proto
Opciones de personalización de CrossDevice
Planeamos permitir que los OEM personalicen la IU para la mitad de la hoja a través de RRO. No hay planes para personalizar la funcionalidad.
Estrategia de pruebas de CrossDevice
Planeamos agregar pruebas del Conjunto de pruebas de compatibilidad (CTS) de Android para verificar la funcionalidad de CrossDevice y pruebas de dispositivos múltiples en el MTS.
Descarga de conexión mediante eBPF
Para proporcionar una conexión de alta velocidad sin depender de descargas de hardware, Android 11 ofrece una solución de descarga de software de conexión llamada descarga de conexión eBPF para descargas de IPv6 (tráfico que fluye hacia el dispositivo conectado).
A partir de Android 12, esta funcionalidad (incluido el código del programa eBPF) la proporciona por completo el módulo Tethering, que admite lo siguiente:
- Descarga de IPv6 (tráfico que fluye hacia el dispositivo vinculado)
- Carga de IPv6 (tráfico que fluye desde el dispositivo vinculado)
- Carga y descarga de IPv4 TCP/UDP (tráfico que fluye hacia el dispositivo vinculado y desde él)
- Descarga de eBPF
Esta función está habilitada de forma predeterminada, y los usuarios pueden anular la configuración de config_tether_enable_bpf_offload
como falsa con RRO.
Consulta Personalización para obtener más información.
Compatibilidad con IPv4 e IPv6
El módulo de Tethering admite la pila doble de IPv4 e IPv6.
En el caso de las redes IPv4, el módulo configura la traducción de direcciones de red (NAT) y adopta el protocolo de configuración dinámica de host (DHCP) para la asignación de direcciones IP.
En el caso de las redes IPv6, el módulo adopta la autoconfiguración de direcciones sin estado IPv6 (SLAAC) para la asignación de direcciones IP.
Límite del módulo
En Android 12 y versiones posteriores, todos los archivos y las carpetas en packages/modules/Connectivity
se encuentran en el alcance del módulo Tethering.
En Android 11 y versiones anteriores, el módulo de Tethering tiene los siguientes archivos de Android 10 en packages/modules/Tethering
.
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
Formato del módulo
El módulo de Tethering (com.android.tethering
) está en formato APEX y está disponible para dispositivos con Android 11 o versiones posteriores.
Incluye ConnectivityService
A partir de Android 12, el código ConnectivityService
que implementa el componente central de la conectividad L3+ se agrega al APEX de Tethering. El alcance de la vinculación se expande a un módulo de conectividad.
Dependencias de módulos
El módulo Tethering tiene las siguientes dependencias:
- Métodos de API públicos y del sistema en el servidor del sistema
- Las IPC de AIDL estables interactúan con el servidor del sistema
tetheroffload
HIDL (definido enhardware/interfaces/tetheroffload/
)- Servidor DHCP (parte del módulo de la pila de red)
Personalización
El módulo Tethering no admite personalización.
Prueba
El Conjunto de pruebas de compatibilidad (CTS) de Android verifica la funcionalidad del módulo de Tethering.