Связь через последовательный порт Bluetooth (SPP)
Мы работаем над приложением, которое будет использовать SPP (профиль последовательного порта) по Bluetooth, и разработчики обсуждают использование протокола определенного типа и доставки пакетов, а не просто потоковую передачу данных без какой-либо формы ACK, последовательности или информации о размере.
Обеспечивает ли Bluetooth гарантированную доставку и целостность данных, чтобы нам не требовались дополнительные затраты при разработке протокола передачи пакетов? Можем ли мы полагаться только на Bluetooth для обеспечения доставки данных?
2 ответа
Доставка гарантирована?,
Заказ на доставку гарантирован. Это связано со схемой подтверждения / нумерации последовательностей, встроенной в нижние уровни протокола Bluetooth. поэтому на нижнем уровне пакет повторно передается, пока не будет подтвержден. обратите внимание, что это эквивалентно остановке и ожиданию схемы ARQ. если это занимает больше времени ожидания, то соединение считается потерянным (обычно 30 секунд)
гарантирована ли целостность данных?
В Bluetooth 4.2 введено безопасное соединение BT. Сюда входит проверка целостности сообщений (MIC) с каждым передаваемым пакетом, а несовпадение MIC на принимающей стороне вызовет повторную передачу, и ряд несовпадений MIC может разъединить соединение.
поэтому, если вы не используете функцию безопасного соединения, целостность не гарантируется. Существует 16-битная схема CRC, используемая для защиты данных, но известно, что в течение длительного периода времени будут происходить побеги CRC (биты переворачиваются таким образом, что CRC остается корректным). но это относительно редко и происходит в шумной обстановке. если вашему приложению требуется очень высокая целостность данных, либо используйте SecureConnection, либо внедрите проверки целостности на уровне приложения.
Обратите внимание, что профиль SPP сам по себе не имеет никакой проверки ошибок / последовательности, RFCOMM имеет 8-битную FCS (последовательность проверки кадра), которая проверяет наличие повреждения заголовка. Режим потоковой передачи / ретрансляции L2CAP имеет дополнительный 16-битный FCS, который охватывает заголовок и данные L2CAP. Обратите внимание, что основной режим L2CAP вообще не имеет FCS.
если у вас есть возможность включить L2CAP FCS, то у вас есть 16-битный CRC на более низком уровне + 16-битный FCS на уровне L2CAP + 8-битный FCS на уровне RFCOMM, что обеспечит целостность данных, что достаточно для большинства приложений. Однако, как упоминалось ранее, если это действительно важно, вам необходимо ввести дополнительные проверки целостности на уровне приложений.
По сути BT имеет свои собственные механизмы безопасности для передачи. Тем не менее, и это так же важно - я приказываю ВАМ знать, когда данные начинаются и заканчиваются, вы должны использовать передачу типа пакета, такую как STX и ETX, для разделения каждого пакета. Есть ключи, которые придерживаются плохой привычки повторять последний отправленный байт, если в передаче есть промежуток времени, но они остановятся, когда встретятся ETX или EOT. И, для вашей системы безопасности, вы можете также включить контрольную сумму в конце пакета. Тогда ты уверен.