
Приведенный
пример
демонстрирует
поручение
следующим
4
маршрутизаторам записать сведения о себе в данный пакет, следовательно,
IHL = 10, т.е. длина заголовка 40 байт, из которых 20 байт – стационарная
часть заголовка, 3 байта – тип, длина и указатель опции RR, 16 байт – место
под IP адреса, которые впишут маршрутизаторы, и 1 байт – EOOF, так как
заголовок сам по себе не заканчивается на четырехбайтовой границе.
При этом сама опция имеет вид: тип опции – 07 (Record Route), длина –
19 байт (тип, сама длина, указатель и 16 байт под IP адреса), указатель – 4,
остальное заполнено нулями.
Теперь рассмотрим, как это работает, и проясним роль поля Pointer
(указатель). Когда маршрутизатор получает такой пакет, он считывает опцию
RR и понимает, что вероятно должен записать свой адрес в опцию, если
конечно там еще есть свободные четырехбайтовые «гнезда». С какого байта
может начинать писать свой адрес в опцию маршрутизатор? Для этого и
применятся поле указатель – маршрутизатор должен вписать свой IP адрес в
тело опции начиная с байта с номером указателя, в данном случае,
действительно с байта №4, так как три первых байта заняты служебной
информацией – «заголовком» опции. Когда маршрутизатор впишет свой адрес,
он перешлет пакет дальше, но перед этим он увеличит поле указатель на 4
байта, давая, таким образом, инструкцию следующему маршрутизатору,
вписывать свой адрес уже с восьмого байта, так как первые три байта заняты