В этом случае однозначная синхронизация невозможна. А вводить еще один уникальный символ для обозначения конца пакета не хотелось - его пришлось бы тоже передавать со стаффингом, что увеличивает избыточность. Поэтому я решил передавать количество байт внутри пакета, это обычное число, как и другие данные. Протокол Wake предназначен прежде всего для управления оборудованием в режиме запрос-ответ, когда длина пакета очень мала. Протокол не ориентировался на передачу больших блоков данных. Для этого нужен другой протокол.
В пользу маркера конца пакета здесь неоднократно высказывались с той точки зрения, что этот символ можно использовать в роли event character (см. Windows API). Возникнет событие, но нельзя будет сказать, принят валидный пакет, или нет. И размер буфера непонятно какой нужен. У меня подход несколько другой, проверка пакета производится "на лету". Есть плюсы и минусы, но я выбрал такой способ.