на каком уровне работает протокол icmp
Протокол межсетевых управляющих сообщений. Типы и Коды ICMP — сообщений
Протокол ICMP (Internet Control Message Protocol) — протокол межсетевых управляющих сообщений.
Информация о возникающих ошибках в сети передается по протоколу ICMP. А также протокол ICMP может использоваться для диагностики работы в сети даже, когда в ней не возникают ошибки. Так как IP предоставляет сервис без гарантии доставки, то сообщение об ошибках ICMP не обязаны обрабатываться ни протоколом ICMP ни протоколом IP.
Формат заголовка ICMP
Рассмотрим формат пакета ICMP. Первое поле в заголовке тип сообщения. Оно говорит о том, что произошло в сети, какая ошибка или какое действие по диагностике пытаются выполнить.
Типы ICMP — сообщений
Самое важно в пакете ICMP это тип сообщений. Именно тип, говорит о том, что произошло в сети. Есть 2 вида ICMP сообщений. Первый вид это запрос-ответ.
Коды ICMP — сообщений
Следующее поле в заголовке ICMP это код сообщения. Ниже представлено несколько возможных кодов для типа сообщения 3 — узел назначения недостижим. Какие могут быть причины? Причины перечислены ниже на картинке.
Применение ICMP
Большая часть пакетов ICMP формируется и отправляется автоматически сетевым оборудованиям. Но некоторые типы сообщений формируются утилитами, которые применяются для диагностики сети. Рассмотрим утилиты ping и traceroute (в Windows tracert)
Утилита ping
Утилита ping используется, чтобы проверить доступность компьютера в сети. Возможно подключиться к этому компьютеру или нельзя. Ping использует это-протокол ICMP. Компьютер, который хочет проверить доступность другого, отправляет эхо-запрос (тип=8, код=0).
Компьютер, который получил такой запрос, в ответ отправляет эхо-ответ ICMP с типом 0, если эхо-ответ не пришел, значит установить с компьютером соединение по сети невозможно.
Пример использования утилиты ping для проверки возможности подключиться к сайту ВКонтакте. По умолчанию утилита ping запускает 4 эхо-запроса и для каждого эхо-запроса получен эхо-ответ. В ответе указывается некоторая диагностическая информация.
Утилита traceroute
Утилита traceroute позволяет определить маршрут от отправителя к получателю. Под маршрутом имеется в виду перечень всех маршрутизаторов через которые проходит пакет.
Пример работы утилиты traceroute ее windows вариант tracert для определения маршрута к сайту ВКонтакте.
Работа утилиты traceroute
Как утилита traceroute узнает маршрутизатор? Для этого утилита использует ICMP сообщения время жизни истекло. Чтобы этого достичь, сначала отправляется сообщение у которого время жизни установлено в единицу TTL=1.
Пакет доходит до первого маршрутизатора, маршрутизатор уменьшает время жизни TTL=0 и маршрутизатор отбрасывает пакет.
И генерирует сообщение об ошибке ICMP с типом 11, код 0 время жизни истекло. Утилита traceroute из заголовка IP пакета в которого вложен ICMP извлекает IP-адрес маршрутизатора.
На следующем этапе о тправляется пакет с временем жизни равным двум TTL=2.
На первом маршрутизаторе время жизни уменьшается до единицы и пакет переходит на второй маршрутизатор.
Второй маршрутизатор снова уменьшает время на 1, время жизни становится нулем. Пакет отбрасывается и уже второй маршрутизатор отправляет сообщение время жизни истекло. Утилита traceroute извлекает адрес второго маршрутизатора из IP заголовка этого сообщения.
И так происходит до тех пор пока пакет не дойдет до узла назначения.
Заключение
Рассмотрели протокол ICMP протокол межсетевых управляющих сообщений. Протокол ICMP используется для сообщения об ошибках, которые происходят в сети и для тестирования работоспособности сети.
Интернет технологии (архив ИПМ 2001-2010, Богомолов)
Вы их получаете постоянно, а иногда и отправляете, например:
Если адрес не доступен, вы получаете сообщение ICMP.
Если порт не доступен, вы получаете сообщение ICMP.
Если вы пользуетесь командой ping, вы получаете сообщение ICMP.
Сообщение ICMP инкапсулируется прямо в IP пакет (поле данных), т.е. протоколы транспортного уровня не используются.
Поле protocol = 1 (в заголовке IP).
Первый стандарт ICMP определен в RFC0777 (Internet Control Message Protocol J. Postel Apr-01-1981)
Сообщения делятся на два типа:
Непарные (например: посылаете запрос к HTTP-серверу, но сервер не доступен, и последний маршрутизатор (или сервер) отправляет ICMP-сообщение (Destination Unreachable) вам)
11.1.1 Заголовок сообщения ICMP.
Структура заголовка сообщения ICMP. Слова по 32 бита.
Типы сообщений протокола ICMP
11.1.2 Сообщение Destination Unreachable
Непарное сообщение, формируется, если цель недостижима.
«Заголовок и первые 64 бита исходной дейтограммы» отправляются для диагностики причины ошибки.
Диагностические коды сообщений Destination Unreachable
Код | Тип кода | Значение |
0 | Network Unreachable | Сеть назначения недостижима |
1 | Host Unreachable | Хост назначения не достижим |
2 | Protocol Unreachable | Протокол недостижим |
3 | Port Unreachable | Порт недостижим |
4 | Fragmentation Need & DF set | Необходима фрагментация, однако она запрещена |
5 | Source Route Failed | Исходный маршрут вышел из строя |
6 | Destination Network Unknown | Сеть назначения неизвестна |
7 | Destination Host Unknown | Хост назначения неизвестен |
8 | Source Host Isolated | Источник изолирован |
9 | Communication with destination Network Administratively Prohibited | Взаимодействие с сетью назначения запрещено |
10 | Communication with destination Host Administratively Prohibited | Взаимодействие с узлом назначения запрещено |
11 | Network Unreachable for type of service | Сеть назначения недоступна для запрошенного типа сервиса |
12 | Host Unreachable for type of service | Хост назначения недоступен для запрошенного типа сервиса |
13 | Связь административно запрещена с помощью фильтра | |
14 | Нарушение старшинства ЭВМ | |
15 | Дискриминация по старшинству |
Из таблицы видно, что коды 2 и 3 формируются сервером назначения.
11.1.3 Сообщение Time Exceeded
Непарное сообщение, формируется, если время жизни истекло.
Диагностические коды сообщений Time Exceeded
Код | Значение |
0 | Время жизни = 0 |
1 | Таймер дефрагментации установился в 0 до полной сборки принятого сообщения |
11.1.4 Сообщение Parameter Problem
Непарное сообщение, формируется, если заголовок IP-дейтограммы содержит неверный параметр.
Диагностические коды сообщений Parameter Problem
Код | Значение |
0 | Если возникла проблема с интерпретацией какого то поля (используется поле «номер байта с ошибкой в исходном сообщении») |
1 | Если возникла проблема с несоответствием какого то запрашиваемого параметра, с установленными требованиями |
11.1.5 Сообщение Source Quench
Непарное сообщение, формируется, если возникла перегрузка маршрутизатора, пакет не может быть помещен в буфер, т.к. он переполнен.
11.1.6 Сообщение Redirect
Непарное сообщение, формируется, если изменен маршрут для пакета.
Случай, когда маршрутизатор перенаправляет пакеты по другому маршруту (маршрут 2).
И предлагает в сообщении ICMP изменить шлюз по умолчанию
Диагностические коды сообщений Redirect
Код | Тип кода | Значение |
0 | Redirect Datagram for networks | Изменение маршрута для сети |
1 | Redirect Datagram for host | Изменение маршрута для хоста |
2 | Redirect Datagram for the Type of service and networks | Изменение маршрута для типа сервиса или сети |
3 | Redirect Datagram for the Type of service and host | Изменение маршрута для типа сервиса или хоста |
11.1.7 Сообщение Echo Request/Echo Reply
Парное сообщение. Любой узел, получивший Echo Request, должен ответить Echo Reply отправителю.
Echo Request сообщения формирует программа ping.
Идентификатор и последовательный номер используются для определения, какой ответ принадлежит какому запросу.
11.1.8 Атаки с помощью Echo Request/Echo Reply
Цель: загрузить сервер так, чтобы он не мог отвечать.
Нужно послать как можно больше ответов Echo Reply на жертву.
Для этого можно задействовать чужие сети.
Посылаем сообщение Echo Request.
253 машины посылают ответ на жертву (194.85.241.1)
Все повторяем много раз, а лучше задействовать побольше таких сетей.
Жертва будет перегружена.
Атаки с помощью Echo Request/Echo Reply
Меры предотвращения таких атак:
Запретить прием и распространение сообщений типа Directed Broadcast.
Уничтожать сфальсифицированные пакеты, сопоставляя IP источника с маршрутной таблицей и номером интерфейса, с которого получен пакет.
Запретить трафик ICMP (ping, traceroute и т.д., работать не будут).
11.1.9 Принцип работы traceroute
Номер используемого порта по умолчанию 33434.
Посылаются дейтограммы с TTL=1 (время жизни пакета)
Первый же маршрутизатор уменьшает TTL на 1, т.е. TTL=0 и пакет уничтожается, а отправителю посылается ICMP сообщение Time Exceeded.
Посылаются дейтограммы с TTL=2 (время жизни пакета)
Первый же маршрутизатор уменьшает TTL на 1, т.е. TTL=1 и пакет проходит дальше.
Второй маршрутизатор уменьшает TTL на 1, т.е. TTL=1 и пакет уничтожается, а отправителю посылается ICMP сообщение Time Exceeded.
Попадая на получателя, пакет уничтожается, т.к. получатель не знает, что с ним делать (порт не существует), и отправителю посылается ICMP сообщение Destination Unreachable.
Пример работы traceroute
Создана для стандартизации управления оборудованием разных производителей.
Например, в сети установлены разные маршрутизаторы (cisco, motorola, linux и т.д.), все настраиваются поразному. Нужно изменить настройки на всех маршрутизаторах. Обычным методом придется каждый настраивать индивидуально (интерфейсы у всех разные). С помощью SNMP можно настроить используя один интерфейс.
SNMP служит примером системы управления, в которой для достижения нужного результата не выдается команда, а осуществляется обмен информацией, решение принимается «на месте» в соответствии с полученными данными.
Первый стандарт SNMP определен в RFC1067 (Simple Network Management Protocol J.D. Case, M. Fedor, M.L. Schoffstall, J. Davin Aug-01-1988)
Последняя версия RFC1157 (STD0015 Simple Network Management Protocol (SNMP) J.D. Case, M. Fedor, M.L. Schoffstall, J. Davin May-01-1990)
RFC1592 (Simple Network Management Protocol Distributed Protocol Interface Version 2.0 B. Wijnen, G. Carpenter, K. Curran, A. Sehgal, G. Waters March 1994)
Протокол прикладного уровня работает по умолчанию поверх UDP, но может работать по TCP.
Клиент и сервер обмениваются сообщениями.
Взаимодействие клиент-сервера SNMP. Приведены все пять типов сообщений.
Типы PDU сообщений SNMP
Тип PDU | Имя | Значение |
0 | get-request | Получить значение переменных |
1 | get-next-request | Получить следующие переменные после этой |
2 | set-request | Установить значение переменных |
3 | get-response | Выдать значение переменных (Посылает агент в ответ на get-request, get-next-request, set-request) |
4 | trap | Уведомить менеджера, когда что-либо произошло с агентом |
Формат SNMP-сообщений. Trap приведен отдельно.
Значения статуса ошибки SNMP.
Статус ошибки | Имя | Значение |
0 | noError | Все в порядке |
1 | noError | Клиент не может поместить отклик в одно SNMP сообщение |
2 | noSuchName | Оператор указывает на несуществующую переменную |
3 | badValue | В команде set использовано недопустимое значение или неправильный синтаксис |
4 | readOnly | Менеджер попытался изменить переменную, которая помечена как «только для чтения» |
5 | genErr | неопознанная ошибка |
Тип trap | Имя trap | Значение |
0 | coldStart | Установление начального состояния объекта |
1 | wannStart | Восстановление начального состояния объекта |
2 | linkDown | Интерфейс выключился. Первая переменная в сообщении идентифицирует интерфейс |
3 | linkUp | Интерфейс включился. Первая переменная в сообщении идентифицирует интерфейс |
4 | authenticationFailure | От менеджера получено SNMP-сообщение с неверным паролем |
5 | egpNeighborLoss | EGP-партнер отключился. Первая переменная в сообщении определяет IP-адрес партнера |
6 | entrpriseSpeclfic | Информация о trap содержится в поле «Специальный код» |
Поле «Специальный код» для типов trap 0…4 поле должно быть равно нулю.
11.2.2 Структура информации управления (SMI)
Первый стандарт SMI определен в RFC1155 (Structure and identification of management information for TCP/IP-based internets M.T. Rose, K. McCloghrie May-01-1990)
Последний стандарт для версии SMIv1 RFC1155 (Structure and identification of management information for TCP/IP-based internets M.T. Rose, K. McCloghrie May-01-1990)
Последний стандарт для версии SMIv2 RFC2578 (Structure of Management Information Version 2 (SMIv2) K. McCloghrie, D. Perkins, J. Schoenwaelder April 1999)
Некоторые типы данных:
TimeTicks (тики времени). Счетчик, который считает время в сотых долях секунды с какой-либо исходной точки.
11.2.2.1 Дерево идентификаторов объектов
Все управляемые объекты глобальной сети расположены в дереве.
Идентификатор объекта (OID) это последовательность целых десятичных чисел, разделенных точками (1.4.2.1.6). Эти целые числа представляют собой древовидную структуру, напоминающую DNS
Дерево идентификаторов объектов в информационной базе управления
Например, ветвь 1.3.6.1.2.1.4 (iso.org.dod.internet.mgmt.mib-2.ip) дает информацию необходимую для управления компьютерами и маршрутизаторами.
11.2.3 Информационная база управления (MIB)
Первый стандарт MIB определен в RFC1066 (Management Information Base for network management of TCP/IP-based internets K. McCloghrie, M.T. Rose Aug-01-1988 )
Последний стандарт для версии MIB-I RFC1156 (Management Information Base for network management of TCP/IP-based internets K. McCloghrie, M.T. Rose May-01-1990)
Последний стандарт для версии MIB-II RFC1213 (STD0017 Management Information Base for Network Management of TCP/IP-based internets:MIB-II K. McCloghrie, M.T. Rose Mar-01-1991)
Ветвь 1.3.6.1.2.1.4 (iso.org.dod.internet.mgmt.mib-2).
Расмотрим подробнее ветвь UDP (рис. выше).
Группа UDP содержит четыре переменные, и одну таблицу (udpTable) из двух переменных.
Переменные группы udp
Имя | Тип данных | Чтение/Запись | Описание |
udpInDatagrams | Counter | Только чтение | Количество UDP датаграмм, доставленных пользовательским процессам. |
udpNoPorts | Counter | Только чтение | Количество доставленных UDP датаграмм, для которых не оказалось порта назначения. |
udpInErrors | Counter | Только чтение | Количество недоставленных UDP датаграмм по другим причине (например, ошибка контрольной суммы UDP). |
udpOutDatagrams | Counter | Только чтение | Количество отправленных UDP датаграмм. |
Как видно из таблицы эти переменные обеспечивают полный сбор статистики для UDP-протокола.
Переменные в udpTable.
Имя | Тип данных | Чтение/Запись | Описание |
udpLocalAddress | IpAddress | Только чтение | Локальный IP адрес слушающего процесса. |
udpLocalPort | INTEGER [0..65535] | Только чтение | Локальный номер порта слушающего процесса. |
11.2.3.1 Примеры идентификации
Каждая переменная в MIB должна быть идентифицирована.
Обращение осуществляется только к тупиковым (в дереве) узлам.
11.2.3.1.1 Простые переменные
Обращения к этой переменной чаше делаются в сокращенном виде, udpInErrors.0, т.к. реально идет обращение к идентификатору объекта 1.3.6.1.2.1.7.1.0.
Рассмотрим идентификацию пунктов таблицы udpTable более подробно.
Пример таблицы udpTable.
Из таблицы видно, что система готова принимать UDP датаграммы с любого интерфейса (0.0.0.0) для портов 53 (DNS), 67 (BOOTP) и 161 (SNMP).
11.2.3.1.3 Абстрактная форма записи
Все поля в MIB и SNMP сообщениях описываются с использованием ASN.1.
Например, ASN.1 определение переменной udpNoPorts выглядит так:
udpNoPorts OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION
«The total number of received UDP datagrams for which there
was no application at the destination port.»
::= < udp 2 >
Новое в этой версии:
Определены два новых MIB: MIB SNMPv2 и MIB SNMPv2-M2M (менеджер-менеджер).
11.2.5 Программы для работы с SNMP