Заголовок маршрутизации используется отправителем, чтобы заставить пакет посетить один или более промежуточных узлов на пути к месту назначения. Эта функция схожа с опцией принудительной маршрутизации в протоколе IPv4. Заголовок маршрутизации идентифицируется кодом 43 поля следующий заголовок предыдущего заголовка и имеет формат:
Следующий заголовок | 8-битовый селектор. Определяет тип заголовка, который следует непосредственно за заголовком маршрутизации. Использует те же коды протоколов, что и IPv4 [RFC-1700]. |
hdr ext len | 8-битовое целое без знака. Длина заголовка маршрутизации выражается в 8-октетных блоках, и не включает в себя первые 8 октетов. |
Тип маршрутизации | 8-битовый идентификатор конкретного варианта маршрутизации |
Оставшиеся сегменты | 8-битовое число без знака. Число остающихся сегментов пути, т.e. число промежуточных узлов, которые должны быть посещены пакетом по пути к месту назначения. |
Данные, зависящие от типа | Поле переменной длины, формат зависит от кода поля тип маршрутизации, а длина определяется заголовком маршрутизации и кратна 8 октетам. |
Если в процессе обработки входного пакета встретится заголовок маршрутизации с не узнанным полем тип маршрутизации, то поведение узла зависит от содержимого поля число оставшихся сегментов пути.
Если число оставшихся сегментов пути равно нулю, узел должен проигнорировать заголовок маршрутизации и продолжить работу со следующим заголовком, чей тип указан в поле следующий заголовок заголовка маршрутизации.
Если число оставшихся сегментов пути не равно нулю, узел должен выбросить пакет и послать сообщение ICMP (parameter problem, код 0) с указателем на поле не узнанного типа маршрутизации. Заголовок маршрутизации типа 0 имеет следующий формат (рис. 4.4.1.1.20):
Рис. 4.4.1.1.20. Формат заголовка маршрутизации типа 0
Следующий заголовок |
8-битовый селектор. Идентифицирует тип заголовка, следующего непосредственно за заголовком маршрутизации. Использует те же коды протоколов, что и IPv4 [RFC-1700]. |
hdr ext len | 8-битовое целое без знака. Длина заголовка маршрутизации в 8-октетных блоках, исключая первые 8 октетов. Для заголовков маршрутизации типа 0 hdr ext len равна удвоенному числу адресов в заголовке, должно быть четным числом меньше или равным 46. |
Тип маршрутизации | 0. |
Оставшиеся сегменты | 8-битовое целое без знака. Число оставшихся сегментов пути, т.e., число узлов, которые следует посетить на пути к месту назначения. Максимально допустимое число = 23 |
Резерв | 8-битовое поле резерва. Инициализируется нулем при передаче и игнорируется при приеме. |
strict/loose bit map | 24-битовый код-маска, биты пронумерованы, начиная с 0 до 23, слева направо. Для каждого из сегментов пути указывает должен ли следующий узел быть соседом: 1 означает strict (должен быть соседом), 0 означает пропустить (не должен быть соседом). |
Адрес[1..n] | Вектор 128-битовых адресов, пронумерованных с 1 до n. |
Адрес отправителя = S | Hdr Ext Len = 6 |
Адрес получателя = I1 | Число оставшихся сегментов пути = 3 |
Адрес[1] = I2 | |
Если бит 0 bit map равен 1, s и i1 должны быть соседями; это проверяется узлом S | Адрес[2] = I3 Адрес[3] = d |
Адрес отправителя = s | Hdr Ext Len = 6 |
Адрес получателя = I2 | Число оставшихся сегментов пути = 2 |
Адрес[1] = I1 | |
Если бит 1 bit map равен 1, I1 и I2 должны быть соседями; это проверяется узлом I1 | Адрес[2] = i3 Адрес[3] = D |
Адрес отправителя = S | Hdr Ext Len = 6 |
Адрес получателя = I3 | Число оставшихся сегментов пути = 1 Адрес[1] = I1 |
Если бит 2 bit map равен 1, I2 и I3 должны быть соседями; это проверяется узлом I2 | Адрес[2] = I2 |
Адрес[3] = D |
Адрес отправителя = S | Hdr Ext Len = 6 |
Адрес получателя = D | Число оставшихся сегментов пути = 0 Адрес[1] = I1 |
Если бит 3 bit map равен 1, I3 и D должны быть соседями; это проверяется узлом I3 | Адрес[2] = I2 Адрес[3] = i3 |