BLE'de MTU: nedir, paket boyutu ve pazarlık

Yazar: IT Sectr Yayınlanma: 2026-07-15 Okuma süresi: 10 dk

MTU (Maximum Transmission Unit), tek bir GATT işleminde cihazlar arasında iletilebilen bir BLE paketindeki maksimum faydalı veri boyutudur. BLE Classic'te (4.x), MTU 23 bayt olarak sabitlenmiştir, bu küçük sensör okumaları için yeterlidir ancak dosya aktarımları veya OTA güncellemeleri için yetersizdir. Bluetooth Core Specification 4.2 (2014), daha büyük bir MTU'nun (BLE 5.0'da 251 bayta kadar, 247 bayta kadar) pazarlığına olanak tanıyan MTU Size Request prosedürünü tanıttı. Doğru MTU yapılandırması, büyük hacimli veri ileten BLE uygulamalarının performansının temel faktörlerinden biridir.

Önemli Noktalar

  • MTU — bir BLE paketindeki maksimum veri boyutu, 23 bayttan (BLE 4.x) 251 bayta (BLE 5.0) kadar.
  • MTU pazarlığı, bir GATT bağlantısı kurulduktan sonra MTU Size Request/Response aracılığıyla gerçekleşir.
  • Büyük bir MTU (247 bayt), standart 23 bayta kıyasla veri aktarım hızını 5–10 kat artırır.
  • Android, BLE 5.0 ile otomatik olarak 517 bayt MTU ister, iOS requestMTU aracılığıyla 512 bayt ister.
  • OTA donanım yazılımı güncellemelerinde, büyük bir MTU aktarım süresini dakikalardan saniyelere düşürür.

BLE'de MTU nedir?

Maximum Transmission Unit (MTU), BLE bağlamında bir cihazın tek bir GATT isteğinde kabul edebileceği maksimum Uygulama Protokolü Veri Birimi (APDU) boyutudur. MTU, ATT (Attribute Protocol) seviyesinde tanımlanır ve ATT başlığını (1 bayt) + faydalı verileri içerir. Varsayılan olarak, tüm BLE cihazları 23 bayt MTU'yu destekler (23 = 1 bayt ATT başlığı + 22 bayt veri).

MTU, radyo kanalının fiziksel bir sınırı değil, GATT seviyesinde cihazlar arasında bir anlaşmadır. Bağlantı Katmanındaki (Link Layer) fiziksel BLE paket boyutu daha büyük olabilir (BLE 4.0'da 27 bayta kadar, Data Length Extension ile BLE 5.0'da 257 bayta kadar), ancak GATT katmanı işlem başına iletilen veri miktarını sınırlar. Data Length Extension (DLE), fiziksel paketi 251 bayta çıkaran ayrı bir Bağlantı Katmanı mekanizmasıdır ve ayrı olarak pazarlık edilmesi gerekir.

MTU ve DLE arasındaki fark: ATT MTU — GATT isteği başına iletilen veri miktarı, DLE — bir Bağlantı Katmanı paketine sığan veri miktarı. Maksimum hız için her iki parametrenin de pazarlık edilmesi gerekir. DLE olmadan, MTU 247 bayt olsa bile, veri birden çok 27 baytlık Bağlantı Katmanı paketine bölünerek verim düşer.

MTU pazarlığı: prosedür ve protokol

MTU Size Request — bir GATT bağlantısı kurulduktan sonra Central tarafından başlatılan bir prosedürdür. Central, MTU kapasitesini (kabul edebileceği maksimum boyut) belirten bir MTU Request gönderir. Peripheral, kendi değeriyle bir MTU Response ile yanıt verir. Sonuçta ortaya çıkan MTU, iki değerden minimum olandır. Central MTU 512 teklif ederse ve Peripheral yalnızca 128'i desteklerse, bağlantı MTU 128'i kullanır.

swift
import CoreBluetooth

// iOS'ta maksimum MTU iste
func requestMTU(central: CBCentralManager,
                    peripheral: CBPeripheral) {
    peripheral.maximumWriteValueLength(
        for: .withoutResponse
    )

// iOS bağlantıda MTU'yu otomatik olarak pazarlık eder
            // BLE 5.0 cihazları için MTU = 512
    let mtu = peripheral.maximumWriteValueLength(
        for: .withResponse
    )

    print("Pazarlık edilen MTU: " +
          String(mtu))
}

Pazarlık zamanlaması: MTU Request, hizmet keşfinden (discoverServices) sonra ancak aktif veri iletimi başlamadan önce gönderilmelidir. iOS Core Bluetooth'ta, MTU bağlantı sırasında otomatik olarak pazarlık edilir — geliştiricinin manuel olarak MTU Request göndermesi gerekmez. Android'de, requestMTU'nun açıkça çağrılması gerekir. Pazarlık edildikten sonra, MTU bu bağlantı için sabit kalır — bağlantıyı kesip yeniden bağlamadan yeniden pazarlık mümkün değildir.

ATT sınırlamaları: MTU neden 251 baytı aşamaz

ATT (Attribute Protocol) — GATT'ın üzerine inşa edildiği protokoldür. Bir ATT paketinin maksimum boyutu 257 bayttır (ATT_MTU-1). Bunlardan 1 bayt Opcode (işlem türü), 1 bayt Handle ve 255 bayta kadar Value'dir. Bu nedenle, ATT spesifikasyonu tarafından izin verilen maksimum MTU 257 bayttır (ancak pratikte bazı ek yük alanları hala gerekli olduğundan 251 bayta kadar kullanılır).

MTU'dan daha büyük veri göndermek için uygulama seviyesinde parçalama (fragmentation) kullanılır. Geliştirici, verileri manuel olarak ≤ MTU boyutundaki parçalara böler ve sırayla gönderir. Her parça ayrı bir GATT Write Request olarak gönderilir. Alan taraf, parçaları tek bir arabellekte birleştirir. GATT'da yerleşik parçalama desteği yoktur — bu geliştiricinin sorumluluğundadır.

BLE SürümüMaks. MTUMaks. DLEATT MTU Sınırı
BLE 4.0 / 4.123 bayt27 baytATT sabit
BLE 4.2247 bayt251 bayt257 bayt
BLE 5.0251 bayt251 bayt257 bayt
Android + iOS512 / 517251 baytATT'yi aşıyor

İlginç gerçek: iOS ve Android sırasıyla MTU 512 ve 517 bayt ister, ancak bu değer ATT sınırını aşıyor. Pratikte, BLE yığını bu tür verileri otomatik olarak parçalara ayırır ve her biri maksimum 251 bayt olan birden çok sıralı GATT isteği olarak gönderir. Geliştirici için fark şeffaftır — iOS'ta writeValue 512 bayta kadar herhangi bir boyutta çalışır.

MTU'nun performansa etkisi

MTU boyutu, BLE bağlantı verimini doğrudan etkiler. MTU 23 bayt ile ideal koşullarda maksimum faydalı aktarım hızı yaklaşık 7–10 KB/s'dir. MTU'nun 247 bayta çıkarılması, hızı 60–90 KB/s'ye (DLE ve optimum bağlantı aralığı ile) yükseltir. Bu, özellikle görüntü, ses parçaları veya günlük ileten uygulamalar için önemlidir.

BLE aktarım performansı üç faktöre bağlıdır: MTU (ATT isteği başına veri miktarı), bağlantı aralığı (değişim olaylarının ne sıklıkta gerçekleştiği) ve DLE (Bağlantı Katmanı paketi başına veri miktarı). Maksimum hız için optimum yapılandırma: MTU = 247, DLE = 251, bağlantı aralığı = 7,5 ms (minimum değer).

Bluetooth SIG White Paper (2023)'e göre, MTU'nun 30 ms bağlantı aralığıyla 23'ten 247 bayta çıkarılması, verimi 8 KB/s'den 42 KB/s'ye yükseltir — 5 kat artış. 7,5 ms bağlantı aralığıyla verim 88 KB/s'ye ulaşır. Yüksek hız gerektirmeyen uygulamalar (sıcaklık sensörleri, BLE işaretçileri) için standart 23 bayt MTU yeterlidir.

iOS ve Android'de MTU yapılandırması

iOS Core Bluetooth, bir Peripheral'a bağlanırken MTU'yu otomatik olarak pazarlık eder. Geliştirici, maximumWriteValueLength aracılığıyla mevcut MTU'yu sorgulayabilir ancak manuel olarak ayarlayamaz. iOS, BLE 5.0 cihazları için 512 bayta kadar ve BLE 4.2 için 247 bayta kadar MTU kullanır. Büyük hacimli veri yazmak için garanti edilmiş teslimat için writeType: .withResponse kullanın.

kotlin
// Android'de (Kotlin) MTU iste
val bluetoothGatt: BluetoothGatt = ...

// MTU 517 bayt iste
bluetoothGatt.requestMtu(517)

// Callback'te sonucu işle
override fun onMtuChanged(
    gatt: BluetoothGatt,
    mtu: Int,
    status: Int
) {
    if (status == BluetoothGatt.GATT_SUCCESS) {
        println("MTU negotiated: $mtu")
    }
}

Android, 517 bayta kadar herhangi bir MTU'yu istemeye izin veren BluetoothGatt.requestMtu(int)'i sağlar. Gerçek MTU, çevresel aygıt tarafından belirlenir — yalnızca 23 baytı destekliyorsa, Android MTU 23 döndürür. Geçerli MTU'yu belirlemek için gatt.requestMtu(0) kullanın — bu, değiştirmeye çalışmadan geçerli değeri döndürür. Android 12+, TRANSPORT_LE aracılığıyla bağlantıda otomatik MTU pazarlığını destekler.

Platformlar arası çerçeveler (Flutter, React Native) genellikle requestMTU için bir API sağlar. FlutterBlue Plus kitaplığında MTU, bir bağlantı parametresi olarak ayarlanır. RxAndroidBle'da — requestMtu yöntemi aracılığıyla. Uygulama seviyesinde parçalamayı önlemek için, veri iletimi başlamadan önce, hizmet keşfinden hemen sonra her zaman maksimum MTU'nun pazarlık edilmesi önerilir.

MTU ve OTA güncellemeleri

OTA (Over-The-Air) donanım yazılımı güncellemeleri — BLE'de MTU'yu en çok zorlayan senaryodur. Bir IoT cihazının tipik donanım yazılımı boyutu 100–500 KB'dir. MTU 23 bayt ve 30 ms bağlantı aralığıyla 100 KB aktarımı yaklaşık 2–3 dakika sürer. MTU 247 bayt ve DLE 251 bayt ile — 20–40 saniye. Ve MTU 512 bayt (iOS) ile — 10–15 saniye.

OTA güncelleme süreci genellikle şunları içerir: donanım yazılımının ≤ MTU boyutundaki paketlere parçalanması, Notify/Write aracılığıyla sıralı gönderim, her pakette sağlama toplamı doğrulaması ve alındı onayı. Bir paket kaybolursa, cihaz yeniden gönderim ister. OTA güvenilirliği, MTU ve bağlantı aralığının doğru seçimine kritik olarak bağlıdır.

OTA için öneriler: maksimum MTU (247–512 bayt) pazarlık edin, bağlantı aralığını 7,5–15 ms (cihaz destekliyorsa) olarak ayarlayın, fiziksel paketi 251 bayta çıkarmak için DLE (Data Length Extension) kullanın. Sınırlı arabellek belleğine sahip cihazlar için (örneğin, nRF52 tabanlı BLE modülleri), yonga spesifikasyonunda maksimum MTU'yu kontrol edin.

Sıkça Sorulan Sorular

MTU pazarlık edilmezse ne olur?

Bağlantı varsayılan MTU'yu kullanır — 23 bayt. Çoğu IoT senaryosu (sensör okumalarını iletme) için bu yeterlidir. Büyük hacimli veri aktarımı için hız, pazarlık edilmiş 247 baytlık MTU'ya kıyasla 5–10 kat daha düşük olacaktır.

Veri iletimi başladıktan sonra MTU değiştirilebilir mi?

Hayır, MTU bağlantıdan sonra bir kez pazarlık edilir ve bağlantıyı kesip yeniden bağlamadan değiştirilemez. Bu nedenle, aktif veri iletimi başlamadan önce, hizmet keşfinden hemen sonra MTU'yu pazarlık etmeniz önerilir.

Android neden 517 bayt MTU isterken iOS yalnızca 512 istiyor?

Bunlar her yığın için tarihsel olarak oluşturulmuş ampirik maksimum değerlerdir. Gerçek ATT MTU hala spesifikasyon tarafından 257 bayt ile sınırlıdır. Yığınlar, 251 bayttan büyük verileri otomatik olarak birden çok pakete böler, bu nedenle 512 ile 517 arasındaki fark önemsizdir.

MTU, Data Length Extension (DLE) ile nasıl ilişkilidir?

MTU — ATT seviyesindeki bir GATT isteğinin boyutu. DLE — Bağlantı Katmanındaki fiziksel bir paketin boyutu. DLE olmadan, her GATT isteği (247 bayta kadar) 27 baytlık paketlere bölünür. DLE ile tek bir paket olarak iletilir. Maksimum hız için her iki parametrenin de pazarlık edilmesi gerekir.

Bir fitness takipçisi için hangi MTU seçilmelidir?

Kalp atış hızı ve adım okumaları ileten bir fitness takipçisi için standart 23 bayt MTU yeterlidir. Egzersiz geçmişini (10–50 KB) aktarmanız gerekiyorsa, akıllı telefona bağlanırken veri senkronizasyonunu hızlandırmak için MTU 247 bayt pazarlık edin.

Özet

  • MTU — bir GATT isteğindeki maksimum veri boyutu: 23 bayt (varsayılan) ile 251 bayt (BLE 5.0) arasında.
  • MTU pazarlığı, bağlantıdan sonra Central tarafından başlatılan MTU Size Request/Response aracılığıyla gerçekleşir.
  • ATT Protokolü, MTU'yu 257 bayt ile sınırlar, ancak iOS ve Android otomatik parçalamayla 512–517 bayta kadar ister.
  • MTU'nun 23'ten 247 bayta çıkarılması, optimum bağlantı aralığıyla verimi 5–10 kat iyileştirir.
  • Maksimum hız için MTU + DLE + bağlantı aralığı 7,5 ms pazarlık edin.
  • iOS'ta MTU otomatik olarak pazarlık edilir; Android'de requestMtu kullanın — 247–517 bayt istenmesi önerilir.
  • OTA güncellemeleri — en zorlu senaryo: doğru MTU, aktarım süresini dakikalardan saniyelere düşürür.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun