4. Заголовки расширения в IPv6-пакете
В IPv6-протоколе предусмотрена доставка дополнительной (служебной) закодированной информации сетевого уровня, которая может быть размещена в IPv6-пакете между IPv6-заголовоком и заголовком верхнего уровня. Для такой доставки существует несколько так называемых заголовков расширения, причём каждый из них идентифицируется собственным значением в поле «Следующий заголовок». На рис.2 приведены примеры нескольких заголовков расширения в IPv6-пакетах.
+-------------------------+------------------------- | IPv6-заголовок | TCP-заголовок + данные | | | «Следующий заголовок» = | | TCP | +-------------------------+------------------------- +-------------------------+-------------------------+------------------------- | IPv6-заголовок | Заголовок маршрутизации | TCP-заголовок + данные | | | | «Следующий заголовок» = | «Следующий заголовок» = | | Routing | TCP | +-------------------------+-------------------------+------------------------- +-------------------------+-------------------------+-------------------------+------------------------- | IPv6-заголовок | Заголовок маршрутизации | Заголовок фрагментации | Фрагмент | | | | TCP-заголовка + данных | «Следующий заголовок» = | «Следующий заголовок» = | «Следующий заголовок» = | | Routing | Fragment | TCP | +-------------------------+-------------------------+-------------------------+------------------------- Рис.2. Примеры заголовков расширения в IPv6-пакетах
За одним исключением, заголовки расширения не проверяются или не обрабатываются ни одним IP-узлом на протяжении всего маршрута доставки IPv6-пакета, причём до тех пор, пока последний не достигнет IP-узла (или каждого IP-узла из группы IP-узлов, в случае групповой рассылки пакета), адрес которого содержится в поле «Адрес получателя пакета» IPv6-заголовка. В данном случае при нормальном демультиплексировании поле «Следующий заголовок» IPv6-заголовка «запрашивает» специализированный модуль для обработки первого заголовка расширения или заголовка вышележащего уровня, если конечно заголовок расширения отсутствует. Содержание и семантика каждого заголовка расширения определяет необходимо или нет переходить к обработке следующего заголовка. Более того, заголовки расширения должны обрабатываться именно в том порядке, как они представлены в IPv6-пакете. Приёмный модуль никогда не должен, например, сканировать весь IPv6-пакет в поисках соответствующего типа заголовка расширения и обрабатывать найденный заголовок прежде всех остальных заголовков расширения.
Указанное выше исключение относится к заголовку «Дополнительные функции: ретрансляция» («Hop-by-Hop Options»), содержащему информацию, которая должна контролироваться и обрабатываться каждым IP-узлом, расположенном на маршруте доставки IPv6-пакета, включая IP-узлы отправителя и получателя. Если такой заголовок представлен, то он должен следовать сразу же после IPv6-заголовка. Его наличие указывается нулевым значением в поле «Следующий заголовок» IPv6-заголовка.