Понимание протокола ICMP (часть 1)

Опубликовано: 25 Марта, 2023

Что такое ICMP и что он означает? Ну, во-первых, ICMP расшифровывается как Internet Control Message Protocol. Что оно делает? Вы можете быть удивлены после прочтения этой статьи тем, как много на самом деле делает для нас ICMP. Назовем его неожиданным героем четырех основных протоколов. Четыре основных протокола: IP, TCP, UDP и ICMP. Если подумать, все эти протоколы на самом деле являются рабочими лошадками в мире межкомпьютерных коммуникаций.

Что именно вы собираетесь освещать?

Это хороший вопрос. В этой статье о ICMP мы определим, где именно ICMP находится в эталонной модели OSI, и рассмотрим различные типы пакетов, содержащих протокол ICMP. Наконец, различные состояния ошибок, о которых сообщает этот протокол, будут объяснены, чтобы расширить их. Вы, возможно, уже пришли к выводу, что чем больше вы узнаете о компьютерных протоколах, тем лучше вы сможете понять, как компьютер общается. Как и в любой области исследования, это помогает сначала достичь критической массы знаний. Как только эта критическая масса будет достигнута, многие другие концепции станут более ясными и, следовательно, понятными на теоретическом уровне. Надеюсь, что после того, как вы закончите читать серию статей, которые я написал о базовых протоколах TCP/IP, вы достигнете именно этого; критическая масса знаний.

Тогда давайте продолжим!

Используя эталонную модель OSI еще раз в качестве нашего шаблона, чтобы внести некоторый порядок в эту массу знаний, где же вписывается ICMP? Многие считают, что это часть сетевого уровня, на котором находится IP. Хотя при этом некоторые условия ошибки ICMP могут быть обработаны на транспортном уровне, например: TCP и UDP. Если вы никогда не видели приведенную ниже эталонную модель OSI, это ее уменьшенная версия.

Прикладной уровень Такие протоколы, как HTTP, SMTP, FTP
Уровень представления Протоколы, такие как JPEG, MPEG
Сеансовый уровень Протоколы, такие как NFS, SQL, RPC
Транспортный уровень Протоколы, такие как TCP и UDP
Сетевой уровень Такие протоколы, как IP и ICMP
Канальный уровень данных Такие протоколы, как HDLC и PPP
Физический слой Нет протоколов на этом уровне

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

1 байт 1 байт 2 байта
_____________________
| Тип | Код |Контр.сумма |
———————————

Итак, мы видим, что четыре байта в сообщении об ошибке ICMP остаются постоянными. Если вы посмотрите листовку TCP/IP и tcpdump, которую я рекомендовал вам загрузить, вы увидите представление, подобное приведенному выше. Помните, что он находится в разделе «Дополнительные ресурсы» внизу страницы.

Вот, пакет ICMP!

00:00:09.696930 192.168.1.100 > 192.168.1.200: icmp: эхо-запрос (ttl 126, id 6655, длина 60)
0x0000 4500 003c 19ff 0000 7e01 1ce8 c0a8 0164 E..<….~…….
0x0010 c0a8 01c8 0800 d9c3 0300 7889 3031 3233 ……….x.0123
0x0020 3435 3637 3839 6162 6364 6566 6768 696a 456789abcdefghij
0x0030 6b6c 6d6e 6f70 7172 7374 7576 клмнопкрстув

То, что у нас есть над нами, вероятно, является одним из самых известных типов ICMP-пакетов. Угадайте, что это за тип? Этот ICMP-пакет является широко обсуждаемым пакетом «ping». Однако для чего используется «эхо-запрос»? Ну, в первую очередь пакет ping используется для подтверждения того, назначен ли IP-адрес или нет, то есть: есть ли компьютер с определенным IP-адресом? Если есть, то с этого IP-адреса будет выдан ответ, а если нет, то будет сгенерировано и возвращено сообщение об ошибке ICMP. Это один из немногих случаев, когда пакет ICMP вызывает в ответ сообщение об ошибке ICMP. Обычно сообщение об ошибке ICMP, в свою очередь, не генерирует другое. Было бы что-то вроде бесконечного цикла, не так ли, если бы это могло произойти. Исключением из этого правила является приведенный выше пакет эхо-запроса ICMP.

Но как же выглядит ответ на эхо-запрос ICMP? Не только это, но и то, как компьютер, отправивший исходный эхо-запрос ICMP, узнает, что входящий ICMP-ответ предназначен для его первоначального эхо-запроса? На самом деле это очень хороший вопрос. Тогда давайте посмотрим на пакет ниже, чтобы получить ответ!

00:00:09.697192 192.168.1.100 > 192.168.1.200: icmp: эхо-ответ (ttl 255, id 6655, длина 60)
0x0000 4500 003c 19ff 0000 ff01 9be7 c0a8 01c8 E..<…………
0x0010 c0a8 0164 0000 e1c3 0300 7889 3031 3233 ……….x.0123
0x0020 3435 3637 3839 6162 6364 6566 6768 696a 456789abcdefghij
0x0030 6b6c 6d6e 6f70 7172 7374 7576 клмнопкрстув

Давайте быстро вспомним, что представляют собой метрики, показанные выше. Из первой строки слева у нас есть метка времени, отмеченная принимающим компьютером. Затем исходный адрес и исходный порт. Далее следует адрес назначения и порт назначения. Фактическое сообщение ICMP, указанное в ASCII. Затем у нас есть значение ttl, идентификационный номер, присвоенный сообщению об ошибке ICMP, и общая длина пакета.

Итак, давайте теперь посмотрим на заголовок ICMP-пакета и пройдемся по значениям. Они подчеркнуты, как видно на пакете выше.

0000

Первые два байта, показанные выше, относятся к полю типа и кода в заголовке пакета ICMP. Если вы перейдете к нижней части шпаргалки TCP/IP, которую я рекомендовал вам загрузить, вы увидите раздел для PING (Echo/Echo Reply). Затем 00 означает, что это эхо-ответ, и следующий байт 00 превращается в кодовое значение. Тогда кодовое значение 00 должно быть 00. Другие шестнадцатеричные значения — это то, что отправляется в полезной нагрузке ASCII, т. е.: x.0123456 и т. д., как показано в ASCII. На этом мы завершаем эту статью, а в последней части мы рассмотрим другие типы сообщений об ошибках ICMP на уровне пакетов и объясним, что они на самом деле означают. До тех пор!