Bluetooth®|基礎編

アトリビュートプロトコルPDUフォーマット

2017.09.12

この記事のポイント

・ATTプロトコルPDUは、アトリビュートOpCode、アトリビュートパラメータ、オーセンティケーションシグネチャで構成される。

・アトリビュートOpCodeは、メソッド、コマンドフラグ、オーセンティケーションシグネチャフラグを有する。

・コマンドフラグに1が立っている場合、そのPDUはコマンドであることを意味する。

・オーセンティケーションシグネチャフラグが1の場合は、オーセンティケーションシグネチャを使うことを意味する。

今回は前回に続き、アトリビュートプロトコルのPDUについてです。前回は、アトリビュートプロトコル(以下、ATTプロトコル)のPDU(Protocol Data Unit)自体の説明をしましたが、今回はそのフォーマットについて説明します。

ATTプロトコルPDUフォーマット

ATTプロトコルPDUは、アトリビュートOpCode(Attribute OpCode)、アトリビュートパラメータ(Attribute Parameter)、オーセンティケーションシグネチャ(Authentication Signature:電子署名)で構成されています。ATT_MTUは、ATTプロトコルPDUの最大長(MTU:Maximum Transfer Unit)で、デフォルト値は23 octですが可変長です。

graf_20170912_05

アトリビュートOpCodeは1 octで、メソッド(6 bit)、コマンドフラグ(Command flag)、オーセンティケーションシグネチャフラグ(Authentication Signature flag)から構成されています。OpCodeは、前回のPUDの一覧表に示したので参照してください。

メソッドは、アトリビュートパラメータのフォーマットとその意味を示しています。

コマンドフラグに1が立っている場合、そのPDUはコマンドであることを意味します。

オーセンティケーションシグネチャフラグが1の場合は、オーセンティケーションシグネチャを使うことを意味しています。その場合には、ATTプロトコルPUDにオーセンティケーションシグネチャが入ります。中段の図はオーセンティケーションシグネチャフラグにフラグが立っていない場合、下段の図はプラグ(1)が立っている場合です。オーセンティケーションシグネチャは、通信の暗号化は必要としませんが、サーバへの書き込みに関しては信頼できるクライアントであることを確認したい場合に使用します。従って、オーセンティケーションシグネチャフラグに1が立つのは、Writeコマンドだけになります。また、リンク層で暗号化されている場合は、その必要がないのでプラグを立てることはできません。

アトリビュートOpCodeの後には、アトリビュートパラメータが続きます。アトリビュートパラメータは、オーセンティケーションシグネチャを使用しない場合、ATT_MTUからアトリビュートOpCodeの1 octを差し引いた長さ(ATT_MTU-1 oct)になります(図中段)。オーセンティケーションシグネチャを用いる場合は、ATT_MTUからアトリビュートOpCodeの1 octとオーセンティケーションシグネチャの12 octを加算した13 octを引いた長さ(ATT_MTU-13 oct)になります。