Бинарные протоколы передачи данных в сети работают следующим образом:
- Заголовки сообщений. habr.com Обычно они начинаются с константной части, которая позволяет с определённой вероятностью обнаружить начало сообщения в непрерывном байтовом потоке. habr.com За константой следует номер версии протокола, который даёт понять, в каком формате должно происходить дальнейшее считывание. habr.com
- Информация о содержимом контейнера. habr.com Указывается тип содержимого, его длина и контрольная сумма. habr.com Имея эту информацию, можно без проблем и опасений считать содержимое и приступить к его разбору. habr.com
- Контрольная сумма заголовка. habr.com Она должна заключать заголовок (исключая из расчёта саму контрольную сумму) — только так можно быть уверенным в том, что считывается валидный заголовок, за которым следуют предназначенные данные. habr.com Если контрольная сумма не совпала, придётся искать следующее начало нового заголовка дальше по потоку. habr.com
Например, в бинарном формате работает протокол HTTP2, который отправляет фреймы с одинаковой структурой: тип, длина, флаги, идентификатор потока и полезная нагрузка фрейма. github.com