Протокол управляющих сообщений Internet (ICMP)
ICMP – компактный “диагностический” протокол, в основном используемый в инструментах, измеряющих “здоровье” сети. К какому же уровню модели OSI отнести этот протокол? Некоторые рассматривают ICMP как находящийся на сетевом уровне и являющися эквивалентом IP и IPX; другие трактуют его как транспортный протокол вроде TCP или UDP. Правда в том, что он имеет элементы и того и другого. “Свет – волна, свет – частица” Так и здесь. Сообщения, принятые ICMP, обрабатываются на “сетевом” уровне, но эти сообщения строятся для взаимодействия с программами “транспортного” уровня, поэтому трудно сказать, куда его следует отнести в 7-миуровневой модели ISO / OSI.
Наиболее распространённые способы использования ICMP – в инструментах ping и traceroute; оба они возвращают информацию, фундаментальную для структуры дейтаграмм ICMP. Большей частью они используют способность ICMP опрашивать удалённые хосты для получения временных меток и эха, которое возвращается обратно, вместе со специализированными кодами.
ICMP может также применяться для предоставления сообщений об ошибках протоколам “транспортного” уровня, таким как ошибка типа “Port Unreachable” (порт недоступен), возвращаемая ICMP отправителю UDP, пытающемуся обратиться к недоступному порту машины-получателя. ICMP может сообщать о 16 ошибочных состояниях, и имеет примерно столько же дополнительных функций.
> ping и traceroute… Большей частью они используют способность ICMP опрашивать удалённые хосты
ЕМНИП, маршрутизатор не должен возвращать и не возвращает ошибку, если на него приходит ICMP-пакет с истекающим ТТЛ. Всё-таки tracert какие-то данные отправляет по UDP или типа того. А вот маршрутизатор уже отправляет обратно ошибку по ICMP.
Tracert отправляет первый раз 3 пакета с TTL=1, ближайший хост/роутер получает пакет и возвращает ICMP с кодом 11 (истекло время ожидания). Наш хост записывает ip этого хоста. Затем посылаются 3 пакета с TTL=2, выясняя IP следующего в цепочке.. и т.д., до 30 по дефолту…