N/RFCNET
← Карточка документаEnglish original ↗

RFC 5795 · март 2010

Архитектура устойчивого сжатия заголовков (ROHC)

Авторы: K. Sandlund, G. Pelletier, L-E. Jonsson. Категория: стандарт. Март 2010. Заменяет RFC 4995.

Аннотация

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

Архитектура ROHC вместе с набором профилей сжатия первоначально была определена в RFC 3095. Чтобы улучшить и упростить спецификации ROHC, этот документ отдельно определяет архитектуру ROHC и профиль без сжатия. При этом определение архитектуры не изменяет и не обновляет определение, приведённое в RFC 3095.

Эта спецификация заменяет RFC 4995. Она исправляет одну проблему совместимости, ошибочно внесённую в RFC 4995, и содержит несколько небольших уточнений.

Статус документа

Этот документ относится к стандартам Интернета.

Документ подготовлен Инженерной группой Интернета (IETF) и отражает консенсус её сообщества. Он прошёл публичное рассмотрение и одобрен к публикации Руководящей группой по инженерным вопросам Интернета (IESG). Дополнительные сведения о стандартах Интернета приведены в разделе 2 RFC 5741.

Сведения о текущем статусе документа, исправлениях и способах обратной связи можно получить по адресу http://www.rfc-editor.org/info/rfc5795.

Уведомление об авторских правах

Copyright (c) 2010 IETF Trust и лица, указанные в качестве авторов документа. Все права защищены.

На документ распространяются BCP 78 и Правовые положения IETF Trust, относящиеся к документам IETF (http://trustee.ietf.org/license-info), действовавшие на дату публикации. Внимательно ознакомьтесь с ними: они описывают ваши права и ограничения. Компоненты программного кода, извлечённые из документа, должны включать текст упрощённой лицензии BSD, как указано в разделе 4.e Правовых положений IETF Trust, и предоставляются без гарантий, как описано в этой лицензии.

Документ может содержать материалы из документов или вкладов IETF, опубликованных или предоставленных в открытый доступ до 10 ноября 2008 года. Обладатели авторских прав на некоторые из этих материалов могли не предоставить IETF Trust право разрешать их изменение вне процесса стандартизации IETF. Без соответствующей лицензии правообладателей документ нельзя изменять или создавать производные произведения вне этого процесса, за исключением форматирования для публикации в качестве RFC или перевода на другие языки.

1. Введение

Для многих типов сетей жизненно важно снижать стоимость развёртывания и эксплуатации за счёт более эффективного использования пропускной способности. Сжатие заголовков на канале возможно потому, что часть содержащейся в заголовках информации поддаётся сжатию между пакетами одного потока.

Для каналов, где накладные расходы заголовков IP создают проблему, общий размер заголовка может быть значительным. Приложения, передающие данные внутри RTP [RFC3550], помимо кадров канального уровня, используют заголовок IPv4 [RFC0791] размером 20 октетов, заголовок UDP [RFC0768] размером 8 октетов и заголовок RTP размером 12 октетов, всего 40 октетов. В IPv6 [RFC2460] заголовок IPv6 занимает 40 октетов, а общая длина составляет 60 октетов. Приложения, использующие TCP [RFC0793], имеют транспортный заголовок размером 20 октетов: в сумме 40 октетов для IPv4 и 60 для IPv6.

Относительный выигрыш для конкретных потоков или приложений зависит от размера полезной нагрузки каждого пакета. Для таких приложений, как передача голоса по IP, где полезная нагрузка с закодированной речью может занимать всего 15–20 октетов, выигрыш будет весьма существенным. Аналогично относительный выигрыш для потоков TCP с большой полезной нагрузкой, например при передаче файлов, будет меньше, чем для потоков с небольшой нагрузкой, например сигнализации приложений при установлении сеанса.

По мере внедрения всё большего числа беспроводных технологий для передачи IP-трафика необходимо учитывать их специфические характеристики в алгоритмах сжатия заголовков. Показано, что прежние схемы, например [RFC2507] и [RFC2508], работают недостаточно хорошо на каналах, где значимы как потери, так и время кругового обхода, как это бывает, например, в беспроводных каналах и IP-туннелях.

Кроме того, схема сжатия должна учитывать нередко существенные остаточные ошибки, когда нижний уровень может передать декомпрессору пакет с необнаруженными битовыми ошибками. Она должна также справляться с потерей и перестановкой пакетов до точки сжатия и на канале между точками сжатия и восстановления [RFC4224].

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

RFC 3095 [RFC3095] определяет архитектуру ROHC вместе с первоначальным набором профилей сжатия. Чтобы улучшить и упростить спецификацию, части, посвящённые архитектуре и профилям, разделены на отдельные документы. Этот документ явно определяет архитектуру ROHC, но не изменяет и не обновляет её определение в RFC 3095; оба документа могут использоваться независимо. Это также означает, что реализации на основе любого из них совместимы и могут взаимодействовать друг с другом. При этом предполагается, что настоящая спецификация заменит RFC 3095 в качестве базовой спецификации для всех профилей, определяемых в будущем.

Этот документ исправляет одну проблему совместимости, ошибочно внесённую в RFC 4995. Исправление находится в разделе 5.2.4.1 и уточняет интерпретацию поля Size в обратной связи ROHC.

2. Терминология

Ключевые слова MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, MAY и OPTIONAL в этом документе следует понимать согласно [RFC2119]. В переводе они передаются как ДОЛЖЕН, НЕ ДОЛЖЕН, ОБЯЗАТЕЛЬНО, СЛЕДУЕТ, НЕ СЛЕДУЕТ, РЕКОМЕНДУЕТСЯ, МОЖЕТ и НЕОБЯЗАТЕЛЬНО в соответствии с контекстом.

2.1. Сокращения

В этом разделе перечислено большинство используемых сокращений.

2.2. Терминология ROHC

Контекст

Контекст компрессора — состояние, которое он использует для сжатия заголовка. Контекст декомпрессора — состояние, которое он использует для восстановления заголовка. Когда из контекста ясно, что имеется в виду, слово «контекст» обычно обозначает одно из этих состояний или оба вместе. Контекст содержит необходимые сведения из предыдущих заголовков потока пакетов, например статические поля и возможные опорные значения для сжатия и восстановления. В него также входят дополнительные сведения, описывающие поток, например характер изменения полей: поведение идентификатора IP или типичное увеличение порядковых номеров и временных меток от пакета к пакету.

Повреждение контекста

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

Пакеты, которые невозможно восстановить из-за несогласованности контекстов, считаются потерянными вследствие повреждения контекста. Пакеты, которые восстановлены, но содержат ошибки из-за несогласованности контекстов, считаются повреждёнными вследствие повреждения контекста.

Механизмы восстановления контекста

Механизмы повторной синхронизации контекстов; это важная задача, поскольку повреждение контекста вызывает распространение потерь. Примеры — механизмы на основе NACK и периодическое обновление важных сведений контекста, обычно применяемое при однонаправленной работе. Существуют также механизмы уменьшения вероятности несогласованности, например повторение однотипной информации в нескольких пакетах и CRC для защиты информации, обновляющей контекст.

Проверка CRC-8

Проверка целостности полученного заголовка IR или IR-DYN на наличие битовых ошибок с помощью восьмибитного CRC, содержащегося в этом заголовке.

Проверка CRC

Проверка результата попытки восстановления с помощью трёхбитного или семибитного CRC, содержащегося в заголовке пакета сжатого формата.

Распространение повреждений

Доставка неправильных восстановленных заголовков из-за повреждения контекста, например из-за ошибок (потери или повреждения) предыдущих заголовков либо обратной связи.

Обнаружение ошибок

Обнаружение ошибок нижними уровнями. Если оно несовершенно, остаются остаточные ошибки.

Распространение ошибок

Распространение повреждений или распространение потерь.

Профиль ROHC

Протокол сжатия, определяющий способ сжатия конкретных сочетаний заголовков. Профиль ROHC может быть приспособлен к определённому набору характеристик канала, например к характеристикам потерь и перестановке пакетов между точками сжатия. Профили ROHC конкретизируют определённую в этом документе архитектуру сжатия заголовков; каждому профилю соответствует уникальный идентификатор [ROHC-ids]. При создании канала ROHC согласуется набор профилей, поддерживаемых обеими его конечными точками. При инициализации новых контекстов идентификатор профиля из согласованного набора связывает каждый контекст сжатия с конкретным профилем.

Канал связи

Физический путь передачи, представляющий один переход IP.

Распространение потерь

Потеря заголовков вследствие ошибок (потери или повреждения) предыдущих заголовков либо обратной связи.

Поток пакетов

Последовательность пакетов, значения полей и характер изменения которых позволяют сжимать их заголовки с использованием одного контекста.

Остаточная ошибка

Ошибка, возникшая при передаче и не обнаруженная механизмами проверки ошибок нижнего уровня.

Канал ROHC

Логический однонаправленный канал «точка — точка», передающий пакеты ROHC от одного компрессора одному декомпрессору и, при необходимости, информацию обратной связи ROHC от имени другой пары компрессора и декомпрессора, работающей по отдельному каналу ROHC в обратном направлении. См. также [RFC3759].

В документе также используется понятийная терминология RFC 3759 «Терминология ROHC и примеры отображения на каналы» [RFC3759].

3. Предыстория (информационный раздел)

Раздел знакомит с темой сжатия заголовков. Описываются основные идеи и история схем сжатия, мотивы разработки различных схем и их недостатки, что создаёт основу для архитектуры и профилей ROHC [RFC3095].

3.1. Основы сжатия заголовков

Сжатие заголовков возможно благодаря значительной избыточности значений полей заголовков внутри пакетов и особенно между последовательными пакетами одного потока. На всём пути от отправителя до получателя полная информация заголовка необходима каждому пакету, но на отдельном канале часть её становится избыточной и может быть сокращена при условии её прозрачного восстановления на принимающем конце канала. Размер заголовка можно уменьшить, сначала передав сведения о полях, которые предположительно остаются неизменными в течение всего или большей части времени жизни потока пакетов. Дальнейшее сжатие полей с более динамично меняющимися сведениями достигается методами, приспособленными к предполагаемому характеру изменения каждого поля.

Для сжатия и восстановления необходимая информация из предыдущих пакетов хранится в контексте. Компрессор и декомпрессор обновляют свои контексты при определённых, не обязательно синхронных событиях. Нарушения могут привести к несогласованности контекста декомпрессора, то есть к повреждению контекста, а это — к неправильному восстановлению. Схеме устойчивого сжатия заголовков необходимы механизмы снижения вероятности повреждения контекста в сочетании с механизмами его восстановления.

3.2. Краткая история сжатия заголовков

Первую схему сжатия заголовков, сжатый TCP (CTCP) [RFC1144], предложил Van Jacobson. CTCP, также часто называемый сжатием VJ, сокращает заголовок TCP/IP с 40 до 4 октетов. Для последовательно изменяющихся полей CTCP использует кодирование разностей. Компрессор CTCP обнаруживает повторные передачи на транспортном уровне и при их возникновении отправляет заголовок, обновляющий весь контекст. Этот механизм восстановления не требует явной сигнализации между компрессором и декомпрессором.

Общая схема сжатия заголовков IP [RFC2507] несколько улучшает CTCP. IPHC может сжимать произвольные заголовки IP, TCP и UDP. При сжатии заголовков иных протоколов, кроме TCP, IPHC не использует кодирование разностей и является устойчивой. Механизм восстановления CTCP дополнен отрицательными подтверждениями CONTEXT_STATE, ускоряющими восстановление. Таким образом, этот механизм ограничен временем кругового обхода канала. IPHC не сжимает заголовки RTP.

CRTP [RFC2508] — расширение IPHC для RTP. CRTP сжимает 40 октетов заголовков IPv4/UDP/RTP минимум до 2 октетов, когда контрольная сумма UDP не используется. Если она включена, минимальный заголовок CRTP занимает 4 октета.

На каналах с потерями и большим временем кругового обхода CRTP работает плохо [CRTP-eval]. Каждый потерянный в канале пакет приводит к неудаче восстановления нескольких последующих пакетов, поскольку контекст становится недействительным как минимум на время одного кругового обхода после потери. К сожалению, большие заголовки, отправляемые CRTP для обновления контекста, дополнительно расходуют пропускную способность.

CRTP использует локальный механизм восстановления TWICE, введённый в IPHC. Его название связано с наблюдением: при регулярном потоке сжатых пакетов, если один пакет между точками сжатия потерян, правильно предположить, что обновление из текущего пакета нужно применить дважды. Хотя TWICE значительно улучшает работу CRTP, исследование [CRTP-eval] показало, что даже с TWICE CRTP удваивал число потерянных пакетов.

Усовершенствованный вариант CRTP, называемый eCRTP [RFC3545], предназначен для повышения устойчивости к перестановке и потере пакетов при почти неизменном протоколе. В результате eCRTP предоставляет лучшие средства достижения определённой устойчивости, но ценой дополнительных накладных расходов, что снижает эффективность сжатия по сравнению с CRTP.

4. Обзор ROHC (информационный раздел)

4.1. Общие принципы

Как отмечалось выше, сжатие заголовков на отдельном канале возможно благодаря значительной избыточности значений полей заголовков внутри пакетов и особенно между последовательными пакетами одного потока. Чтобы использовать эти свойства, необходимо выполнить несколько основных шагов.

Первый шаг — выделить пакеты и сгруппировать их в разные «потоки» так, чтобы максимизировать избыточность между пакетами и улучшить степень сжатия. Группировка обычно основана на IP-адресах отправителя и получателя, типе транспортного протокола (например, UDP или TCP), номерах процессов (портов) и, возможно, дополнительных уникальных идентификаторах приложения, таких как источник синхронизации SSRC в RTP [RFC3550]. Компрессор и декомпрессор создают контекст для потока и обозначают его идентификатором контекста CID, включённым в каждый сжатый заголовок.

Второй шаг — понять характер изменения различных полей заголовка. В общем виде поля относятся к одному из следующих классов:

INFERRED — значения можно вывести из других полей или внешних источников. Например, размер кадра, содержащего пакет, часто можно получить из протокола канального уровня, поэтому передавать его схемой сжатия не нужно.

STATIC — предполагается, что поля постоянны в течение жизни потока пакетов, поэтому значение каждого передаётся только в начале.

STATIC-DEF — поля определяют поток пакетов, как описано выше. Пакеты с разными значениями соответствующих полей считаются принадлежащими разным потокам. Обычно эти поля сжимаются как STATIC.

STATIC-KNOWN — предполагается, что поля имеют общеизвестные значения, поэтому передавать их не требуется.

CHANGING — предполагается, что поля меняются случайным образом в пределах ограниченного набора или диапазона значений либо иным образом. Обычно они обрабатываются более сложными способами на основе подробной классификации ожидаемого характера их изменений.

Последний шаг — выбрать применяемые к различным полям методы кодирования на основе классификации. Методы кодирования и выявленное поведение полей служат исходными данными для проектирования форматов сжатых заголовков. Анализ распределения вероятностей выявленных изменений позволяет оптимизировать форматы пакетов так, чтобы самые частые изменения поля кодировались наиболее эффективными форматами.

Однако эффективность сжатия приходится уравновешивать двумя другими свойствами: устойчивостью кодирования к потерям и ошибкам между компрессором и декомпрессором и способностью обнаруживать и обрабатывать ошибки в процессе восстановления.

4.2. Эффективность сжатия, устойчивость и прозрачность

Работу протокола сжатия заголовков можно описать тремя параметрами: эффективностью сжатия, устойчивостью и прозрачностью сжатия.

Эффективность сжатия определяется тем, насколько уменьшается средний размер заголовка при применении протокола.

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

Прозрачность сжатия показывает, насколько схема сохраняет семантику исходных заголовков. Если все восстановленные заголовки побитно идентичны соответствующим исходным, схема прозрачна.

4.3. Разработка протокола ROHC

Задача разработки протокола сжатия заголовков — согласовать эффективность и устойчивость, сохраняя прозрачность: повышение устойчивости всегда достигается ценой меньшей эффективности сжатия, и наоборот. Схема также должна быть достаточно гибкой, чтобы уменьшить влияние различных значений времени кругового обхода и характера потерь в каналах, где будет применяться сжатие.

Для этого схема должна предоставлять декомпрессору средства проверки результата и обнаружения возможного повреждения контекста, а также механизмы восстановления контекста, такие как обратная связь. Схемы, существовавшие до разработок рабочей группы по устойчивому сжатию заголовков (ROHC WG), не проектировались с учётом этих общих целей.

Рабочая группа ROHC разработала решения для сжатия заголовков, отвечающие потребностям существующих и будущих технологий каналов. Хотя особое внимание уделялось более строгим требованиям, обусловленным характеристиками беспроводных каналов, результаты в равной мере применимы ко многим другим технологиям.

Документ «Устойчивое сжатие заголовков (ROHC): архитектура и четыре профиля: RTP, UDP, ESP и без сжатия» [RFC3095] был опубликован в 2001 году как первый результат работы группы ROHC. ROHC — общая расширяемая архитектура сжатия заголовков, поверх которой можно определять профили для заголовков различных протоколов. RFC 3095 ввёл ряд новых методов сжатия и успешно выполнил предъявленные требования, описанные в [RFC3096].

Испытания совместимости RFC 3095 подтвердили способность ROHC выполнять поставленные задачи, однако отзывы разработчиков показали, что спецификация протокола сложна и порой неясна. Особенно важно, что в [RFC3095] неочевидно чёткое разделение архитектуры и профилей, что также затрудняет разработку дополнительных профилей. Поэтому этот документ явно определяет архитектуру ROHC, а сопровождающий документ [RFC5225] — переработанные версии профилей сжатия RFC 3095.

4.4. Рабочие характеристики канала ROHC

Устойчивое сжатие заголовков применимо ко многим технологиям каналов. Архитектура ROHC достаточно гибка, чтобы профили могли обслуживать широкий спектр приложений. Ниже перечислены некоторые рабочие характеристики канала ROHC (см. также [RFC3759]).

Мультиплексирование в одном логическом канале

Канал ROHC предоставляет механизм определения контекста в общем формате пакета ROHC. CID позволяет логическому каналу с поддержкой ROHC переносить несколько потоков со сжатыми заголовками; при этом канал можно выделить и для единственного потока без накладных расходов на CID. В частности, ROHC использует отдельное пространство CID для каждого логического канала, а при настройке малого пространства CID для одного из потоков канала ROHC идентификатор можно опустить.

Установление параметров канала

Канальный уровень с поддержкой канала ROHC должен предоставлять способ установления параметров канала сжатия заголовков (см. раздел 5.1). Это можно сделать посредством согласования, статической настройки или внешней сигнализации.

Определение типа пакета

Канал ROHC определяет пространство идентификаторов типов пакетов и ограничения на использование ряда идентификаторов, общих для всех профилей ROHC. Неограниченные идентификаторы, то есть не определённые этим документом, доступны каждому профилю. Идентификатор входит в каждый сжатый заголовок, поэтому канал с поддержкой ROHC может выделить один тип полезной нагрузки канального уровня для ROHC.

Доставка вне порядка между конечными точками сжатия

Каждый профиль определяет собственный уровень устойчивости, в том числе допустимость перестановки пакетов до и особенно между конечными точками сжатия, если такая допустимость предусмотрена.

Для профилей [RFC3095] требуется, чтобы канал между компрессором и декомпрессором сохранял порядок доставки пакетов: их определения предполагают, что декомпрессор всегда получает пакеты в том порядке, в каком их отправил компрессор. Влияние перестановки на работу этих профилей описано в [RFC4224]. Однако перестановка до точки сжатия обрабатывается: профили не предполагают, что компрессор получает пакеты по порядку.

Определения профилей ROHCv2 [RFC5225] предполагают, что декомпрессор может получать пакеты вне порядка отправки компрессором. Перестановка до точки сжатия также учитывается.

Дублирование пакетов

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

Формирование кадров

Канальный уровень должен обеспечивать такое формирование кадров, чтобы можно было различать их границы и отдельные кадры.

Обнаружение ошибок и защита

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

4.5. Сжатие и главный порядковый номер (MSN)

Сжатие полей заголовка основано на установлении функции от порядкового номера, называемого главным порядковым номером (MSN). Эта функция описывает характер изменения поля в зависимости от изменения MSN.

Примеры характера изменения: монотонное увеличение поля или увеличение на небольшую величину, редкое изменение и неизменность в течение всей жизни потока; в последнем случае функция от MSN эквивалентна постоянному значению.

Компрессор сначала устанавливает функции для каждого поля заголовка, затем надёжно передаёт MSN. Если характер изменения поля не соответствует установленной функции, то есть её результат отличается от значения поля сжимаемого заголовка, можно передать дополнительную информацию для обновления параметров функции.

MSN определяется отдельно для каждого профиля. Он может выводиться непосредственно из одного из полей сжимаемого протокола, например RTP SN [RFC5225], либо создаваться и поддерживаться компрессором, например MSN для сжатия UDP в профиле 0x0102 [RFC5225] или MSN в ROHC-TCP [RFC4996].

4.6. Статическая и динамическая части контекста

Концептуально контекст сжатия можно разделить на две части — статическую и динамическую, каждая из которых основана на свойствах сжимаемых полей.

Статическая часть содержит сведения, необходимые для сжатия и восстановления полей, характер изменения которых классифицирован как STATIC, STATIC-KNOWN или STATIC-DEF, как описано в разделе 4.1.

Динамическая часть содержит состояние для всех остальных полей, то есть относящихся к классу CHANGING.

5. Архитектура ROHC (нормативный раздел)

Этот раздел нормативно определяет общие для всех профилей ROHC части, то есть архитектуру. Она задаёт требования и функциональность канала ROHC, в том числе обработку нескольких потоков сжатых пакетов в одном канале.

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

5.1. Канал ROHC

5.1.1. Контексты и их идентификаторы

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

Контекст считается новым, когда CID впервые после создания канала ROHC связывается с профилем либо когда при получении IR (но не IR-DYN) CID связывается с профилем, отличным от профиля в контексте.

Сведения о контекстах концептуально хранятся в таблице, индексируемой по CID, который отправляется вместе со сжатыми заголовками и информацией обратной связи.

Пространство CID может быть малым — значения от 0 до 15 — или большим — значения от 0 до 2^14 − 1 = 16383. До отправки любого сжатого пакета по каналу ROHC ДОЛЖНО быть установлено, возможно путём согласования, является пространство CID большим или малым.

Для каждого канала используется отдельное пространство CID: CID 3 в канале A и CID 3 в канале B не обозначают один контекст, даже если конечные точки обоих каналов находятся на одних и тех же узлах. В частности, идентификаторы любой пары каналов ROHC не связаны; два связанных канала ROHC, служащих каналами обратной связи друг для друга, даже не обязаны иметь пространства CID одинакового размера.

5.1.2. Параметры канала

Канал ROHC основан на ряде параметров, входящих в установленное состояние канала и состояние отдельных контекстов. Состояние канала ROHC ДОЛЖНО быть установлено до отправки первого пакета ROHC; для этого могут использоваться протоколы согласования канального уровня (см. также [RFC3241], где описан вариант согласования параметров ROHC для PPP). Ниже некоторые сведения о состоянии канала описаны абстрактно.

LARGE_CIDS: логическое значение. Если оно ложно, используется малое представление CID — 0 октетов или один октет префикса для CID от 0 до 15. Если истинно, используется большое представление — один или два встроенных октета CID для значений от 0 до 16383. См. также разделы 5.1.1 и 5.2.1.3.

MAX_CID: неотрицательное целое число, наибольший номер CID, используемый компрессором. Этот параметр не связан напрямую с LARGE_CIDS, но фактически дополнительно им ограничен. Значение означает согласие декомпрессора предоставить достаточно памяти как минимум для MAX_CID+1 контекстов; декомпрессор ДОЛЖЕН сохранять установленные контексты в этом пространстве до повторного использования CID для создания нового контекста либо до закрытия канала.

PROFILES: множество неотрицательных целых чисел, каждое из которых обозначает профиль, поддерживаемый компрессором и декомпрессором. Профиль обозначается 16-битным значением, где 8 младших битов указывают сам профиль, а 8 старших — его вариант. Формат сжатого заголовка ROHC определяет профиль только по 8 младшим битам; поэтому, если каналу доступно несколько вариантов одного профиля, множество PROFILES после согласования НЕ ДОЛЖНО содержать более одного варианта этого профиля. Компрессор НЕ ДОЛЖЕН использовать профиль, не входящий в PROFILES.

FEEDBACK_FOR: необязательная ссылка на канал ROHC в обратном направлении между теми же конечными точками сжатия. Если параметр задан, он указывает, к какому другому каналу ROHC относится любая обратная связь, отправляемая по этому каналу (см. [RFC3759]).

MRRU: неотрицательное целое число, максимальный размер восстанавливаемой единицы приёма. Это размер в октетах наибольшей восстановленной единицы, которую декомпрессор должен собрать из сегментов (см. раздел 5.2.5), включая CRC сегментации. Если согласовано MRRU = 0, сегментация в канале НЕ ДОЛЖНА использоваться, а полученные сегменты декомпрессор ДОЛЖЕН отбрасывать.

5.1.3. Сохранение контекстов декомпрессора

В составе согласованных параметров канала компрессор и декомпрессор с помощью MAX_CID договорились о наибольшем используемом номере CID. Соглашаясь с MAX_CID, декомпрессор также соглашается предоставить память как минимум для MAX_CID+1 контекстов. Установленный контекст с CID в пределах согласованного пространства СЛЕДУЕТ сохранять до повторного использования CID, закрытия канала или повторного согласования параметров.

5.2. Пакеты ROHC и их типы

В схемах этого раздела для различных типов пакетов, форматов и полей ROHC используются следующие обозначения: двоеточие «:» обозначает необязательную часть, косая черта «/» — переменную длину.

Схема обозначения типов пакетов ROHC предусматривает необязательное заполнение, тип пакета обратной связи, необязательный октет Add-CID с четырьмя битами CID и простой механизм сегментации и сборки.

Следующие типы пакетов зарезервированы на уровне архитектуры ROHC:

Другие типы пакетов могут определяться и использоваться отдельными профилями:

0, 10, 110, 1111101, 11111001 — доступны, архитектурой ROHC не зарезервированы.

5.2.1. Общий формат пакетов ROHC

Общий формат пакета ROHC состоит из следующих частей в указанном порядке: необязательное заполнение (Padding), необязательная обратная связь (Feedback), необязательный заголовок (Header), необязательная полезная нагрузка (Payload).

Padding: любое количество октетов заполнения, в том числе ноль; формат октета определён в разделе 5.2.1.1.

Feedback: любое количество элементов обратной связи, в том числе ноль; формат элемента определён в разделе 5.2.4.1.

Header: зависящий от профиля заголовок CO (раздел 5.2.1.3), заголовок IR или IR-DYN (раздел 5.2.2) либо сегмент ROHC (раздел 5.2.5). Пакет ROHC содержит не более одного заголовка; он может отсутствовать, если пакет содержит только обратную связь.

Payload: ноль или более октетов полезной нагрузки несжатого пакета, начиная с первого октета после последнего заголовка, который может сжимать текущий профиль.

ДОЛЖНО присутствовать хотя бы одно из полей Feedback и Header.

5.2.1.1. Формат октета заполнения

Октет заполнения: 11100000.

Примечание. Октет заполнения НЕ ДОЛЖЕН интерпретироваться как октет Add-CID для CID 0.

5.2.1.2. Формат октета Add-CID

Октет Add-CID состоит из четырёх битов 1110 и четырёх битов CID. Значения CID от 0x1 до 0xF обозначают идентификаторы от 1 до 15.

Примечание. Октет заполнения внешне похож на октет Add-CID для CID 0.

5.2.1.3. Общий формат заголовка

Все типы пакетов ROHC имеют следующий общий формат заголовка. Двоеточия обозначают необязательные части, косые черты — переменную длину.

Указание типа: тип пакета ROHC.

Тело: интерпретируется согласно указанию типа пакета и сведениям CID в соответствии с определением отдельных профилей.

Таким образом, заголовок начинается с указания типа пакета либо с октета Add-CID, сразу за которым следует указание типа.

Если для канала ROHC настроено малое пространство CID:

Если настроено большое пространство CID, большой CID присутствует всегда и представляется по схеме кодирования раздела 5.3.2, ограниченной двумя октетами. Заголовок при этом начинается с указания типа.

5.2.2. Типы пакетов инициализации и обновления (IR)

Типы пакетов IR содержат идентификатор профиля, который определяет, как интерпретировать остальную часть заголовка. Они также связывают профиль с контекстом. Сохранённый параметр профиля дополнительно определяет синтаксис и семантику идентификаторов типов и типов пакетов, используемых с конкретным контекстом.

Пакеты IR и IR-DYN всегда обновляют контекст для всех содержащихся в заголовке полей, обновляющих контекст. Они никогда не очищают его, кроме случаев инициализации нового контекста (раздел 5.1.1) или когда профиль, указанный в поле Profile, предписывает иное.

5.2.2.1. Формат заголовка ROHC IR

Заголовок IR связывает CID с профилем и обычно также инициализирует контекст. Обычно он может также обновить весь контекст или его часть. Общий формат заголовка IR:

x: информация, зависящая от профиля; интерпретируется согласно профилю в поле Profile заголовка IR.

Profile: профиль, связанный с CID. В заголовке IR идентификатор профиля сокращён до восьми младших битов (раздел 5.1.2).

CRC: восьмибитный CRC (раздел 5.3.1.1).

Сведения профиля: содержимое этой части заголовка IR определяется отдельными профилями и интерпретируется согласно профилю из поля Profile.

5.2.2.2. Формат заголовка ROHC IR-DYN

В отличие от заголовка IR, заголовок IR-DYN никогда не может инициализировать неинициализированный контекст. Однако он может изменить профиль, связанный с контекстом, если профиль, указанный в заголовке IR-DYN, это допускает. Поэтому данный тип пакета также зарезервирован на уровне архитектуры. Заголовок IR-DYN обычно также инициализирует или обновляет части контекста. Его общий формат:

Profile: профиль, связанный с CID; сокращается так же, как в пакетах IR.

CRC: восьмибитный CRC (раздел 5.3.1.1).

Сведения профиля: содержимое этой части заголовка IR-DYN определяется отдельными профилями и интерпретируется согласно профилю из поля Profile.

5.2.3. Начальная обработка декомпрессором ROHC

Изначально все контексты находятся в состоянии отсутствия контекста. Поэтому декомпрессор не может восстановить пакеты, ссылающиеся на неинициализированный контекст, за исключением пакетов, содержащих достаточно информации о статических полях.

При получении пакета IR его обработка определяется указанным в нём профилем.

• Если проверка целостности заголовка по восьмибитному CRC не удалась, пакет НЕ ДОЛЖЕН восстанавливаться и доставляться верхним уровням. Если в контексте указан профиль, его логика определяет, какую обратную связь отправить, если она нужна. Если профиль в контексте не указан, выбор обратной связи остаётся за реализацией. Однако может быть уместно больше ничего не предпринимать, поскольку причиной ошибки могла стать любая часть защищённого CRC заголовка IR.

При получении пакета IR-DYN его обработка определяется указанным в нём профилем.

При ошибке разбора пакета любого типа декомпрессор ДОЛЖЕН отбросить его без дальнейшей обработки. Например, при использовании большого пространства CID сжатый заголовок содержит поле CID с самодокументируемым кодированием переменной длины по разделу 5.3.2. Если поле начинается с 110 или 111, декомпрессор получит ошибку разбора, поскольку это поле нельзя кодировать более чем двумя октетами.

РЕКОМЕНДУЕТСЯ, чтобы профили запрещали декомпрессору пытаться восстановить пакеты, содержащие только трёхбитный CRC, после признания недействительной части или всего динамического контекста до тех пор, пока пакет с достаточными сведениями о динамических полях не будет получен, восстановлен и успешно проверен семи- или восьмибитным CRC.

5.2.4. Обратная связь ROHC

Обратная связь переносит информацию от декомпрессора к компрессору. Её можно отправлять по каналу ROHC, работающему в том же направлении, что и обратная связь.

Общий формат пакета ROHC позволяет передавать обратную связь по каналу ROHC отдельными вставленными пакетами, присоединением к другим пакетам или сочетанием обоих способов (см. [RFC3759]). Этому способствуют следующие свойства.

Зарезервированный тип пакета: тип пакета обратной связи зарезервирован на уровне архитектуры и может переносить информацию обратной связи переменной длины.

Информация CID: обратная связь, отправленная по определённому каналу, передаётся компрессору, связанному с обратной связью этого канала, и интерпретируется им. Поэтому каждый элемент обратной связи содержит CID канала, для которого она отправляется. Таким образом, схема обратной связи ROHC требует, чтобы канал передавал обратную связь не более чем одному компрессору. Способ связывания компрессора с обратной связью конкретного канала выходит за рамки этой спецификации. См. также [RFC3759].

Информация о длине: длину элемента обратной связи можно определить по его первым нескольким октетам. Это позволяет присоединять обратную связь к пакетам и объединять несколько её элементов в одном пакете. Таким образом, информация о длине отделяет декомпрессор от связанного с ним компрессора на той же стороне: декомпрессор может извлечь обратную связь из сжатого заголовка, не разбирая её содержимое, и передать извлечённую информацию дальше.

Связь между парами компрессора и декомпрессора, работающими в противоположных направлениях для обмена присоединяемой и/или вставляемой обратной связью, СЛЕДУЕТ сохранять в течение жизни канала ROHC. В противном случае РЕКОМЕНДУЕТСЯ уведомить компрессор о недоступности канала обратной связи: после этого компрессору СЛЕДУЕТ начать сжатие заново, создав новый контекст для каждого потока, и СЛЕДУЕТ использовать значение CID, ранее не связанное с профилем, применяемым для сжатия потока.

5.2.4.1. Формат обратной связи ROHC

ROHC определяет три категории сообщений обратной связи: подтверждение ACK, отрицательное подтверждение NACK и NACK для всего контекста STATIC-NACK. В зависящей от профиля информации обратной связи могут определяться другие типы сведений.

ACK подтверждает успешное восстановление пакета и указывает, что декомпрессор считает свой контекст действительным.

NACK указывает, что декомпрессор считает часть или всю динамическую часть контекста недействительной.

STATIC-NACK указывает, что декомпрессор считает весь статический контекст недействительным или что он не был установлен.

Обратная связь, отправленная по каналу ROHC, состоит из одного или нескольких последовательно объединённых элементов следующего формата:

Code: значение 0 указывает на наличие октета Size; значения 1–7 указывают общий размер поля данных FEEDBACK и поля CID, если оно имеется, в октетах.

Size: общий размер поля данных FEEDBACK и поля CID, если оно имеется, в октетах.

Данные FEEDBACK: FEEDBACK-1 или FEEDBACK-2, описанные ниже.

Сведения CID в элементе обратной связи указывают контекст, для которого она отправлена. Параметр LARGE_CIDS, определяющий наличие большого CID, берётся из состояния канала компрессора-получателя, а не канала, переносящего обратную связь.

Поле большого CID, если присутствует, кодируется согласно разделу 5.3.2 и НЕ ДОЛЖНО занимать более двух октетов.

Поле данных FEEDBACK может иметь один из двух форматов.

FEEDBACK-1: один октет информации, зависящей от профиля.

FEEDBACK-2: не менее двух октетов; первые два бита — Acktype, остальные содержат информацию, зависящую от профиля.

Acktype: 0 — ACK; 1 — NACK; 2 — STATIC-NACK; 3 зарезервировано и НЕ ДОЛЖНО использоваться, иначе разобрать поле невозможно.

5.2.5. Сегментация ROHC

ROHC определяет простой протокол сегментации. Компрессор может выполнять сегментацию, например для обработки пакетов, превышающих заданный для канала размер.

5.2.5.1. Замечания по использованию сегментации

Протокол сегментации ROHC не отличается особой эффективностью. Он не предназначен для замены функций сегментации канального уровня; их СЛЕДУЕТ использовать, когда они доступны и эффективны для решаемой задачи.

Протокол сегментации ROHC разработан исходя из предположения о доставке пакетов по порядку между компрессором и декомпрессором; для обнаружения ошибок используется только CRC, порядковые номера отсутствуют. Если доставку по порядку гарантировать нельзя, сегментация ROHC НЕ ДОЛЖНА использоваться.

Протокол также предполагает, что все сегменты пакета ROHC, соответствующего одному контексту, принимаются без перемежения другими пакетами ROHC в канале, в том числе пакетами, относящимися к другим контекстам. Исходя из этого предположения сегменты не содержат CID и поэтому не могут быть связаны с конкретным контекстом до получения всех сегментов и восстановления всей единицы.

5.2.5.2. Протокол сегментации

Сегментация ROHC применяется к сочетанию полей Header и Payload пакета ROHC, определённых в разделе 5.2.1.

Формат сегмента:

F: бит последнего сегмента. Установленное значение указывает, что это последний сегмент восстанавливаемой единицы.

Перед октетом типа сегмента могут находиться заполнение и/или обратная связь. Отдельного CID для каждого сегмента нет, но информация CID, конечно, является частью восстановленной единицы. Восстановленная единица НЕ ДОЛЖНА содержать заполнение, сегменты или обратную связь.

Получив последний сегмент, декомпрессор собирает сегмент из этого пакета и непосредственно предшествовавшие ему непоследние сегменты в одну восстановленную единицу в порядке получения. Все сегменты одной единицы должны поступить декомпрессору последовательно и в правильном порядке. Если за непоследним сегментом непосредственно следует пакет ROHC другого типа, сборка текущей единицы прерывается, и декомпрессор ДОЛЖЕН отбросить уже полученные в этом канале непоследние сегменты.

Восстановленная единица состоит из заголовка Header, необязательной полезной нагрузки Payload (оба см. в разделе 5.2.1) и четырёх октетов CRC. CRC — 32-битный, вычисляемый с полиномом из раздела 5.3.1.4.

Если восстановленная единица занимает не более четырёх октетов, проверка CRC не проходит либо её размер превышает параметр канала MRRU (раздел 5.1.2), декомпрессор ДОЛЖЕН её отбросить. Если проверка CRC успешна, единицу можно обработать далее.

5.3. Общие методы кодирования

5.3.1. CRC сжатия заголовков, охват и полиномы

В разделе описано вычисление CRC, используемых ROHC. Для всех CRC применяется тот же алгоритм, что и в [RFC1662], определённый в приложении A этого документа, с полиномами, указанными далее.

5.3.1.1. Восьмибитный CRC в заголовках IR и IR-DYN

Охват восьмибитного CRC в заголовках IR и IR-DYN зависит от профиля, но ДОЛЖЕН включать как минимум начальную часть заголовка до поля Profile включительно, в том числе CID или октет Add-CID. Обратная связь и заполнение не являются частью Header (раздел 5.2.1) и поэтому не включаются в расчёт CRC. В качестве практического правила для спецификаций профилей: любую другую информацию, инициализирующую контекст декомпрессора, также СЛЕДУЕТ защищать CRC.

Точнее, восьмибитный CRC охватывает не только и не целиком исходный несжатый заголовок; поэтому он не позволяет декомпрессору проверить попытку восстановления или правильность всего контекста. Однако успешная проверка обеспечивает достаточную устойчивость для обновления контекста декомпрессора информацией из заголовка IR или IR-DYN.

Полином восьмибитного CRC: C(x) = 1 + x + x^2 + x^8.

При вычислении поле CRC в заголовке устанавливается в ноль, а начальное содержимое регистра CRC — во все единицы.

5.3.1.2. Трёхбитный CRC в сжатых заголовках

Трёхбитный CRC в сжатых заголовках вычисляется по всем октетам исходного заголовка целиком до сжатия следующим образом. Начальное содержимое регистра CRC устанавливается во все единицы.

Полином трёхбитного CRC: C(x) = 1 + x + x^3.

Трёхбитный CRC позволяет декомпрессору проверять результат попытки восстановления небольших сжатых заголовков и обнаруживать повреждение контекста на основе совокупной вероятности за несколько попыток. Однако он слишком слаб, чтобы достаточно гарантировать успех восстановления одного заголовка. Поэтому сжатые заголовки с трёхбитным CRC обычно непригодны для восстановления контекста декомпрессора; профилям следует воздерживаться от разрешения восстанавливать такой заголовок, когда часть или весь контекст декомпрессора считается недействительным.

5.3.1.3. Семибитный CRC в сжатых заголовках

Семибитный CRC в сжатых заголовках вычисляется по всем октетам исходного заголовка целиком до сжатия следующим образом. Начальное содержимое регистра CRC устанавливается во все единицы.

Полином семибитного CRC: C(x) = 1 + x + x^2 + x^3 + x^6 + x^7.

Семибитный CRC позволяет декомпрессору проверить результат попытки восстановления более крупного сжатого заголовка и обеспечивает достаточную защиту для подтверждения восстановления контекста. Он достаточно надёжен, чтобы считать восстановление успешным по одному восстановленному заголовку; поэтому профили могут разрешать восстановление заголовка с семибитным CRC, когда часть контекста декомпрессора считается недействительной.

5.3.1.4. 32-битный CRC сегментации

32-битный CRC используется схемой сегментации для проверки восстановленной единицы и поэтому вычисляется по сегментированной единице, то есть полям Header и Payload пакета ROHC. Начальное содержимое регистра CRC устанавливается во все единицы.

Полином 32-битного CRC:

Назначение 32-битного CRC — проверка восстановленной единицы.

5.3.2. Самоописываемые значения переменной длины

Значения многих полей и параметров сжатия могут изменяться в широких пределах. Для оптимизации их передачи используется переменное количество октетов. Первые несколько битов первого октета определяют их число:

Первый бит 0: 1 октет; передаётся 7 битов; десятичное значение до 127; закодированные октеты в шестнадцатеричной записи от 00 до 7F.

Первые биты 10: 2 октета; передаётся 14 битов; значение до 16 383; закодированные октеты от 80 00 до BF FF.

Первые биты 110: 3 октета; передаётся 21 бит; значение до 2 097 151; закодированные октеты от C0 00 00 до DF FF FF.

Первые биты 111: 4 октета; передаётся 29 битов; значение до 536 870 911; закодированные октеты от E0 00 00 00 до FF FF FF FF.

5.4. ROHC UNCOMPRESSED — без сжатия (профиль 0x0000)

В разделе описан профиль ROHC без сжатия. Его идентификатор — 0x0000.

Профиль 0x0000 позволяет отправлять IP-пакеты без сжатия. Это можно использовать для любого пакета, для которого среди поддерживаемых каналом ROHC профилей нет подходящего профиля сжатия или сжатие которого по какой-либо причине нежелательно.

После инициализации единственные накладные расходы при отправке пакетов профилем 0x0000 равны размеру CID. Если несжатые пакеты встречаются часто, профилю 0x0000 следует назначить CID размером ноль или один октет. Профиль 0x0000 СЛЕДУЕТ связывать не более чем с одним CID.

5.4.1. Пакет IR

Пакет инициализации и обновления IR профиля 0x0000 имеет следующий формат заголовка:

res: ДОЛЖЕН быть установлен в ноль; иначе декомпрессор ДОЛЖЕН отбросить пакет.

Profile: 0x00.

CRC: восьмибитный CRC, вычисляемый с полиномом раздела 5.3.1.1. Он охватывает заголовок IR с первого октета до октета Profile включительно, то есть не охватывает сам CRC. Предшествующие заполнение и обратная связь, а также полезная нагрузка тоже не охватываются.

Полезная нагрузка пакета IR может содержать необязательный IP-пакет переменной длины. Несжатый IP-пакет может включаться в пакет IR; декомпрессор определяет его наличие по длине пакета IR.

5.4.2. Обычный пакет

Обычный пакет — обычный IP-пакет с информацией CID. Соответствующие Header и Payload из раздела 5.2.1 имеют формат:

Первый октет IP-пакета начинается с битовой последовательности 0100 для IPv4 или 0110 для IPv6. Это не конфликтует ни с одним зарезервированным типом пакета.

Если канал использует малые CID, а профиль 0x0000 связан с CID > 0, IP-пакету предшествует октет Add-CID. При использовании больших CID идентификатор размещается начиная со второго октета объединённого формата Header/Payload, показанного выше.

Как и любой другой пакет ROHC, обычный пакет может нести заполнение и/или обратную связь перед объединёнными Header и Payload.

5.4.3. Инициализация контекста

Компрессор инициализирует статический контекст, связанный с профилем UNCOMPRESSED, отправляя пакеты IR (раздел 5.4.1). При инициализации контекста РЕКОМЕНДУЕТСЯ отправлять пакеты IR до появления достаточной уверенности, что декомпрессор успешно получил хотя бы один из них. Например, такая уверенность может основываться на обратной связи декомпрессора или знании характеристик канала.

Компрессору СЛЕДУЕТ периодически отправлять пакеты IR для контекста профиля UNCOMPRESSED, по крайней мере до получения обратной связи декомпрессора для этого контекста. После получения обратной связи компрессор МОЖЕТ прекратить периодическую отправку IR.

5.4.4. Работа декомпрессора

Получив пакет IR, декомпрессор сначала проверяет его заголовок с помощью восьмибитного CRC.

Любой другой пакет, полученный при отсутствии контекста, отбрасывается без дальнейших действий.

Если получен обычный пакет и у декомпрессора есть действительный контекст, IP-пакет извлекается и передаётся верхним уровням.

5.4.5. Обратная связь

Единственный тип обратной связи, определённый профилем 0x0000, — ACK в формате FEEDBACK-1 из раздела 5.2.4.1, где значение октета, зависящего от профиля, равно 0. Формат FEEDBACK-2 для профиля 0x0000 не определён.

6. Обзор профиля ROHC (информационный раздел)

Протокол ROHC состоит из архитектурной части и профилей. Архитектура определяет механизмы, общие для всех профилей, а профиль — алгоритм сжатия и специфичные для него форматы пакетов.

Раздел 5 подробно определяет архитектуру ROHC. В настоящем разделе приводится информационный обзор элементов, составляющих спецификацию профиля. Нормативное определение отдельных профилей выходит за рамки этого документа.

Профиль ROHC определяет элементы, из которых строится протокол сжатия. Профиль состоит из следующих частей.

Форматы пакетов:

Управление контекстом:

7. Благодарности

Авторы выражают признательность всем участникам прежней работы над ROHC, особенно авторам RFC 3095 [RFC3095], который служит технической основой этого документа. Благодарим также всех, кто участвовал в подготовке документа исправлений и уточнений RFC 3095 [RFC4815]: применимые технические материалы из него включены сюда. Благодарим Jani Juvan за обнаружение несоответствия между структурой обратной связи в [RFC4995] и [RFC3095], из-за которого понадобилось обновление [RFC4995].

Carl Knutsson, Biplab Sarkar и Robert Stangarone проверяли документ во время последнего обсуждения в рабочей группе. Также благодарим Bert Wijnen и Brian Carpenter за замечания во время последнего обсуждения в IETF.

8. Вопросы IANA

Реестр IANA «Идентификаторы профилей устойчивого сжатия заголовков (ROHC)» [ROHC-ids] создан в RFC 3095 [RFC3095]. Политика назначения, изложенная в RFC 3095, следующая.

Идентификатор профиля ROHC — неотрицательное целое число. Во многих протоколах согласования он представляется 16-битным значением. Из-за способа сокращения идентификатора в пакетах ROHC восемь младших битов имеют особое значение: два идентификатора с одинаковыми восемью младшими битами следует назначать только тогда, когда больший предназначен для замены меньшего. Чтобы подчеркнуть эту связь, идентификаторы профилей следует приводить в шестнадцатеричном виде, например 0x1234 заменяет 0x0A34.

Согласно политикам [RFC5226], для назначения новых значений идентификатора профиля IANA применяет правило Specification Required: значения и их смысл должны быть документированы в RFC или другом постоянном и общедоступном источнике достаточно подробно, чтобы независимые реализации могли взаимодействовать. В восьми младших битах диапазон от 0 до 127 зарезервирован для спецификаций IETF на пути стандартизации; диапазон от 128 до 254 доступен для других спецификаций, удовлетворяющих этому требованию, например информационных RFC. Значение 255 зарезервировано для будущего расширения настоящей спецификации.

К моменту публикации были назначены следующие идентификаторы:

Для новых профилей IANA потребуется назначить новые идентификаторы, но этот документ не требует от IANA дополнительных действий.

9. Вопросы безопасности

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

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

Атаки типа «отказ в обслуживании» возможны, если нарушитель способен внедрять в канал, например, поддельные пакеты IR, IR-DYN или обратной связи и тем самым снижать эффективность сжатия. Однако способность внедрять произвольные пакеты на канальном уровне создаёт дополнительные проблемы безопасности, значительно превосходящие проблемы, связанные со сжатием заголовков.

10. Ссылки

10.1. Нормативные ссылки

10.2. Информационные ссылки

Приложение A. Алгоритм CRC

Следующий пример демонстрирует четыре типа CRC, используемые в RFC 3095. Данные вводятся в шестнадцатеричном виде; для завершения ввода нужно нажать Control+D. Код приведён в оригинальном виде. В комментариях к нему отдельно указано, что 32-битный CRC сегментации, согласно тексту, дополняется как в PPP, в отличие от 8-, 7- и 3-битного CRC.

Адреса авторов

Sandlund, et al. Standards Track [Page 41]

Перевод: RFCNET · rfcnet.ru

Original copyright notice

Неофициальный перевод. При расхождениях см. оригинал.