Рис.2. Примеры заголовков расширения в IPv6-пакетах
За одним исключением, заголовки расширения не проверяются или не
обрабатываются ни одним IP-узлом на протяжении всего маршрута доставки
IPv6-пакета, причём до тех пор, пока последний не достигнет IP-узла (или
каждого IP-узла из группы IP-узлов, в случае групповой рассылки пакета),
адрес которого содержится в поле “Адрес получателя пакета” IPv6-заголовка. В
данном случае при нормальном демультиплексировании поле “Следующий
заголовок” IPv6-заголовка “запрашивает” специализированный модуль для
обработки первого заголовка расширения или заголовка вышележащего уровня,
если конечно заголовок расширения отсутствует. Содержание и семантика
каждого заголовка расширения определяет необходимо или нет переходить к
обработке следующего заголовка. Более того, заголовки расширения должны
обрабатываться именно в том порядке, как они представлены в IPv6-пакете.
Приёмный модуль никогда не должен, например, сканировать весь IPv6-пакет в
поисках соответствующего типа заголовка расширения и обрабатывать
найденный заголовок прежде всех остальных заголовков расширения.
Указанное выше исключение относится к заголовку “Дополнительные
функции: ретрансляция” (“Hop-by-Hop Options”), содержащему информацию,
которая должна контролироваться и обрабатываться каждым IP-узлом,
расположенном на маршруте доставки IPv6-пакета, включая IP-узлы
отправителя и получателя. Если такой заголовок представлен, то он должен
следовать сразу же после IPv6-заголовка. Его наличие указывается нулевым
значением в поле “Следующий заголовок” IPv6-заголовка.
Если в результате обработки заголовка IPv6-пакета IP-узлу потребуется
обратиться к следующему заголовку, но значение в поле “Следующий
заголовок” текущего заголовка IP-узлом не выявлено, то тогда последний
должен уничтожить IPv6-пакет и передать ICMP-сообщение “Параметрическая
проблема” (“Parameter Problem”) IP-узлу отправителю IPv6-пакета. Это ICMP-
сообщение должно содержать значение “1” в поле “Код ошибки” (“Обнаружен
неопределённый тип поля “Следующий заголовок”), а в поле “Указатель”
(“Pointer”) должен присутствовать “копия” неустановленного значения
величины из принятого IPv6-пакета. Аналогичные действия должны быть
предприняты в случае, если IP-узел обнаружил нулевое значение в поле
“Следующий заголовок” в составе какого-либо заголовка, не являющегося
IPv6-заголовком.
Каждый заголовок расширения имеет длину, кратную 8 октетам. Поля,
состоящие из нескольких октетов в рамках заголовка расширения,
устанавливаются в своих естественных границах, то есть поля длиной “n”