The Internet Control Message Protocol
(Межсетевой протокол контрольных сообщений)
IP имеет протокол-компаньон, что ж мы до сих пор не поговорили о нем. Это межсетевой протокол контрольных сообщений (ICMP) и используется он сетевым кодом ядра, чтобы передавать сообщения об ошибках и т. п. другим хостам. Например, предположите что Вы находитесь на erdos и хотите использовать telnet через 12345 порт на quark, но на этом порте отсутствует слушающий процесс. Когда приходит первый TCP пакет на этот порт, ядро определит это и отошлет ICMP сообщение.
Имеются множество ICMP сообщений, большинство из них сообщают о каких-либо ошибках. Однако, имеется очень интересное сообщение названное Перенаправляющим сообщением (Redirect message). Оно генирируется модулем маршрутизации, когда он обнаруживает что другой хост использует его как gateway, хотя имеется более короткий маршрут. Например, после загрузки таблицы маршрутизации на sophus может быть неполной: она содержит маршруты к сети математиков, к FDDI магистрали, а по умолчанию указан gateway Groucho Вычислительного центра (gcc1).
Поэтому, любые пакеты для quark посылаются через gcc1, хотя быстрее было бы через niels (gateway в отделе физики). При получении таких дэйтаграм, gcc1 будет извещать что это -- плохой маршрут, и будет отправлять пакет к niels, в то же самое время возвращая ICMP сообщение к sophus, показывая ему лучший маршрут.
Это кажется очень разумным, потому что пропадает необходимость дописывать новые маршруты вручную. Однако будте осторожны, полагаясь на динамические схемы маршрутизации, будь то RIP или ICMP перенаправляющие сообщения, это не всегда хорошая идея. ICMP перенаправления и RIP предлагают Вам маленький или никакой выбор при проверке, подлинности маршрутной информации Это позволяет злоумышлинику полностью разрушить движение по сети, или сделать что-то еще.