MTU di BLE: apa itu, ukuran paket dan negosiasi

Penulis: IT Sectr Diterbitkan: 2026-07-15 Waktu membaca: 10 mnt

MTU (Maximum Transmission Unit) — adalah ukuran maksimum data berguna dalam satu paket BLE yang dapat ditransmisikan antar perangkat dalam satu transaksi GATT. Di BLE Classic (4.x) MTU ditetapkan pada 23 byte, cukup untuk pembacaan sensor kecil tetapi tidak cukup untuk transfer file atau pembaruan OTA. Bluetooth Core Specification 4.2 (2014) memperkenalkan prosedur MTU Size Request, memungkinkan negosiasi MTU yang lebih besar — hingga 247 byte (BLE 5.0 — hingga 251 byte). Konfigurasi MTU yang tepat adalah salah satu faktor kinerja utama aplikasi BLE yang mentransmisikan volume data besar.

Poin Utama

  • MTU — ukuran maksimum data dalam satu paket BLE, dari 23 byte (BLE 4.x) hingga 251 byte (BLE 5.0).
  • Negosiasi MTU terjadi melalui MTU Size Request/Response setelah koneksi GATT terbentuk.
  • MTU besar (247 byte) meningkatkan kecepatan transmisi data 5–10 kali dibandingkan dengan 23 byte standar.
  • Android secara otomatis meminta MTU 517 byte dengan BLE 5.0, iOS — 512 byte melalui requestMTU.
  • Pada pembaruan OTA firmware, MTU besar memperpendek waktu transmisi dari menit menjadi detik.

Apa itu MTU di BLE?

Maximum Transmission Unit (MTU) dalam konteks BLE — adalah ukuran maksimum Application Protocol Data Unit (APDU) yang dapat diterima perangkat dalam satu permintaan GATT. MTU didefinisikan pada level ATT (Attribute Protocol) dan mencakup header ATT (1 byte) + data berguna. Secara default, semua perangkat BLE mendukung MTU 23 byte (23 = 1 byte header ATT + 22 byte data).

MTU bukanlah batasan fisik saluran radio, melainkan kesepakatan antar perangkat pada level GATT. Ukuran fisik paket BLE pada level Link Layer bisa lebih besar (hingga 27 byte di BLE 4.0, hingga 257 byte di BLE 5.0 dengan Data Length Extension), tetapi level GATT membatasi berapa banyak data yang ditransmisikan dalam satu transaksi. Data Length Extension (DLE) — adalah mekanisme terpisah pada level Link Layer yang meningkatkan paket fisik hingga 251 byte dan harus dinegosiasikan secara terpisah.

Perbedaan antara MTU dan DLE: ATT MTU — berapa banyak data yang ditransmisikan dalam satu permintaan GATT, DLE — berapa banyak data yang muat dalam satu paket Link Layer. Untuk kecepatan maksimal, kedua parameter harus dinegosiasikan. Tanpa DLE, bahkan dengan MTU 247 byte, data akan difragmentasi menjadi beberapa paket Link Layer 27 byte, mengurangi bandwidth.

Negosiasi MTU: prosedur dan protokol

MTU Size Request — prosedur yang dimulai oleh Central setelah koneksi GATT terbentuk. Central mengirimkan MTU Request dengan menyebutkan kapasitas MTU-nya (ukuran maksimum yang dapat diterima). Peripheral merespons dengan MTU Response dengan nilainya sendiri. MTU yang digunakan adalah minimum dari kedua nilai. Jika Central mengusulkan MTU 512 dan Peripheral hanya mendukung 128, koneksi akan menggunakan MTU 128.

swift
import CoreBluetooth

// Meminta MTU maksimum di iOS
func requestMTU(central: CBCentralManager,
                    peripheral: CBPeripheral) {
    peripheral.maximumWriteValueLength(
        for: .withoutResponse
    )

// iOS secara otomatis menegosiasikan MTU saat koneksi
            // MTU = 512 untuk perangkat BLE 5.0
    let mtu = peripheral.maximumWriteValueLength(
        for: .withResponse
    )

    print("MTu dinegosiasikan: " +
          String(mtu))
}

Waktu negosiasi: MTU Request harus dikirim setelah penemuan layanan (discoverServices), tetapi sebelum transmisi data aktif dimulai. Di iOS Core Bluetooth secara otomatis menegosiasikan MTU saat koneksi — pengembang tidak perlu mengirim MTU Request secara manual. Di Android, requestMTU harus dipanggil secara eksplisit. Setelah negosiasi, MTU tetap tetap untuk koneksi ini — negosiasi ulang tidak mungkin dilakukan tanpa pemutusan dan koneksi ulang.

Batasan ATT: mengapa MTU tidak bisa lebih dari 251 byte

ATT (Attribute Protocol) — protokol yang menjadi dasar GATT. Paket ATT memiliki ukuran maksimum 257 byte (ATT_MTU-1). Dari jumlah ini, 1 byte adalah Opcode (jenis operasi), 1 byte adalah Handle, dan hingga 255 byte adalah Value. Dengan demikian, MTU maksimum yang diizinkan oleh spesifikasi ATT adalah 257 byte (dalam praktiknya digunakan hingga 251 byte karena beberapa bidang layanan tetap diperlukan).

Untuk mengirim data yang lebih besar dari MTU, digunakan fragmentasi pada level aplikasi. Pengembang sendiri membagi data menjadi potongan berukuran ≤ MTU dan mengirimnya secara berurutan. Setiap potongan secara formal merupakan permintaan GATT Write Request terpisah. Pihak penerima merakit potongan-potongan tersebut menjadi satu buffer. Tidak ada dukungan bawaan untuk fragmentasi di GATT — ini adalah tugas pengembang.

Versi BLEMaks. MTUMaks. DLEBatas ATT MTU
BLE 4.0 / 4.123 byte27 byteATT tetap
BLE 4.2247 byte251 byte257 byte
BLE 5.0251 byte251 byte257 byte
Android + iOS512 / 517251 byteMelampaui ATT

Fakta menarik: iOS dan Android masing-masing meminta MTU 512 dan 517 byte, tetapi nilai ini melampaui batas ATT. Dalam praktiknya, tumpukan BLE secara otomatis memfragmentasi data tersebut, mengirimkannya sebagai beberapa permintaan GATT berurutan dengan maksimum 251 byte. Bagi pengembang, perbedaannya tidak terlihat — writeValue berfungsi dengan ukuran berapa pun hingga 512 byte di iOS.

Pengaruh MTU terhadap kinerja

Ukuran MTU secara langsung memengaruhi bandwidth koneksi BLE. Pada MTU 23 byte, kecepatan transmisi berguna maksimum sekitar 7–10 KB/s dalam kondisi ideal. Peningkatan MTU menjadi 247 byte meningkatkan kecepatan menjadi 60–90 KB/s (dengan DLE dan connection interval optimal). Ini sangat penting untuk aplikasi yang mentransmisikan gambar, fragmen audio, atau log.

Kinerja transmisi BLE bergantung pada tiga faktor: MTU (berapa banyak data dalam satu permintaan ATT), connection interval (seberapa sering peristiwa pertukaran terjadi) dan DLE (berapa banyak data dalam satu paket Link Layer). Konfigurasi optimal untuk kecepatan maksimal: MTU = 247, DLE = 251, connection interval = 7.5 ms (nilai minimum).

Menurut data Bluetooth SIG White Paper (2023), peningkatan MTU dari 23 menjadi 247 byte pada connection interval 30 ms meningkatkan bandwidth dari 8 KB/s menjadi 42 KB/s — peningkatan 5 kali lipat. Pada connection interval 7.5 ms, bandwidth mencapai 88 KB/s. Untuk aplikasi yang tidak memerlukan kecepatan tinggi (sensor suhu, beacon BLE), MTU standar 23 byte tetap mencukupi.

Konfigurasi MTU di iOS dan Android

iOS Core Bluetooth secara otomatis menegosiasikan MTU saat terhubung ke Peripheral. Pengembang dapat memeriksa MTU saat ini melalui maximumWriteValueLength, tetapi tidak dapat mengaturnya secara manual. iOS menggunakan MTU hingga 512 byte untuk perangkat BLE 5.0 dan hingga 247 untuk BLE 4.2. Untuk menulis volume data besar, gunakan writeType: .withResponse untuk pengiriman terjamin.

kotlin
// Meminta MTU di Android (Kotlin)
val bluetoothGatt: BluetoothGatt = ...

// Meminta MTU 517 byte
bluetoothGatt.requestMtu(517)

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

Android menyediakan BluetoothGatt.requestMtu(int), yang memungkinkan permintaan MTU apa pun hingga 517 byte. MTU aktual ditentukan oleh perangkat periferal — jika hanya mendukung 23 byte, Android akan mengembalikan MTU 23. Untuk menentukan MTU saat ini, gunakan gatt.requestMtu(0) — ini mengembalikan nilai saat ini tanpa mencoba mengubahnya. Android 12+ mendukung negosiasi MTU otomatis saat koneksi melalui TRANSPORT_LE.

Framework lintas platform (Flutter, React Native) biasanya menyediakan API untuk requestMTU. Di pustaka FlutterBlue Plus, MTU ditetapkan sebagai parameter koneksi. Di RxAndroidBle — melalui metode requestMtu. Disarankan untuk selalu menegosiasikan MTU maksimum segera setelah penemuan layanan, sebelum transmisi data dimulai, untuk menghindari fragmentasi pada level aplikasi.

MTU dan pembaruan OTA

Pembaruan firmware OTA (Over-The-Air) — skenario yang paling membutuhkan MTU di BLE. Ukuran tipikal firmware perangkat IoT adalah 100–500 KB. Pada MTU 23 byte dan connection interval 30 ms, transmisi 100 KB memakan waktu sekitar 2–3 menit. Pada MTU 247 byte dan DLE 251 byte — 20–40 detik. Dan pada MTU 512 byte (iOS) — 10–15 detik.

Proses pembaruan OTA biasanya meliputi: fragmentasi firmware menjadi paket berukuran ≤ MTU, pengiriman berurutan melalui Notify/Write, verifikasi checksum pada setiap paket dan konfirmasi penerimaan. Jika ada paket yang hilang, perangkat meminta pengiriman ulang. Keandalan OTA sangat bergantung pada pemilihan MTU dan connection interval yang tepat.

Rekomendasi untuk OTA: negosiasikan MTU maksimum (247–512 byte), atur connection interval ke 7.5–15 ms (jika perangkat mendukung), gunakan DLE (Data Length Extension) untuk meningkatkan paket fisik hingga 251 byte. Untuk perangkat dengan memori buffer terbatas (misalnya, modul BLE berbasis nRF52), periksa MTU maksimum di spesifikasi chip.

Pertanyaan yang Sering Diajukan

Apa yang terjadi jika MTU tidak dinegosiasikan?

Koneksi akan menggunakan MTU default — 23 byte. Untuk sebagian besar skenario IoT (transmisi pembacaan sensor) ini sudah cukup. Untuk transmisi volume data besar, kecepatan akan 5–10 kali lebih rendah dibandingkan dengan MTU 247 byte yang dinegosiasikan.

Bisakah MTU diubah setelah transmisi data dimulai?

Tidak, MTu dinegosiasikan satu kali setelah koneksi dan tidak dapat diubah tanpa pemutusan dan koneksi ulang. Oleh karena itu, disarankan untuk menegosiasikan MTU segera setelah penemuan layanan, sebelum transmisi data aktif dimulai.

Mengapa Android meminta MTU 517 byte, sedangkan iOS hanya 512?

Ini adalah maksimum empiris yang terbentuk secara historis untuk setiap tumpukan. ATT MTU yang sebenarnya tetap dibatasi hingga 257 byte menurut spesifikasi. Tumpukan secara otomatis memfragmentasi data yang lebih besar dari 251 byte menjadi beberapa paket, sehingga perbedaan antara 512 dan 517 tidak signifikan.

Bagaimana MTU terkait dengan Data Length Extension (DLE)?

MTU — ukuran permintaan GATT pada level ATT. DLE — ukuran paket fisik pada level Link Layer. Tanpa DLE, setiap permintaan GATT (hingga 247 byte) difragmentasi menjadi paket 27 byte. Dengan DLE — ditransmisikan dalam satu paket. Untuk kecepatan maksimal, kedua parameter harus dinegosiasikan.

MTU mana yang harus dipilih untuk pelacak kebugaran?

Untuk pelacak kebugaran yang mentransmisikan pembacaan detak jantung dan langkah, MTU standar 23 byte sudah cukup. Jika diperlukan untuk mentransmisikan riwayat latihan (volume 10–50 KB) — negosiasikan MTU 247 byte untuk mempercepat sinkronisasi data saat terhubung ke smartphone.

Ringkasan

  • MTU — ukuran maksimum data dalam satu permintaan GATT: dari 23 byte (default) hingga 251 byte (BLE 5.0).
  • Negosiasi MTU terjadi melalui MTU Size Request/Response, yang dimulai oleh Central setelah koneksi.
  • Protokol ATT membatasi MTU hingga 257 byte, tetapi iOS dan Android meminta hingga 512–517 byte dengan fragmentasi otomatis.
  • Peningkatan MTU dari 23 menjadi 247 byte meningkatkan bandwidth 5–10 kali pada connection interval optimal.
  • Untuk kecepatan maksimal, perlu menegosiasikan MTU + DLE + connection interval 7.5 ms.
  • Di iOS MTu dinegosiasikan secara otomatis, di Android — melalui requestMtu, disarankan meminta 247–517 byte.
  • Pembaruan OTA — skenario paling menuntut: MTU yang tepat memperpendek waktu transmisi dari menit menjadi detik.

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga