最終更新:2026-01-28 (水) 08:23:47 (21d)
BLE/MTU
1回のATT通信で送受信できる最大データサイズ
ATT_MTU
属性の最大長 (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
- MTU をリクエストする最初の GATT クライアントの MTU が 517 に設定される
https://developer.android.com/about/versions/14/behavior-changes-all?hl=ja#mtu-set-to-517
- Bluetooth 5.2

