最終更新:2026-01-28 (水) 08:23:47 (21d)  

BLE/MTU
Top / BLE / MTU

1回のATT通信で送受信できる最大データサイズ

ATT_MTU

  • パケットサイズの最大値 (ATT)
  • 上位のレイヤ(GATT)がデフォルト値を定義
  • デフォルトは23バイト

属性の最大長 (ATT)

  • Bluetooth Core Specification/Volume 3/Part F > 3.2.9 Long attribute values
  • The maximum length of an attribute value shall be 512 octets.
  • ATTでは、属性値がATT_MTU-3より長いかどうかを判別することはできない。
  • ある属性がATT_MTU-3を超える最大長を持ち得るかどうかは、上位レイヤの仕様により規定される。

AndroidでMTUが517に設定される理由

  • https://issuetracker.google.com/issues/307234027#comment4
    515 ではなく 517 が選ばれた理由について、もう少し詳しく説明させていただきます。517 が
    選ばれたのは、2012 年に Android Bluetooth スタックが初めてリリースされて以来、GATT_MAX_MTU_SIZE 定数が 517 に設定されていたためです。
    さらに深い理由としては、Bluetooth 仕様では ATT 属性の最大サイズが 512 バイトまでとされており、
    最大コマンド ATT_PREPARE_WRITE_REQ のヘッダーは 5 バイトであるということです。
    つまり、512 + 5 = 517 となります。Bluetooth仕様では、パケットデータ自体は 512 を超えることはできません。
  • ATT_PREPARE_WRITE_REQ
  • メモ
    • 実際にはATT_SIGNED_WRITE_CMD?のほうがヘッダ分は大きい(7バイト)が、ほとんど使われないため

GATT/MTU

  • 下記の通信でMTUの交換が可能

ATT_EXCHANGE_MTU_REQ?

  • クライアントのリクエスト

ATT_EXCHANGE_MTU_RSP

  • サーバのレスポンス

ペイロード

  • ATT/PDU (23)
    • ATTヘッダ (3)
    • ペイロード (20)

Android 14

関連

参考