BLE da MTU: bu nima, paket hajmi va kelishish

Muallif: IT Sectr Nashr etilgan: 2026-07-15 O'qish vaqti: 10 daq

MTU (Maximum Transmission Unit) — bir GATT tranzaksiyasi davomida qurilmalar o‘rtasida uzatilishi mumkin bo‘lgan bitta BLE paketidagi foydali ma‘lumotlarning maksimal hajmi. BLE Classic (4.x) da MTU 23 bayt darajasida qat‘iy belgilangan, bu sensorlarning kichik ko‘rsatkichlari uchun yetarli, ammo fayllarni yoki OTA yangilanishlarini uzatish uchun yetarli emas. Bluetooth Core Specification 4.2 (2014) MTU Size Request protsedurasini joriy qildi, bu kattaroq MTU — 247 baytgacha (BLE 5.0 — 251 baytgacha) kelishish imkonini beradi. MTUni to‘g‘ri sozlash katta hajmdagi ma‘lumotlarni uzatuvchi BLE ilovalari samaradorligining asosiy omillaridan biridir.

Asosiy ma’lumotlar

  • MTU — bitta BLE paketidagi maksimal ma’lumot hajmi, 23 baytdan (BLE 4.x) 251 baytgacha (BLE 5.0).
  • MTU kelishuvi GATT ulanishi o‘rnatilgandan so‘ng MTU Size Request/Response orqali amalga oshiriladi.
  • Katta MTU (247 bayt) ma’lumot uzatish tezligini standart 23 bayt bilan solishtirganda 5–10 marta oshiradi.
  • Android avtomatik ravishda BLE 5.0 bilan 517 bayt MTU so‘raydi, iOS — requestMTU orqali 512 bayt.
  • Mikrodasturning OTA yangilanishlarida katta MTU uzatish vaqtini daqiqalardan soniyalarga qisqartiradi.

BLE da MTU nima?

Maximum Transmission Unit (MTU) BLE kontekstida — qurilma bir GATT so‘rovida qabul qila oladigan maksimal Application Protocol Data Unit (APDU) hajmi. MTU ATT (Attribute Protocol) darajasida aniqlanadi va ATT sarlavhasi (1 bayt) + foydali ma’lumotlarni o‘z ichiga oladi. Odatiy bo‘lib, barcha BLE qurilmalari 23 bayt MTUni qo‘llab-quvvatlaydi (23 = 1 bayt ATT sarlavhasi + 22 bayt ma’lumot).

MTU radio kanalining jismoniy chegarasi emas, balki GATT darajasida qurilmalar o‘rtasidagi kelishuvdir. Link Layer darajasidagi BLE paketining jismoniy hajmi kattaroq bo‘lishi mumkin (BLE 4.0 da 27 baytgacha, BLE 5.0 da Data Length Extension bilan 257 baytgacha), ammo GATT darajasi bir tranzaksiyada qancha ma’lumot uzatilishini cheklaydi. Data Length Extension (DLE) — Link Layer darajasidagi alohida mexanizm bo‘lib, jismoniy paketni 251 baytgacha oshiradi va alohida kelishilishi kerak.

MTU va DLE o‘rtasidagi farq: ATT MTU — bir GATT so‘rovida qancha ma’lumot uzatiladi, DLE — bir Link Layer paketiga qancha ma’lumot sig‘adi. Maksimal tezlik uchun ikkala parametr ham kelishilishi kerak. DLEsiz hatto MTU 247 bayt bo‘lsa ham, ma’lumotlar 27 baytli bir nechta Link Layer paketlariga bo‘linib, o‘tkazish qobiliyatini pasaytiradi.

MTU kelishuvi: protsedura va protokol

MTU Size Request — GATT ulanishi o‘rnatilgandan so‘ng Central tomonidan boshlanadigan protsedura. Central o‘zining MTU sig‘imi (qabul qila oladigan maksimal hajm) ni ko‘rsatgan holda MTU Request yuboradi. Peripheral o‘z qiymati bilan MTU Response bilan javob beradi. Ishlatiladigan MTU ikki qiymatning minimalidir. Agar Central MTU 512 ni taklif qilsa va Peripheral faqat 128 ni qo‘llab-quvvatlasa, ulanish MTU 128 dan foydalanadi.

swift
import CoreBluetooth

// iOS da maksimal MTU so‘rovi
func requestMTU(central: CBCentralManager,
                    peripheral: CBPeripheral) {
    peripheral.maximumWriteValueLength(
        for: .withoutResponse
    )

// iOS ulanishda MTUni avtomatik kelishadi
            // BLE 5.0 qurilmalari uchun MTU = 512
    let mtu = peripheral.maximumWriteValueLength(
        for: .withResponse
    )

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

Kelishuv vaqti: MTU Request xizmatlar aniqlangandan so‘ng (discoverServices), lekin faol ma’lumot uzatish boshlanishidan oldin yuborilishi kerak. iOS Core Bluetooth ulanishda MTUni avtomatik ravishda kelishadi — dasturchi qo‘lda MTU Request yuborishi shart emas. Android da requestMTUni aniq chaqirish kerak. Kelishuvdan so‘ng MTU ushbu ulanish uchun qat‘iy bo‘lib qoladi — qayta kelishish uzilish va qayta ulanishsiz mumkin emas.

ATT cheklovlari: nima uchun MTU 251 baytdan katta bo‘la olmaydi

ATT (Attribute Protocol) — GATT qurilgan protokol. ATT paketi maksimal 257 bayt hajmga ega (ATT_MTU-1). Shundan 1 bayt Opcode (operatsiya turi), 1 bayt Handle, 255 baytgacha Value. Shunday qilib, ATT spetsifikatsiyasi tomonidan ruxsat etilgan maksimal MTU 257 baytdir (amalda 251 baytgacha ishlatiladi, chunki ba‘zi xizmat maydonlari baribir kerak).

MTU dan katta ma’lumotlarni yuborish uchun dastur darajasida parchalash qo‘llaniladi. Dasturchi ma’lumotlarni ≤ MTU o‘lchamidagi bo‘laklarga o‘zi bo‘lib, ularni ketma-ket yuboradi. Har bir bo‘lak alohida GATT Write Request so‘rovi sifatida rasmiylashtiriladi. Qabul qiluvchi tomon bo‘laklarni yagona buferga yig‘adi. GATT da parchalashning o‘rnatilgan qo‘llab-quvvatlashi yo‘q — bu dasturchining vazifasidir.

BLE versiyasiMaks. MTUMaks. DLEATT MTU chegarasi
BLE 4.0 / 4.123 bayt27 baytATT qat‘iy
BLE 4.2247 bayt251 bayt257 bayt
BLE 5.0251 bayt251 bayt257 bayt
Android + iOS512 / 517251 baytATT dan oshib ketish

Qiziq fakt: iOS va Android mos ravishda 512 va 517 bayt MTU so‘raydi, ammo bu qiymat ATT chegarasidan oshib ketadi. Amalda, BLE steki bunday ma’lumotlarni avtomatik ravishda parchalab, ularni maksimal 251 baytdan bir nechta ketma-ket GATT so‘rovlari sifatida yuboradi. Dasturchi uchun farq sezilmaydi — writeValue iOS da 512 baytgacha bo‘lgan har qanday o‘lcham bilan ishlaydi.

MTUning samaradorlikka ta’siri

MTU hajmi BLE ulanishining o‘tkazish qobiliyatiga bevosita ta’sir qiladi. MTU 23 bayt bo‘lganda ideal sharoitda maksimal foydali uzatish tezligi taxminan 7–10 KB/s ni tashkil qiladi. MTUni 247 baytga oshirish tezlikni 60–90 KB/s gacha ko‘taradi (DLE va optimal connection interval bilan). Bu, ayniqsa, tasvirlar, audio fragmentlar yoki loglarni uzatuvchi ilovalar uchun muhimdir.

BLE uzatish samaradorligi uch omilga bog‘liq: MTU (bir ATT so‘rovida qancha ma’lumot), connection interval (almashinuv hodisalari qanchalik tez-tez sodir bo‘lishi) va DLE (bir Link Layer paketida qancha ma’lumot). Maksimal tezlik uchun optimal konfiguratsiya: MTU = 247, DLE = 251, connection interval = 7.5 ms (minimal qiymat).

Bluetooth SIG White Paper (2023) ma’lumotlariga ko‘ra, MTUni 23 dan 247 baytga oshirish connection interval 30 ms bo‘lganda o‘tkazish qobiliyatini 8 KB/s dan 42 KB/s gacha — 5 barobarga oshiradi. Connection interval 7.5 ms bo‘lganda o‘tkazish qobiliyati 88 KB/s ga etadi. Yuqori tezlikni talab qilmaydigan ilovalar (harorat sensorlari, BLE mayoqlari) uchun standart MTU 23 bayt yetarli bo‘lib qoladi.

iOS va Android da MTUni sozlash

iOS Core Bluetooth Peripheral ga ulanishda MTUni avtomatik ravishda kelishadi. Dasturchi joriy MTUni maximumWriteValueLength orqali tekshirishi mumkin, ammo uni qo‘lda o‘rnatolmaydi. iOS BLE 5.0 qurilmalari uchun 512 baytgacha va BLE 4.2 uchun 247 baytgacha MTU dan foydalanadi. Katta hajmdagi ma’lumotlarni yozish uchun kafolatlangan yetkazib berish uchun writeType: .withResponse dan foydalaning.

kotlin
// Android da MTU so‘rovi (Kotlin)
val bluetoothGatt: BluetoothGatt = ...

// 517 bayt MTU so‘rovi
bluetoothGatt.requestMtu(517)

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

Android BluetoothGatt.requestMtu(int) ni taqdim etadi, bu 517 baytgacha bo‘lgan istalgan MTUni so‘rash imkonini beradi. Haqiqiy MTU periferik qurilma tomonidan aniqlanadi — agar u faqat 23 baytni qo‘llab-quvvatlasa, Android MTU 23 ni qaytaradi. Joriy MTUni aniqlash uchun gatt.requestMtu(0) dan foydalaning — bu o‘zgartirishga urinmasdan joriy qiymatni qaytaradi. Android 12+ TRANSPORT_LE orqali ulanishda MTUni avtomatik kelishishni qo‘llab-quvvatlaydi.

Platformalararo freymvorklar (Flutter, React Native) odatda requestMTU uchun API ni taqdim etadi. FlutterBlue Plus kutubxonasida MTU ulanish parametri sifatida o‘rnatiladi. RxAndroidBle da — requestMtu metodi orqali. Dastur darajasida parchalanishning oldini olish uchun har doim maksimal MTUni xizmatlar aniqlangandan so‘ng darhol, ma’lumot uzatish boshlanishidan oldin kelishish tavsiya etiladi.

MTU va OTA yangilanishlari

OTA (Over-The-Air) mikrodastur yangilanishlari — BLE da MTUga eng talabchan stsenariy. IoT qurilmasi mikrodasturining odatdagi hajmi 100–500 KB. MTU 23 bayt va connection interval 30 ms bo‘lganda 100 KB uzatish taxminan 2–3 daqiqa davom etadi. MTU 247 bayt va DLE 251 bayt bo‘lganda — 20–40 soniya. MTU 512 bayt (iOS) bo‘lganda esa — 10–15 soniya.

OTA yangilanish jarayoni odatda quyidagilarni o‘z ichiga oladi: mikrodasturni ≤ MTU o‘lchamidagi paketlarga parchalash, Notify/Write orqali ketma-ket yuborish, har bir paketda nazorat summasini tekshirish va qabulni tasdiqlash. Agar biror paket yo‘qolsa, qurilma qayta yuborishni so‘raydi. OTA ishonchliligi MTU va connection intervalni to‘g‘ri tanlashga jiddiy bog‘liq.

OTA uchun tavsiyalar: maksimal MTUni (247–512 bayt) kelishing, connection intervalni 7.5–15 ms ga o‘rnating (agar qurilma qo‘llab-quvvatlasa), jismoniy paketni 251 baytgacha oshirish uchun DLE (Data Length Extension) dan foydalaning. Cheklangan bufer xotirasiga ega qurilmalar uchun (masalan, nRF52 asosidagi BLE modullari) chip spetsifikatsiyasida maksimal MTUni tekshiring.

Tez-tez beriladigan savollar

MTU kelishilmasa nima bo‘ladi?

Ulanish odatiy MTU — 23 bayt dan foydalanadi. Ko‘pgina IoT stsenariylari (sensor ko‘rsatkichlarini uzatish) uchun bu yetarli. Katta hajmdagi ma’lumotlarni uzatish uchun tezlik kelishilgan MTU 247 bayt bilan solishtirganda 5–10 barobar past bo‘ladi.

Ma’lumot uzatish boshlanganidan keyin MTUni o‘zgartirish mumkinmi?

Yo‘q, MTU ulanishdan so‘ng bir marta kelishiladi va uzilish va qayta ulanishsiz o‘zgartirilishi mumkin emas. Shuning uchun MTUni xizmatlar aniqlangandan so‘ng darhol, faol ma’lumot uzatish boshlanishidan oldin kelishish tavsiya etiladi.

Nima uchun Android 517 bayt, iOS esa faqat 512 bayt MTU so‘raydi?

Bular har bir stek uchun tarixiy shakllangan empirik maksimallardir. Haqiqiy ATT MTU spetsifikatsiyaga ko‘ra baribir 257 bayt bilan cheklangan. Steklar 251 baytdan katta ma’lumotlarni avtomatik ravishda bir nechta paketlarga parchalaydi, shuning uchun 512 va 517 o‘rtasidagi farq ahamiyatsiz.

MTU Data Length Extension (DLE) bilan qanday bog‘liq?

MTU — ATT darajasidagi GATT so‘rovining hajmi. DLE — Link Layer darajasidagi jismoniy paketning hajmi. DLEsiz har bir GATT so‘rovi (247 baytgacha) 27 baytli paketlarga parchalanadi. DLE bilan — bitta paketda uzatiladi. Maksimal tezlik uchun ikkala parametr ham kelishilishi kerak.

Fitness trekeri uchun qaysi MTUni tanlash kerak?

Yurak urishi va qadam ko‘rsatkichlarini uzatuvchi fitness trekeri uchun standart MTU 23 bayt yetarli. Agar mashg‘ulotlar tarixini (hajmi 10–50 KB) uzatish talab etilsa — smartfonga ulanishda ma’lumot sinxronizatsiyasini tezlashtirish uchun MTU 247 baytni kelishing.

Xulosa

  • MTU — bir GATT so‘rovidagi maksimal ma’lumot hajmi: 23 baytdan (odatiy) 251 baytgacha (BLE 5.0).
  • MTU kelishuvi ulanishdan so‘ng Central tomonidan boshlanadigan MTU Size Request/Response orqali amalga oshiriladi.
  • ATT protokoli MTUni 257 bayt bilan cheklaydi, ammo iOS va Android avtomatik parchalash bilan 512–517 baytgacha so‘raydi.
  • MTUni 23 dan 247 baytga oshirish optimal connection interval bilan o‘tkazish qobiliyatini 5–10 marta oshiradi.
  • Maksimal tezlik uchun MTU + DLE + connection interval 7.5 ms kelishilishi kerak.
  • iOS da MTU avtomatik kelishiladi, Android da — requestMtu orqali, 247–517 bayt so‘rash tavsiya etiladi.
  • OTA yangilanishlari — eng talabchan stsenariy: to‘g‘ri MTU uzatish vaqtini daqiqalardan soniyalarga qisqartiradi.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing