Кратко

  • RFC 3408 разрешил заменять пакетом без заголовка только R-0 в надёжном режиме, если вспомогательный уровень восполнял сведения о типе и последовательности.
  • Когда правильное восстановление переставало быть гарантированным, отметка SN_break закрывала путь NHP до подтверждённого обновления за границей разрыва.

Причина экономии была связана с устройством старых радиоинтерфейсов. Они использовали фиксированные размеры передачи, поэтому даже однобайтовый заголовок ROHC мог вытолкнуть речевой пакет в следующую, заметно более дорогую категорию. RFC 3243 не называл нулевой заголовок универсальным улучшением: выигрыш существовал лишь там, где приложение и линия соответствовали этим предпосылкам.

RFC 3242 уже определил работу без заголовка для режимов U и O. Вместе с экономией он перечислил перенесённые обязанности. Вспомогательный уровень должен был отличать NHP от пакета с заголовком ROHC, сохранять необходимый порядок и сообщать о каждой существенной потере на линии. Значение заголовка не исчезало, а меняло место происхождения.

RFC 3408 добавил надёжный режим R. Разрешение было узким: только R-0 мог превратиться в NHP. Декомпрессор восстанавливал номер RTP как сумму последней безопасной опоры и смещения. Способ получить смещение зависел от конкретной линии и должен был быть описан в её спецификации.

Можно было считать все пакеты без обновления контекста и сигналы потери после последнего успешного обновления. Можно было поддерживать линейную связь между временем линии и RTP-последовательностью. Оба варианта требовали наблюдаемого источника. Если такого источника не было, полезная нагрузка оставалась, но её позиция становилась предположением.

Вспомогательный уровень получал полномочие объявить передачу NHP небезопасной, даже когда компрессор формально её допускал. Он записывал соответствующий номер как SN_break и возвращался к заголовкам. Для возобновления недостаточно было стабилизировать линию: значение SN_ACKed должно было стать больше отметки разрыва. Старое подтверждение не описывало состояние после ошибки.

Пассивное ожидание следующего обновления контекста могло затянуться. Поэтому RFC 3408 рекомендовал необязательный update_request от вспомогательного уровня к компрессору. Запрос просил сделать следующий пакет обновляющим. Его потеря между разнесёнными компонентами означала задержку возврата к лучшей эффективности, но не разрешение перескочить через условие подтверждения.

Граница контекста оставалась строгой. NHP и сигналы потери не обновляли состояние компрессора или декомпрессора. В R-0 изначально не было CRC, поэтому не требовалось заменять удалённую проверку, как в U/O. Пакет R-0-CRC при обороте шестибитного номера давал периодическую проверку безопасной опоры.

Даже размещение ACK влияло на доступность NHP. Вставленные в поток пакеты обратной связи нарушали непрерывность RTP и временно отключали передачу без заголовка, поэтому их не рекомендовали. Ложные CCP со случайными CRC могли вызвать фиктивные ошибки, сброс контекста, дополнительную обратную связь и обновления. Это атака на доступность экономии, а не доказательство подмены речи.

Поздние документы о фреймворке ROHC, ROHCv2 и каналах с переупорядочением расширили окружение, а реестр IANA сохранил идентификаторы профилей. Они не дают данных о развёртывании RFC 3408. Его исторический результат иной: поле можно убрать с линии лишь тогда, когда его функции получают именованных владельцев и проверяемый путь восстановления.

Sources