2. Набор маркеров
2.1. Кодирование набора маркеров
Набор маркеров представляет собой последовательность «записей набора маркеров». Каждая запись в наборе включает четыре байта (рис. 1).
| 0 19 | 20 22 |23 | 24 31 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Значение маркера | Экспериментальные | S | «Время жизни» | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Рис. 1. Формат записи набора маркеров
Записи в наборе маркеров начинаются после протокольных заголовков канального уровня, но заканчиваются перед протокольными заголовками сетевого уровня. Вначале идут верхние записи набора, а нижняя запись в наборе является его окончанием. Пакет сетевого уровня следует сразу же за записью набора маркеров, в которой бит «S » установлен в единицу.
Каждая запись набора маркеров включает следующие поля:
Бит «S» (окончание набора маркеров)
Этот бит указывает на окончание набора маркеров, если он установлен в «1». Если же он нулевой, то за этой записью набора ещё будут следовать записи.
«Время жизни» (Time to Live, TTL)
Это 8-битовое поле используется для кодирования TTL-значения.
«Экспериментальное поле» (3 бита)
Это 3-битовое поле зарезервировано для экспериментальных исследований.
«Значение маркера потока» (20 бит)
Это 20-битовое поле содержит реальное значение маркера потока.
Когда принят помеченный пакет, то значение верхнего маркера в наборе подвергается анализу. В результате успешного анализа становятся известными:
следующий ретрансляционный участок, по которому будет далее транслироваться IP-пакет;
процедура обработки набора маркеров, которая должна быть выполнена перед тем, как будет отправлен IP-пакет. В результате этой процедуры может быть заменена верхняя запись в наборе на другую запись, либо удалена верхняя запись из набора, либо заменена верхняя запись в наборе и затем вставлена одна или несколько дополнительных записей в набор маркеров.
В дополнение к этой информации могут быть получены данные, позволяющие определить необходимую выходную процедуру повторного обрамления на канальном уровне, а также и возможные другие данные, которые позволят уточнить особенности дальнейшей доставки IP-пакета. Существуют несколько следующих зарезервированных значений маркеров:
Значение «0» представляет собой «явный нулевой маркер для IPv4-протокола» (IPv4 explicit NULL label). Это значение может располагаться только (и только) на самом нижнем уровне набора маркеров. Оно указывает на то, что набор маркеров должен быть удалён, а дальнейшая доставка IP-пакета, должна осуществляться на основе IPv4-заголовка.
Значение «1» представляет собой «маркер-предупреждение для маршрутизатора» (router alert label). Этот маркер может располагаться на любом, кроме самого нижнего, уровне набора маркеров. Если полученный IP-пакет содержит, на самом верхнем уровне набора, маркер с таким значением, то он должен быть обработан локальным программным модулем. Реальная доставка IP-пакета определяется маркером, расположенным ниже этого маркера в наборе. Однако, если IP-пакет направляется дальше, то целесообразно перед отправкой вставить «маркер-предупреждение» обратно в набор маркеров. Использование такого маркера аналогично использованию дополнительной функции в IP-пакетах «функция предупреждения для маршрутизатора» (router alert option, RFC-2113[?] ). Так как этот маркер не может размещаться на самом нижнем уровне набора маркеров, он никак не связан с каким-либо протоколом сетевого уровня.
Значение «2» представляет собой «явный нулевой маркер для IPv6-протокола» (IPv6 explicit NULL label). Это значение может располагаться только (и только) на самом нижнем уровне набора маркеров. Оно указывает на то, что набор маркеров должен быть удалён, а дальнейшая доставка IP-пакета, должна осуществляться на основе IPv6-заголовка.
Значение «3» представляет собой «неявный нулевой маркер» (implicit NULL label). Такой маркер назначается и распространяется LSR-маршрутизаторами, но никогда не подвергается процедуре повторного обрамления. Если LSR-маршрутизатору следует заменить маркер верхнего уровня в наборе на новый маркер, а новым маркером является неявный нулевой маркер, то LSR-маршрутизатор просто удалит весь набор маркеров вместо возможной замены маркеров. Несмотря на то, что это значение маркера никогда не может быть подвергнуто повторному обрамлению, это необходимо отразить в LDP-протоколе, т.е. это значение зарезервировать.
Значения «4…15» зарезервированы.