11.3. Радиосвязь и канальный уровень¶
Два нижних уровня стека BLE почти полностью автоматичны с точки зрения Python – радиокремний и уровни, которые MicroPython запускает поверх него, обрабатывают всё, от выбора канала до повторной передачи потерянного пакета. Три из принимаемых ими решений всё же проявляются в обращённом к пользователю API: мощность, дальность и пропускная способность.
11.3.1. Радиосвязь¶
BLE использует тот же диапазон 2,4 ГГц промышленно-научно-медицинского назначения (ISM), что и Wi-Fi, микроволновые печи и большинство других маломощных беспроводных технологий малого радиуса действия. Диапазон разделён на 40 каналов шириной 2 МГц.
Три из 40 каналов зарезервированы для рекламы – коротких широковещательных сообщений, объявляющих о присутствии устройства всем, кто слушает. Они разнесены по диапазону, так что слушатель может быстро просканировать все три и так что помеха на любом одном из них вряд ли полностью выведет устройство из эфира.
Тридцать семь – это каналы данных. После того как два устройства соединяются, они обмениваются пакетами по этим каналам, перескакивая между ними по псевдослучайной последовательности, которую обе стороны согласуют во время установления соединения. Адаптивная перестройка частоты позволяет любой из сторон пометить канал как плохой (сильная помеха Wi-Fi, микроволновка, соседняя BLE-сеть), чтобы последовательность его пропускала.
40 каналов BLE в диапазоне 2,4 ГГц. Три предназначены для рекламы, остальные несут трафик по открытому соединению.¶
Радио передаёт короткие пакеты – длиной максимум пару миллисекунд – и спит в промежутках между ними. Именно этот сон делает технологию низкоэнергетической. Типичное периферийное устройство BLE проводит существенно менее одного процента времени за фактической передачей; остальное время радио выключено между запланированными событиями.
11.3.2. Канальный уровень¶
Канальный уровень – это наименьшая единица BLE, которая общается со своим аналогом на другом устройстве. Он выполняет четыре задачи.
Формирование кадров пакетов. Каждый пакет несёт короткий заголовок (адрес доступа к каналу, длину пакета, управляющие биты), полезную нагрузку и CRC. Приёмник проверяет CRC и отбрасывает всё повреждённое.
Адресация. У каждого BLE-устройства есть 48-битный адрес устройства, который идентифицирует его в эфире. Некоторые из них публичные – аппаратный идентификатор, назначенный производителем, прослеживаемый навсегда. Некоторые случайные – генерируются на устройстве, периодически меняются и опционально шифруются, так что перехватчик не может связать две передачи с одним и тем же физическим устройством. Адреса снова появляются в Реклама и сканирование.
Планирование соединения. После того как два устройства соединяются, канальный уровень планирует периодические радиособытия в последовательности перескоков – с фиксированным интервалом соединения между ними – и упаковывает в каждое из них любые данные, поставленные в очередь вышестоящим уровнем GATT. Обе стороны снова засыпают между событиями. Интервал соединения – это параметр, который приложение может запросить (см. Соединения).
Надёжность. Каждый пакет в соединении подтверждается другой стороной. Канальный уровень повторно передаёт всё, что не получило ответа, так что вышестоящие уровни видят упорядоченный поток байтов без потерь. В отличие от UDP – отправь пакет и надейся на лучшее на стороне сети, у BLE при обычном использовании нет отдельного ненадёжного режима – каждый пакет в открытом соединении повторяется до тех пор, пока не дойдёт или пока связь не будет объявлена потерянной.
Канальный уровень – это также место, где работает шифрование, после того как пара устройств согласовала ключ во время сопряжения (см. Сопряжение и привязка). Каждый пакет на зашифрованной связи расшифровывается на приёмнике прежде, чем вышестоящие уровни его увидят.
11.3.4. Что из всего этого видит Python¶
Почти ничего. API bluetooth и aioble не предоставляют каналы, последовательности перескоков, CRC пакетов или таймеры повторной передачи; всё это обрабатывается внутри BLE-порта и радиомодуля. Те части, которые действительно проявляются, – это те, что раскрывает согласование во время установления соединения: интервал соединения, MTU, тип адреса.