
Рассмотрим первую из этих опций: Record Route или RR. Данная опция
позволяет
узлу
отправителю
пакета
попросить
маршрутизаторы,
обрабатывающие пакет записать свои IP адреса в специально отведенные
места в заголовке IP пакета с целью дальнейшего анализа списка
маршрутизаторов, которые пересекает пакет (однако принцип работы утилиты
tracert.exe НЕ базируется на данной технологии). При этом, маршрутизаторы
записывают в заголовок IP пакета IP адреса тех своих портов, через которые
ОТПРАВЛЯЮТ маршрутизируемый пакет (в отличие от tracert.exe, в ходе
работы которого мы можем узнать IP адреса тех портов транзитных
маршрутизаторов, которые принимают пакет).
Рассмотрим формат опции. Данная опция является не копируемой: зачем
нагружать маршрутизаторы не свойственным им делом (вписыванием своего IP
адреса в заголовок) записыванием своего адреса в КАЖДЫЙ фрагмент, если
достаточно информации, которую приносит первый фрагмент? Данная опция
относится к классу «управление», поэтому первых три бита поля Option-type =
000, номер опции 00111, т.е. десятичное значение поля Option-type =7. Длина
данной опции является переменной и определяется тем, сколько именно
маршрутизаторов попросил отправитель вписать свои IP адреса в заголовок
пакета. Если бы маршрутизаторы, вписывая свои адреса, удлиняли бы
заголовок пакета, это привело бы к дополнительным сложностям с пересчетом
поля Total Length IP заголовка. Для того чтобы заголовок IP не изменял длину
при вписывании IP адресов маршрутизаторами, отправитель пакета с опцией
RR заранее резервирует место под адреса, которые впишут маршрутизаторы.
Пока эти зарезервированные места есть, маршрутизаторы вписывают свой
адрес в заголовок IP пакета, когда место, зарезервированное отправителем,
заканчивается - маршрутизаторы просто перенаправляют пакеты, не внося
изменений в заголовок.
Формат опции:
Type
Length Pointer IP первого маршрутизатора, второго и т.д., поле переменной длины
Длина кратна 4-м байтам, так как представляет
собой совокупность целого числа IP адресов.
Отправитель формирует пакет следующим образом: поле Type = 07, поле
Length = 4N+3, где N – количество маршрутизаторов, для которых
зарезервировано место в опции, Pointer = 4, работа этого поля будет описана
ниже, далее заполненное нулями то количество байт, которое зарезервировано
для заполнения IP адресами маршрутизаторов, число этих байт кратно 4.
Пример такого заголовка: