MTU en BLE: qué es, tamaño de paquete y negociación

Autor: IT Sectr Publicado: 2026-07-15 Tiempo de lectura: 10 min

MTU (Maximum Transmission Unit) es el tamaño máximo de datos útiles en un paquete BLE que se puede transmitir entre dispositivos en una sola transacción GATT. En BLE Classic (4.x), el MTU está fijado en 23 bytes, suficiente para lecturas pequeñas de sensores, pero insuficiente para transferencias de archivos o actualizaciones OTA. La especificación Bluetooth Core Specification 4.2 (2014) introdujo el procedimiento MTU Size Request, que permite negociar un MTU mayor — hasta 247 bytes (BLE 5.0 — hasta 251 bytes). La configuración correcta del MTU es uno de los factores clave de rendimiento para aplicaciones BLE que transmiten grandes volúmenes de datos.

Puntos Clave

  • MTU — el tamaño máximo de datos en un paquete BLE, desde 23 bytes (BLE 4.x) hasta 251 bytes (BLE 5.0).
  • La negociación del MTU se realiza mediante MTU Size Request/Response después de establecer una conexión GATT.
  • Un MTU grande (247 bytes) aumenta la velocidad de transferencia de datos en 5–10 veces en comparación con los 23 bytes estándar.
  • Android solicita automáticamente un MTU de 517 bytes con BLE 5.0, iOS solicita 512 bytes mediante requestMTU.
  • En las actualizaciones OTA de firmware, un MTU grande reduce el tiempo de transferencia de minutos a segundos.

¿Qué es MTU en BLE?

Maximum Transmission Unit (MTU) en el contexto de BLE es el tamaño máximo de una Unidad de Datos del Protocolo de Aplicación (APDU) que un dispositivo puede aceptar en una sola solicitud GATT. El MTU se define a nivel de ATT (Attribute Protocol) e incluye la cabecera ATT (1 byte) + datos útiles. Por defecto, todos los dispositivos BLE admiten un MTU de 23 bytes (23 = 1 byte de cabecera ATT + 22 bytes de datos).

El MTU no es un límite físico del canal de radio, sino un acuerdo entre dispositivos a nivel GATT. El tamaño físico del paquete BLE en la capa de enlace (Link Layer) puede ser mayor (hasta 27 bytes en BLE 4.0, hasta 257 bytes en BLE 5.0 con Data Length Extension), pero la capa GATT limita cuántos datos se transmiten por transacción. Data Length Extension (DLE) es un mecanismo separado de la capa de enlace que aumenta el paquete físico a 251 bytes y debe negociarse de forma independiente.

La diferencia entre MTU y DLE: ATT MTU — cuántos datos se transmiten por solicitud GATT, DLE — cuántos datos caben en un paquete de la capa de enlace. Para obtener la máxima velocidad, es necesario negociar ambos parámetros. Sin DLE, incluso con un MTU de 247 bytes, los datos se fragmentarán en varios paquetes de la capa de enlace de 27 bytes, reduciendo el rendimiento.

Negociación de MTU: procedimiento y protocolo

MTU Size Request — un procedimiento iniciado por el Central después de establecer una conexión GATT. El Central envía una solicitud MTU Request indicando su capacidad MTU (el tamaño máximo que puede aceptar). El Peripheral responde con una MTU Response con su propio valor. El MTU resultante es el mínimo de los dos valores. Si el Central ofrece un MTU de 512 y el Peripheral solo admite 128, la conexión utilizará un MTU de 128.

swift
import CoreBluetooth

// Solicitar MTU máximo en iOS
func requestMTU(central: CBCentralManager,
                    peripheral: CBPeripheral) {
    peripheral.maximumWriteValueLength(
        for: .withoutResponse
    )

// iOS negocia el MTU automáticamente al conectar
            // MTU = 512 para dispositivos BLE 5.0
    let mtu = peripheral.maximumWriteValueLength(
        for: .withResponse
    )

    print("MTU negociado: " +
          String(mtu))
}

Momento de la negociación: la solicitud MTU Request debe enviarse después del descubrimiento de servicios (discoverServices), pero antes de que comience la transmisión activa de datos. En iOS Core Bluetooth, el MTU se negocia automáticamente al conectar — el desarrollador no necesita enviar una MTU Request manualmente. En Android, es necesario llamar explícitamente a requestMTU. Una vez negociado, el MTU permanece fijo para esa conexión — no es posible renegociarlo sin desconectar y volver a conectar.

Limitaciones de ATT: por qué el MTU no puede superar los 251 bytes

ATT (Attribute Protocol) — el protocolo sobre el que se construye GATT. Un paquete ATT tiene un tamaño máximo de 257 bytes (ATT_MTU-1). De ellos, 1 byte es Opcode (tipo de operación), 1 byte es Handle, y hasta 255 bytes son Value. Por lo tanto, el MTU máximo permitido por la especificación ATT es de 257 bytes (pero en la práctica se usan hasta 251 bytes, ya que algunos campos de overhead siguen siendo necesarios).

Para enviar datos mayores que el MTU, se utiliza la fragmentación a nivel de aplicación. El desarrollador divide manualmente los datos en fragmentos de tamaño ≤ MTU y los envía secuencialmente. Cada fragmento se envía como una solicitud GATT Write Request independiente. El lado receptor ensambla los fragmentos en un único búfer. GATT no tiene soporte incorporado para la fragmentación — es responsabilidad del desarrollador.

Versión BLEMTU MáxDLE MáxLímite ATT MTU
BLE 4.0 / 4.123 bytes27 bytesATT fijo
BLE 4.2247 bytes251 bytes257 bytes
BLE 5.0251 bytes251 bytes257 bytes
Android + iOS512 / 517251 bytesSupera ATT

Dato interesante: iOS y Android solicitan MTU de 512 y 517 bytes respectivamente, pero este valor supera el límite de ATT. En la práctica, la pila BLE fragmenta estos datos automáticamente, enviándolos como múltiples solicitudes GATT secuenciales de hasta 251 bytes cada una. Para el desarrollador, la diferencia es transparente — writeValue funciona con cualquier tamaño de hasta 512 bytes en iOS.

Impacto del MTU en el rendimiento

El tamaño del MTU afecta directamente al rendimiento de la conexión BLE. Con un MTU de 23 bytes, la tasa de transferencia útil máxima es de aproximadamente 7–10 KB/s en condiciones ideales. Aumentar el MTU a 247 bytes eleva la velocidad a 60–90 KB/s (con DLE e intervalo de conexión óptimo). Esto es especialmente importante para aplicaciones que transmiten imágenes, fragmentos de audio o registros.

El rendimiento de la transmisión BLE depende de tres factores: MTU (cuántos datos por solicitud ATT), intervalo de conexión (con qué frecuencia ocurren los eventos de intercambio) y DLE (cuántos datos por paquete de la capa de enlace). La configuración óptima para máxima velocidad: MTU = 247, DLE = 251, intervalo de conexión = 7.5 ms (valor mínimo).

Según el Bluetooth SIG White Paper (2023), aumentar el MTU de 23 a 247 bytes con un intervalo de conexión de 30 ms incrementa el rendimiento de 8 KB/s a 42 KB/s — un aumento de 5 veces. Con un intervalo de conexión de 7.5 ms, el rendimiento alcanza los 88 KB/s. Para aplicaciones que no requieren alta velocidad (sensores de temperatura, balizas BLE), el MTU estándar de 23 bytes sigue siendo suficiente.

Configuración del MTU en iOS y Android

iOS Core Bluetooth negocia automáticamente el MTU al conectar con un Peripheral. El desarrollador puede consultar el MTU actual mediante maximumWriteValueLength, pero no puede configurarlo manualmente. iOS utiliza un MTU de hasta 512 bytes para dispositivos BLE 5.0 y hasta 247 para BLE 4.2. Para escribir grandes volúmenes de datos, use writeType: .withResponse para entrega garantizada.

kotlin
// Solicitar MTU en Android (Kotlin)
val bluetoothGatt: BluetoothGatt = ...

// Solicitar MTU 517 bytes
bluetoothGatt.requestMtu(517)

// Manejar resultado en callback
override fun onMtuChanged(
    gatt: BluetoothGatt,
    mtu: Int,
    status: Int
) {
    if (status == BluetoothGatt.GATT_SUCCESS) {
        println("MTU negotiated: $mtu")
    }
}

Android proporciona BluetoothGatt.requestMtu(int), que permite solicitar cualquier MTU de hasta 517 bytes. El MTU real lo determina el dispositivo periférico — si solo admite 23 bytes, Android devolverá un MTU de 23. Para determinar el MTU actual, use gatt.requestMtu(0) — esto devuelve el valor actual sin intentar cambiarlo. Android 12+ admite la negociación automática de MTU al conectar mediante TRANSPORT_LE.

Los frameworks multiplataforma (Flutter, React Native) suelen proporcionar una API para requestMTU. En la biblioteca FlutterBlue Plus, el MTU se establece como un parámetro de conexión. En RxAndroidBle — mediante el método requestMtu. Se recomienda negociar siempre el MTU máximo inmediatamente después del descubrimiento de servicios, antes de que comience la transmisión de datos, para evitar la fragmentación a nivel de aplicación.

MTU y actualizaciones OTA

Actualizaciones de firmware OTA (Over-The-Air) — el escenario que más exige el MTU en BLE. El tamaño típico del firmware de un dispositivo IoT es de 100–500 KB. Con un MTU de 23 bytes y un intervalo de conexión de 30 ms, transferir 100 KB lleva entre 2 y 3 minutos. Con un MTU de 247 bytes y DLE de 251 bytes — de 20 a 40 segundos. Y con un MTU de 512 bytes (iOS) — de 10 a 15 segundos.

El proceso de actualización OTA generalmente incluye: fragmentación del firmware en paquetes de tamaño ≤ MTU, envío secuencial mediante Notify/Write, verificación de suma de comprobación en cada paquete y confirmación de recepción. Si se pierde un paquete, el dispositivo solicita la retransmisión. La fiabilidad de OTA depende críticamente de la correcta selección del MTU y del intervalo de conexión.

Recomendaciones para OTA: negocie el MTU máximo (247–512 bytes), establezca el intervalo de conexión en 7.5–15 ms (si el dispositivo lo admite), use DLE (Data Length Extension) para aumentar el paquete físico a 251 bytes. Para dispositivos con memoria de búfer limitada (por ejemplo, módulos BLE basados en nRF52), verifique el MTU máximo en la especificación del chip.

Preguntas Frecuentes

¿Qué sucede si no se negocia el MTU?

La conexión utilizará el MTU predeterminado — 23 bytes. Para la mayoría de los escenarios IoT (transmisión de lecturas de sensores) esto es suficiente. Para transferir grandes volúmenes de datos, la velocidad será de 5 a 10 veces menor que con un MTU negociado de 247 bytes.

¿Se puede cambiar el MTU después de iniciar la transmisión de datos?

No, el MTU se negocia una vez después de la conexión y no se puede cambiar sin desconectar y volver a conectar. Por lo tanto, se recomienda negociar el MTU inmediatamente después del descubrimiento de servicios, antes de que comience la transmisión activa de datos.

¿Por qué Android solicita un MTU de 517 bytes mientras iOS solo solicita 512?

Estos son máximos empíricos históricamente establecidos para cada pila. El MTU ATT real sigue limitado a 257 bytes por la especificación. Las pilas fragmentan automáticamente los datos mayores de 251 bytes en múltiples paquetes, por lo que la diferencia entre 512 y 517 es insignificante.

¿Cómo se relaciona el MTU con Data Length Extension (DLE)?

MTU — el tamaño de una solicitud GATT a nivel ATT. DLE — el tamaño de un paquete físico en la capa de enlace. Sin DLE, cada solicitud GATT (de hasta 247 bytes) se fragmenta en paquetes de 27 bytes. Con DLE, se transmite como un solo paquete. Para máxima velocidad, es necesario negociar ambos parámetros.

¿Qué MTU elegir para un rastreador de actividad física?

Para un rastreador de actividad física que transmite lecturas de frecuencia cardíaca y pasos, el MTU estándar de 23 bytes es suficiente. Si necesita transferir el historial de entrenamientos (de 10 a 50 KB), negocie un MTU de 247 bytes para acelerar la sincronización de datos al conectar con un teléfono inteligente.

Resumen

  • MTU — el tamaño máximo de datos en una solicitud GATT: desde 23 bytes (predeterminado) hasta 251 bytes (BLE 5.0).
  • La negociación del MTU se realiza mediante MTU Size Request/Response, iniciada por el Central después de la conexión.
  • El Protocolo ATT limita el MTU a 257 bytes, pero iOS y Android solicitan hasta 512–517 bytes con fragmentación automática.
  • Aumentar el MTU de 23 a 247 bytes mejora el rendimiento en 5–10 veces con un intervalo de conexión óptimo.
  • Para máxima velocidad, negocie MTU + DLE + intervalo de conexión de 7.5 ms.
  • En iOS, el MTU se negocia automáticamente; en Android, use requestMtu — se recomienda solicitar 247–517 bytes.
  • Las actualizaciones OTA — el escenario más exigente: un MTU adecuado reduce el tiempo de transferencia de minutos a segundos.

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también