ICMP (Internet Control Messaging Protocol)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 20:14, 1 февраля 2015.

Протокол управляющих сообщений Internet (Internet Control Messaging Protocol — ICMP) фактически считается вспомогательным протоколом для IP. Поэтому он определен в том же документе стандарта Internet (стандарт 5), что и IP. Но ICMP по принципам своего функционирования в большей степени напоминает протокол верхнего уровня, чем вспомогательный протокол, и использует IP таким же образом, как его используют другие протоколы верхнего уровня (такие как TCP). В частности, ICMP позволяет протоколу IP инкапсулировать передаваемые им данные. Поэтому в протоколе ICMP, как таковом, применяются механизмы адресации и фрагментации IP. Причина, по которой ICMP считается вспомогательным протоколом, состоит в том, что он играет крайне важную роль в обеспечении успешного функционирования IP, поэтому стал обязательным компонентом любой реализации IP. Какую же важную роль играет этот протокол? Он просто сообщает об ошибках.

Назначение ICMP как протокола состоит в предоставлении устройствам IP информации о результатах выполненных ими операций передачи данных по протоколу IP. Как правило, этот протокол чаще всего используется для передачи хостам сообщений о том, что возникла какая-то ошибка. Например, предположим, что предпринимается попытка подключения к удаленному хосту с помощью протокола Telnet. Пользователь вводит в приложении Telnet соответствующее имя хоста, а через несколько секунд получает ответ, что адресат недоступен — Destination Unreachable. Каким образом приложение Telnet могло определить, что адресат недоступен? Если бы маршрутизатор просто уничтожил пакет с запросом на установление соединения, то не было бы возможности определить действительную причину ошибки.

Именно для этой цели и служит ICM Р. Приложение Telnet не должно ожидать до бесконечности установления соединения (или устанавливать тайм-аут на четыре минуты, ожидая истечения максимального значения TTL), поскольку им может быть сразу же получено сообщение ICMP от маршрутизатора с указанием, что адресат недоступен. Сообщение Destination Unreachable представляет собой лишь одно из сообщений многих типов, которые определены в протоколе ICMP. Полный список типов сообщений ICMP, которые предусмотрены в документе RFC 792, приведен в табл. 5.1. Назначение сообщений некоторых типов описано ниже. Следует отметить, что все реализации IP формально должны распознавать сообщения всех типов, но не во всех этих реализациях фактически используется полный перечень типов сообщения. Иными словами, состав поддерживаемых сообщений зависит от реализации протокола IP в конкретной операционной системе.

Таблица 5.1. Коды и типы сообщений ICMP.
Код ICMP
Тип ICMP
0
Echo Reply (Ответ эхо-повтора)
3
Destination Unreachable (Адресат недоступен)
4
Source Quench (Подавление источника)
5
Redirect (Перенаправление)
8
Echo Request (Запрос эхо-повтора)
11
Time Exceeded (Превышение установленного времени)
12
Parameter Problem (Ошибка при обработке параметра)
13
Timestamp Request (Запрос временной отметки)
14
Timestamp Reply (Ответ с временной отметкой)
15
Information Request (Информационный запрос)
16
Information Reply (Информационный ответ)

Запрос и ответ эхо-повтора ICMP

Сообщения эхо-повтора ICMP используются для диагностических целей в одном из наиболее широко применяемых в настоящее время сетевых приложений — в программе Ping. Те, кто незнаком с программой Ping, могут рассматривать ее как грубый способ проверки наличия признаков жизни. Например, если преподаватель на уроке заметил, что один из учеников положил голову на стол, он может проверить, жив ли этот ученик (и просто уснул) или умер. В этом случае преподавателю нужно взять указку (ведь она есть практически у каждого преподавателя) и "постучать" нерадивого ученика по голове. Итак, если он действительно спит, то обязательно отреагирует каким- либо образом. Ну а если случилось худшее, то и об этом необходимо вовремя узнать.

С помощью сетевого приложения Ping выполняется аналогичная задача. В процессе работы часто возникает необходимость определить, находится ли сетевое устройство в исправном и работоспособном состоянии. Для этого передается сообщение запроса эхо-повтора ICMP в надежде получить от устройства ответ. Если такое сообщение достигает цели, устройство передает ответное сообщение эхо-повтора, на основании которого можно определить, что устройство функционирует в сети и принимает запросы на установление связи.

Примечание В большинстве операционных систем команды эхо-тестирования имеют синтаксис PING <1Р-адрее или доменное_имя>.

Сообщение Destination Unreacheable (адресат недостижим)

Это сообщение применяется для передачи хосту указания на то, что получатель отправленного им пакета IP не был найден. Такая проблема может быть вызвана многими причинами, о которых можно узнать по дополнительному коду в сообщении Destination Unreachable. Для этого сообщения определено шесть дополнительных кодов, описание которых приведено ниже.

  • Код Network unreachable (сеть недостижима). Этот код указывает, что от маршрутизаторов в сети поступили сообщения о том, что они не могут найти путь для передачи пакета от отправителя к получателю. Иными словами, не исключено, что сеть, в которой находится получатель, действительно существует, но маршрутизаторы не имеют информации о том, где она находится или как получить к ней доступ, поэтому они уничтожают пакет и передают отправителю такое сообщение.
  • Код Host unreachable (хост недостижим). Этот код указывает, что искомая сеть исправна и работоспособна и маршрутизатор вполне может получить к ней доступ, но хост получателя по какой-то причине не отвечает. Если же хост получателя не может обработать полученный пакет, он передает сообщение с кодом Protocol Unreachable или Port Unreachable.
  • Код Protocol unreachable (протокол недоступен). Этот код указывает, что хост получателя исправен и работоспособен, но протокол, который используется отправителем, на хосте получателя не поддерживается.
  • Код Port unreachable (порт недоступен). Согласно этому коду, требуемый протокол функционирует, но порт, который применяется для этого протокола, является недоступным. Дополнительная информация о портах приведена ниже в этой главе.
  • Код Unable to Fragment (фрагментация не может быть выполнена). С помощью этого передается информация о том, что в одном из маршрутизаторов по пути следования пакета возникла необходимость фрагментировать этот пакет, чтобы он соответствовал максимальной единице передачи данных в сети для протокола канального уровня, применяемого в текущем наборе протоколов, но такая операция не могла быть выполнена, поскольку в пакете установлен бит запрета фрагментации (Do not Fragment — DF).
  • Код Source Route Failed (маршрут, заданный отправителем, неприменим).

Этот код позволяет хосту определить, что заданный им маршрут передачи пакета получателю является недействительным. Как правило, это сообщение не применяется, поскольку в протоколе IP обычно не предусматривается маршрутизация от отправителя. Сообщение Source Quench(подавление источника)

Сообщение Source Quench

Сообщение Source Quench протокола ICMP является типичным примером уведомления о заторе. Когда буфер устройства начинает заполняться, этим устройством может быть отправлено сообщение Source Quench ICMP на предыдущее устройство, находящееся на расстоянии одного транзитного перехода, с требованием замедлить передачу. Такой механизм напоминает схему уведомления о заторе, которая рассматривалась в главе 1. Единственным недостатком такого механизма является то, что устройства обычно начинают отправлять сообщения Source Quench только после того, как в них начинается уничтожение пакетов, полученных от предыдущего устройства. Сообщения Source Quench могут вырабатываться любыми устройствами вдоль пути следования пакета, независимо от того, являются ли эти устройства маршрутизаторами или оконечными устройствами (хостами). Кроме того, на сообщение Source Quench может также ответить любое устройство вдоль пути следования (маршрутизатор или хост), но и в этом случае перечень возможных ответов зависит от конкретной реализации протокола ICMP.

Сообщение Redirect (перенаправление)

Сообщение Redirect ICMP передает устройству информацию о том, что в нем используется неправильный шлюз (маршрутизатор) для передачи пакетов по заданному адресу. После получения маршрутизатором от хоста пакета, предназначенного для отправки в конкретную удаленную сеть, маршрутизатор выполняет в своей таблице маршрутизации поиск сети получателя и перенаправляет пакет на следующий маршрутизатор по пути к этой сети. А если согласно этой таблице обнаруживается, что устройство (или маршрутизатор), находящееся в конце следующего транзитного перехода, относится к той же сети, что и клиент, текущий маршрутизатор перенаправляет пакет обычным образом, но затем передает клиенту сообщение Redirect. Это сообщение информирует клиента, что более быстрый путь к достижению искомой сети состоит в обращении непосредственно к тому маршрутизатору, который находится в одной сети с клиентом. Сообщение Redirect предназначено для того, чтобы клиент включил в свою локальную таблицу маршрутизации новую запись с указанием сети получателя и альтернативного маршрутизатора, сократив тем самым путь к удаленной сети.

Сообщение Time Exceeded (превышение установленного времени)

Для передачи хосту информации о том, что пересылка отправленного им сообщения потребовала слишком много времени на пути к намеченному получателю, после достижения нулевого значения в поле TTL пакета IP хосту отправителя передается сообщение Time Exceeded. Поле TTL обычно применяется в программе traceroute (версия этой программы, применяемая в операционной системе Cisco, носит название Пасе, а в операционной системе Windows — tracert). Назначение программы traceroute состоит в проверке каждого транзитного перехода на пути к указанному получателю. Такая информация позволяет узнать точный маршрут прохождения пакетов от отправителя к получателю. Такая информация имеет исключительно важное значение при поиске неисправностей.

Например, обычно автор, чтобы обратиться на Web-узел Microsoft, отправляет со своего домашнего компьютера пакеты, которые вначале поступают на узел в г. Роли (Raleigh), шт. Северная Каролина, затем в Вашингтон, округ Колумбия, и наконец, поступают в Сиэтл, шт. Вашингтон. А когда автор заметил, что в определенные дни Web-узел Microsoft отвечает на запросы с особенно значительным замедлением, он решил выяснить, находится ли причина такого замедления в его локальной сети, в сети провайдера Internet или просто связана с нарушением работы опорной сети. А поскольку после выполнения трассировки маршрута с помощью программы traceroute было обнаружено, что путь в Сиэтл в период значительного замедления проходит через Флориду, ответ стал очевидным. По всей вероятности, опорная сеть, которая обычно используется, была перегружена или остановлена, поэтому пакеты были направлены по альтернативному маршруту, который оказался намного длиннее.

В программе traceroute задача проверки маршрута выполняется очень просто. Как указано выше, после истечения времени, установленного в поле TTL, пакет уничтожается и хосту передается сообщение Time Exceeded протокола ICMP. В программе traceroute как раз и используется это поле, в котором по мере отправки очередных пакетов устанавливаются небольшие, но последовательно увеличивающиеся значения. Установив значение TTL в первом пакете, передаваемом получателю, равное 1, программа traceroute получает сообщение Time Exceeded от первого же маршрутизатора на пути к месту назначения (такое сообщение, безусловно, не может быть получено в том случае, если в конфигурации маршрутизатора не предусмотрена отправка сообщений Time Exceeded). Причина отправки такого сообщения является очевидной: каждый маршрутизатор в пути следования пакета должен уменьшить значение TTL, по меньшей мере, на 1. А если поле TTL имело значение 1 и маршрутизатор уменьшил его на 1, такое значение становится равным 0, поэтому пакет отбрасывается и отправителю передается сообщение Time Exceeded.

Итак, программа traceroute просто выполняет такую операцию много раз, последовательно увеличивая при этом значение TTL на 1. Поэтому при отправке первого сообщения TTL равно 1, что позволяет определить первый транзитный переход. Во втором сообщении оно равно 2, что дает возможность узнать, где находится второй транзитный переход и т.д.

Сообщение Parameter Problem (ошибка при обработке параметра)

Сообщение Parameter Problem передается отправителю в том случае, если устройство получателя не может определить, что означает один из параметров в заголовке IP, и поэтому вынуждено отбросить ракет. Как правило, это сообщение передается только в том случае, если получателем обнаружены в пакете такие опции, которые он не может распознать.

Сообщения Timestamp Request (запрос отметки времени) и Timestamp Reply (ответ с отметкой времени)

Сообщения Timestamp протокола ICMP позволяют проставить в пакете отметку времени (в миллисекундах после полуночи) с указанием того момента, когда отправитель послал сообщение, получатель принял это сообщение, а затем отправил его назад. Наиболее очевидный способ использования таких сообщений состоит в измерении задержки (определении того, какова продолжительность времени между отправкой сообщения по сети и получением ответа), но эти сообщения применяются также для синхронизации аппаратных часов.

Сообщения Information Request (информационный запрос) и Information Reply (информационный ответ)

Сообщения ICMP типа Information применяются устройством для определения того, в какой сети оно находится. Устройство отправляет пакет IP, в котором в полях адреса отправителя и получателя находятся значения 0.0.0.0. Затем другое устройство (обычно маршрутизатор или сервер) в ответ передают сетевой адрес данной локальной сети, что позволяет отправителю первоначального сообщения определить, к какой сети он относится.

Дополнительная информация о протоколе ICMP приведена в документе RFC 792 (стандарт 5).