yurikhan: (Default)
[personal profile] yurikhan

Раздаточный материал: Описание протокола WialonRetranslator 1.0 (PDF, 156K, 3 не очень плотных страницы)

Задача 1: Перечислите ошибки, допущенные при документировании этого протокола.

Задача 2*: Перечислите ошибки, допущенные при проектировании этого протокола.

Комменты не скринятся. Ответы выложу через пару-тройку дней.

Upd: [livejournal.com profile] kgeorgiy нашёл практически все ошибки документирования.

Ответы

  • Ошибка документирования: не указан рекомендуемый TCP-порт.
  • Спорное решение: бинарный протокол. Лучше было взять json и паковать его gzip’ом.
  • Ошибка проектирования: протокол не самосинхронизирующийся — начав с середины потока, нельзя найти начало ближайшего полного пакета.
  • Неудачная терминология: «пакет». Ассоциируется с пакетами TCP/IP.
  • Неоднозначная терминология: «байт». Однозначный термин — «октет».
  • Ошибка документирования: из всех характеристик, которыми задаются целочисленные и вещественные поля, указаны только размеры. Для целых чисел длиннее 1 байта нужно задавать ещё порядок байт (little- или big-endian); для всех целых — знаковость (знаковое или беззнаковое); для знаковых — представление отрицательных чисел (two’s complement, one’s complement, sign-and-magnitude, biased). Для вещественных — порядок байт; плавающая или фиксированная точка; если фиксированная, то по какому основанию и сколько разрядов; если плавающая, то какие биты отвечают за мантиссу, какие за экспоненту. (Достаточно сказать слово IEEE 754.)
  • Ошибка проектирования: размер всего пакета — little-endian, все остальные целочисленные поля — big-endian, все вещественные поля — little-endian. Следовало взять один порядок и придерживаться его.
  • Ошибка документирования: не указана кодировка текстовых полей (ASCII или UTF-8; если текст в каких-то других кодировках, то это ошибка проектирования).
  • Ошибка проектирования: конец строки определяется по нулевому байту. В бинарном протоколе удобнее передавать длину строки в начале.
  • Ошибка документирования: для поля времени не указана точка отсчёта (1970-01-01T00:00:00Z).
  • Ошибка документирования: не объяснено назначение флагов.
  • Ошибка проектирования: флаги частично дублируют имя блока.
  • Ошибка документирования: для набора блоков не указана минимальная и максимальная кратность, не сказано, могут ли повторяться блоки с одинаковым именем, и важен ли порядок.
  • Ошибка документирования: не перечислены возможные значения типа блока. В примере все блоки имеют тип 3003 (0xBBB) и не объясняется его назначение.
  • Ошибка документирования: для полей «Размер пакета» и «Размер блока» не указано, от какого и до какого октета считать.
  • Ошибка документирования: не описана семантика скрытия параметров.
  • Ошибка документирования: для физических величин не указана единица измерения, направление, начало отсчёта и область значений. (Пример: долгота в градусах к востоку от Гринвича (от −180 до, но не включая 180), широта в градусах к северу от экватора (от −90 до 90 включительно), высота в метрах над уровнем моря, скорость в километрах в час (≥ 0), курс в градусах по часовой стрелке от истинного севера (от 0 до, но не включая 360).)
  • Ошибка проектирования: поле долготы поставлено перед полем широты. Канонический порядок географических координат — (широта, долгота[, высота]).
  • Ошибка документирования: «являются интуитивно понятными». Что именно нужно было задокументировать — интуитивно понятно тип данных для всех блоков, единицу измерения для напряжения и уровня сигнала gsm, семантику всех блоков.
  • Ошибка документирования: вопросы тайминга пакетов и подтверждений («Следующий пакет не передаётся, пока не получено подтверждение для предыдущего» или что-то такое).
  • Ошибка документирования: полупустая страница перед разбором примера создаёт впечатление конца документа.
  • Ошибка документирования: шестнадцатеричные дампы в примере следовало разбить на октеты и строчки по 16 октетов и подписать смещения для удобства чтения.

Вот с такой фигнёй иногда приходится работать.

Date: 2016-06-03 12:36 (UTC)
From: [identity profile] kgeorgiy.livejournal.com
Я не настоящий сварщик, но:

Ошибки документирования
1. «представляют собой пакет» -- один (видимо, конечно нет)? А как на счет фрагментации?
2. «Тип поля: целое число» -- endianness? Знаковое? Как представляется знак?
3. «Тип поля: Текстовый» -- charset, кодировка?
4. «Размер пакета»: c учетом заголовка или без? Максимальный размер пакета?
5. «Время в секундах (UTC)» -- Время чего (отправки пакета, получения данных)? Бывает ли отрицательное? Когда начало эпохи?
6. Могут ли блоки повторятся? Может ли не быть блоков?
7. Не специфицирован способ хранения значений блоков различных типов. Не специфицирована граница бинарного блока (если есть).
8. Есть ли фиксированная позиция у блока pos info?
9. «Тип поля: дробное число» -- fixed/floating point? Формат хранения? Единица измерения?
10. «Скорость: целое число» -- Единица измерения? Бывает ли отрицательной?
11. «Курс: целое число» -- Единица измерения? Бывает ли отрицательным?
12. «Остальные используемые блоки имеют простую структуру и являются интуитивно понятными» -- ага, отлично!
13. «На каждый входящий пакет должен быть выслан серверу байт подтверждения получения пакета: 0x11». Когда? Какие задержки допустимы? Могу ли я получить следующий пакет до отправки подтверждения о предыдущем?

Ошибки проектирования
1. Не рассмотрены вопросы установления/завершения/поддержания/обрыва соединения.
2. Отсутствует возможность повторного получения данных случае обрыва соединения
3. Отсутствие ограничения на максимальный размер пакета/блока

Date: 2016-06-03 14:36 (UTC)
From: [identity profile] kgeorgiy.livejournal.com
Вот это было внезапно! Не ожидал, что после страницы заполненной только на 1/4 еще что-то есть.

1. Ok, little endian. С одной стороны, этого стоило бы ожидать от протокола с неуказанным порядком байтов. С другой стороны – не типично для сетевого протокола.
2. Размер пакета, не считая размера пакета?
3. ok, Unix-эпоха.
4. Битовые флаги в big endian?? И размер блока?
5. Вопрос нескольких пакетов остался за кадром.

Profile

yurikhan: (Default)
Yuri Khan

August 2018

S M T W T F S
   1234
567891011
12131415161718
19202122232425
26 2728293031 

Links

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated 2026-01-09 15:50
Powered by Dreamwidth Studios