コマンドライン版のパケットキャプチャソフト「tshark」をRaspberry Pi 3で起動し、Raspbery Pi 3に標準でインストールされているBluethoothと、SensorTag間のBluetooth Low Energy(BLE)パケットをキャプチャし、
Specification of the Bluetooth system Core_v4.2」に基づきパケット構造を解析します。なお斜体文字はSpecification of the Bluetooth systemの項番を示し、各パケット構造図については、対応する仕様書の項番からキャプチャしています。

tshark使用してスキャンのBLEパケットのキャプチャ

tsharkでキャプチャしたBLEパケット」に従って、最初に、tsharkを次のコマンドで起動ます。

$ sudo tshark -i 5 -x -V -w log

次のhcitool コマンドでスキャンを行い、SensorTagの側面のスイッチを押してアドバタイズします。

$ sudo hcitool lescan

tsharkを停止して、収集したログをWindows版Wiresharkで読み込ませます。次の6フレームがキャプチャされます。

BLEパケットログ

BLEのスキャンからアドバタイズまでのパケットシーケンスを次に示します。

BLEのスキャンからアドバタイズまでのパケットシーケンス

HCI UARTトランスポートレイヤー

UARTの場合、フレームの種類を表わすオクテットがあり、続いて実際のデータがあります。

  • HCI packet indicator (8ビット)
  • HCI packet (任意長)

indicatorは、フレームの種類(4種類)に応じて、次のように定義されています。

BLE
パケットフレームの種類
tsharkでキャプチャしたBLEパケットには、HCI Packet typeが
「HCI Command Packet」と「HCI Event Packet」のパケットがキャプチャされていました。
BLUETOOTH SPECIFICATION Version 4.2 [Vol 4, Part A] 2 PROTOCOL

HCI Command Packet

HCI Command Packetは、コマンドをホストからコントローラに、次のパケット構造で送信する。

HCI Command Packetパケット構造
BLUETOOTH SPECIFICATION Version 4.2 [Vol 2, Part E] 5.4.1 HCI Command Packet

HCI Event Packet

HCI Event Packetは、イベントが発生したときに、次のパケット構造でホストに通知するために、コントローラにより使用される。

HCI Event Packetパケット構造

BLUETOOTH SPECIFICATION Version 4.2 [Vol 2, Part E] 5.4.4 HCI Event Packet

HCI Command Packet

次のセンサーをスキャンするために、次の2種類のHCI Command Packetを使用する。

  • LE Set Scan Parameters Command
  • LE Set Scan Enable

LE Set Scan Parameters Command

LE Set Scan Parameters Commandは、スキャンパラメータを設定するために使用する。

【Wiresharkでの解析】

Command Opcode: LE Set Scan Parameters (0x200b)
    0010 00.. .... .... = Opcode Group Field: LE Controller Commands (0x0008)
    .... ..00 0000 1011 = Opcode Command Field: LE Set Scan Parameters (0x000b)
Parameter Total Length: 7
Scan Type: Active (0x01)
Scan Interval: 16 (10 msec)
Scan Window: 16 (10 msec)
Own Address Type: Public Device Address (0x00)
Scan Filter Policy: Accept all advertisments. Ignore directed advertisements not addresed to this device (0x00) 
[Response in frame: 2]
[Command-Response Delta: 0.55 ms]

【パケットの16進・ASCII表示】

01 0b 20 07 01 10 00 10 00 00 00                 .. ........

BLUETOOTH SPECIFICATION Version 4.2 [Vol 2, Part E] 7.8.10 LE Set Scan Parameters Command

HCI Event Packet

ホストからのコマンドの実行完了通知とセンサーのアドバタイズを通知するために、次の2種類のHCI Event Packetを使用する。

  • Command Complete Event
  • LE Meta Event

LE Meta Event

LE Meta Eventは、LEコントローラのイベントをカプセル化する。

【Wiresharkでの解析】

Event Code: LE Meta (0x3e)
Parameter Total Length: 32
Sub Event: LE Advertising Report (0x02)
Num Reports: 1
Event Type: Scan Response (0x04)
Peer Address Type: Public Device Address (0x00)
BD_ADDR: TexasIns_64:cd:df (b4:99:4c:64:cd:df)
Data Length: 20
Advertising Data
    Device Name: SensorTag
    Slave Connection Interval Range: 100 - 1000 msec
        Length: 5
        Type: Slave Connection Interval Range (0x12)
    Connection Interval Min: 80 (100 msec)
    Connection Interval Max: 800 (1000 msec)
    Tx Power Level
RSSI (dB): -70

【パケットの16進・ASCII表示】

04 3e 20 02 01 04 00 df cd 64 4c 99 b4 14 0a 09  .> ......dL.....
53 65 6e 73 6f 72 54 61 67 05 12 50 00 20 03 02  SensorTag..P. ..
0a 00 ba                                         ...    

BLUETOOTH SPECIFICATION Version 4.2 [Vol 2, Part E] 7.7.65 LE Meta Event