
Переходим к сообщениям следующего типа - Тип 12.
Сообщения этого типа посылаются в ответ на пакеты, имеющие ошибки в
заголовке и называются Parameter Problem.
Формат данной опции:
Type = 12
Code
Checksum
Pointer
Не используется
IP заголовок уничтоженного пакета и первые 8 байт данных этого пакета.
Всего от 28 до 68 байт данных
В RFC792 описан только один код при значении типа = 12, этот код = 0 и
означает, что в заголовке есть некоторая ошибка. При этом однобайтовое поле
Pointer (указатель) показывает номер байта, в котором произошла ошибка. Во
многих случаях стек TCP/IP не отправляет ICMP сообщения типа 12 в ответ на
ошибочные пакеты, например, при неверном значении поля контрольной суммы,
неверном значение поля Total Length и т.п. Посылать ли в ответ на такие пакеты
сообщение ICMP об ошибке обычно решает автор стека – в RFC нет четких
указаний, в ответ на какие именно ошибки необходимо посылать ICMP
сообщения типа 12. В конечном счете, решение о том, посылать или не посылать
ICMP пакет типа 12 принимается исходя из текущих условий – станция может
послать сообщение типа 12 на пакет вполне нормальный с очки зрения других
станций, но не подходящий для данной станции.
Для того чтобы понять, когда могут быть посланы ICMP сообщения типа 12
необходимо для начала разобраться с тем, в каких полях заголовка можно
допустить явные ошибки, т.е. установить такие значения полей, которые в
принципе не возможны.
Начнем с начала: поле Version, как мы знаем, это поле предназначено для
указания версии используемого протокола IP и, не смотря на то, что мы
занимаемся только лишь IP версии 4, тем не менее, это поле может принимать и
другие значения. Поле IHL не может принимать значение меньше 5, однако в
ответ на IP пакеты с полем IHL <5 большинство операционных систем не
посылает ICMP сообщений типа 12. Поле TOS может принимать лишь
ограниченный набор значений, однако, в новых RFC могут появиться новые
интерпретации комбинаций флагов (как, например, появилась интерпретация
комбинации DTRC как максимизация безопасности передачи). Поле Total Length
может принимать любые значения, но не менее 20 байт (заголовок IP), однако
при ошибках в этом поле так же, обычно, ICMP сообщения типа 12 не
посылаются. Поле ID может принимать все возможные значения, как и поле
Offset. Анализ возможности ошибок оставшейся стационарной части заголовка,
показывает что особенных явных ошибок в этой части заголовка сделать нельзя
(помимо указанных выше). Однако есть еще опции, в которых можно допустить
ряд ошибок, самая характерная их ниx – неверное значение поля Pointer.
Например, в опции RR поле Pointer не может быть меньше 4.
Рассмотрим пример пакета с опцией RR и установленным значение
указателя равным 1: