Кратко

  • Необязательный TimeStamp можно пропустить по известной длине, но обязательный PDU-Concat определяет, как остаток SNDU делится на PDU; непонимание формата не позволяет безопасно продолжить разбор.
  • Экономия общего типа и NPA-адреса превращает несколько PDU в единицу совместной проверки, поэтому целостность оболочки, сверка длин, извлечение и результат верхнего уровня требуют разных квитанций.

В RFC 4326 длина необязательного расширения закодирована так, чтобы незнакомый получателю блок можно было перескочить и найти следующий заголовок. RFC 5163 использует этот механизм для TimeStamp. Получатель может измерять метку или игнорировать её, но обязан продолжить обработку остальной SNDU.

С PDU-Concat так поступить нельзя. Он сообщает, где заканчивается одна PDU и начинается другая. Пропустить неизвестную грамматику означало бы придумать границы данных.

Обязательность защищает смысл разбора

PDU-Concat зарегистрирован как обязательный тип 3. Один PDU-Concat-Type описывает все вложенные PDU; они должны иметь общий тип ULE, а рекурсивный PDU-Concat запрещён. Каждому члену предшествует 15-битная длина. Выравнивание по 16 или 32 битам не требуется.

Если SNDU содержит NPA-адрес назначения, один и тот же адрес относится ко всем членам. При его отсутствии все PDU обрабатываются без NPA. Предшествующие расширения, включая TimeStamp, охватывают составной объект.

Так уменьшается повторение заголовков. Но общий тип не означает общую транзакцию, а NPA не становится удостоверением личности. RFC 4259 называет NPA-фильтрацию слабой мерой безопасности, которая может перенастраиваться программно. Она не аутентифицирует источник и не авторизует содержимое.

Внешняя целостность и внутренняя разметка

ULE проверяет CRC-32 SNDU. В фрагментированном GSE CRC находится в последнем фрагменте и удаляется после сборки. Форматы различаются также флагами и расчётом длины. Успешный CRC означает лишь то, что защищённые байты прошли соответствующую проверку.

Затем получатель проверяет поддержку PDU-Concat-Type, длину каждого члена и совпадение их суммы с базовой длиной SNDU. Неподдерживаемый тип должен быть отброшен, а событие желательно записать как PDU-Type error.

Если сумма и размеры не сходятся, RFC говорит, что следует отбросить всю SNDU и записать ошибку PDU-Concat size mismatch. Если заявленная длина отдельной PDU больше оставшегося числа байтов, частичную PDU передавать нельзя. В первом случае действует SHOULD, во втором MUST NOT; точная сила требований важна.

Отсюда возникает цепочка отдельных свидетельств: приём однотипных PDU в очередь; истечение ограниченного порога или иной триггер; отправка; контекст NPA; сборка и CRC; распознавание типа; проверка каждой границы; закрытие суммы; извлечение; дальнейшая передача; реакция верхнего уровня. Запись IANA подтверждает присвоение номера, а не поддержку конкретным устройством. Извлечение на канальном уровне не доказывает результат приложения.

Необязательная метка тоже имеет предел доказательства

TimeStamp содержит 32-битное число микросекунд от начала часа UTC. RFC перечисляет возможные применения: порядок в логическом канале, односторонняя задержка при синхронизированных часах, джиттер и потери при наличии дополнительных данных отправителя. Само поле не доказывает точность часов, потерю или доставку каждого члена.

PDU-Concat, напротив, обязателен не потому, что важнее для бизнеса, а потому, что меняет кодировку дальнейших байтов. Классификация расширения говорит, может ли старый разборщик безопасно продолжить работу. Она не является оценкой качества или квитанцией об эффекте.

Время упаковки и общий риск

RFC требует ограничить PDU Packing Threshold и рекомендует сделать его настраиваемым. Более долгое ожидание может повысить эффективность, но увеличивает джиттер и, возможно, вероятность повреждения. Если новая PDU не поступила до порога, все ожидающие PDU должны быть отправлены немедленно.

Универсального порога нет. Экономию байтов и обработки нужно сопоставлять с фактическим ожиданием и количеством независимых PDU, которые одна некорректная оболочка способна увести вместе.

В TS-Concat эта связь выражена фиксированным размером: остаток должен делиться на 188 байт. Иначе получатель обязан отбросить все вложенные MPEG-2 TS-пакеты. Агрегирование выбирает единицу эффективности и единицу отказа одновременно.

Источники