The Internet Control Message Protocol

(Межсетевой протокол контрольных сообщений)

IP обладает дополнительным протоколом, о котором мы еще не говорили. Это Межсетевой протокол контрольных сообщений (ICMP), который использует сетевой слой ядра для передачи сообщений об ошибках и другой информации между хостами. К примеру, представьте, что вы находитесь на хосте с именем erdos и хотите использовать telnet через порт 12345 на хосте quark. Однако на этом порте нет слушающего процесса. Как только первый пакет TCP приходит на указанный порт, ядро системы определяет отсутствие слушающего процесса и отправляет ICMP сообщение.

Существует множество сообщений ICMP, большая часть из которых информирует о различных ошибках. Однако, есть одно интересное сообщение, называемое "Перенаправляющим сообщением" (Redirect message). Оно создается модулем маршрутизации, когда обнаруживается, что другой хост использует его как шлюз, но существует более короткий маршрут. Например, после загрузки таблицы маршрутизации на хосте sophus, она может оказаться неполной: она содержит маршруты к сети математиков, к FDDI магистрали, и по умолчанию указывает на шлюз Groucho Вычислительного центра (gcc1).

Таким образом, все пакеты для хоста quark отправляются через gcc1, хотя было бы быстрее передать их через niels — шлюз отдела физики. Когда gcc1 получает такие дейтаграммы, он оповещает, что выбран неоптимальный маршрут, и перенаправляет пакет к niels, одновременно возвращая ICMP сообщение хосту sophus, указывая на более короткий маршрут.

На первый взгляд, это может показаться разумным, так как исчезает необходимость вручную добавлять новые маршруты. Однако стоит быть осторожным, полагаясь на динамические механизмы маршрутизации, будь то RIP или ICMP сообщения перенаправления. Использование ICMP перенаправлений и RIP предоставляет минимальный или вообще никакой контроль над проверкой подлинности маршрутной информации. Это может позволить злоумышленникам сорвать работу сети или совершить другие деструктивные действия.