Понимание протокола ICMP (часть 2)
Понимание протокола ICMP (часть 1)»
Что ж, теперь мы знаем, что ICMP на самом деле является очень важным протоколом по большому счету. Без него мы бы никогда не узнали, что произошло в случае ошибки, обнаруженной нашими пакетами в сети или в Интернете, если уж на то пошло. Вот почему ICMP является одним из четырех основных протоколов. Именно по этой причине все реализации стека TCP/IP содержат эти четыре основных протокола. Они необходимы для того, чтобы операционная система функционировала и эффективно взаимодействовала. Без них компьютеры не работали бы, а Интернет не был бы таким, каким мы его знаем сегодня.
В этой связи, как насчет того, чтобы взглянуть на некоторые другие сообщения об ошибках ICMP, с которыми мы, вероятно, столкнемся. Encounter, то есть, если бы вы прослушивали ваше соединение и тем самым собирали пакеты.
Никто не слушает
Мы знаем, что если вы отправите пакет TCP/IP на порт, который не прослушивается службой, вы получите обратно пакет RST. Это дает вам понять, что там нет службы. Что произойдет, если вы отправите пакет UDP/IP на порт, который не прослушивает служба на основе UDP? Что-то совершенно другое, чем то, что происходит с соединением на основе TCP. Давайте посмотрим на пакет ниже для объяснения того, что происходит.
00:00:05.579927 192.168.1.100 > 192.168.1.200: icmp: 192.168.1.100 udp порт 64032 недоступен (DF) (ttl 50, id 64521, длина 56)
0x0000 4500 0038 fc09 4000 3201 97fc c0a8 0164 [электронная почта защищена]….'Z.
0x0010 c0a8 01c8 0303 01c9 0000 0000 4500 00f2 …………E…
0x0020 d385 4000 f011 01b6 c0a8 0164 c0a8 01c8 [электронная почта защищена]……….'Z.
0x0030 0035 fa20 00de 0000.5……
Когда вы отправляете пакет на основе UDP на порт, такой как порт 53 (протокол DNS прослушивает порт 53), но там ничего нет, компьютер назначения сгенерирует пакет на основе ICMP. Пакет будет выглядеть примерно так же, как и выше. Пришло время понять, что UDP и ICMP имеют своего рода симбиотические отношения. В то время как TCP будет иметь пакеты RST и отправлять их обратно, UDP, однако, будет вместо этого иметь сообщения об ошибках ICMP. Эти сообщения будут указывать, что случилось с отправленным пакетом.
Так что же на самом деле означает «udp порт 64032 недоступен»? Что ж, это означает, что на целевом компьютере на самом деле не запущена служба. Например, если номер порта назначения был 53, это будет означать, что на этом компьютере нет DNS-сервера. Вот как исходный компьютер узнает, что такой службы нет. Полученное сообщение об ошибке ICMP сообщит ему об этом.
Это все хорошо, но как это сообщение об ошибке ICMP сообщает компьютеру-источнику, какой именно пакет вызвал генерацию сообщения об ошибке ICMP? Это отличный вопрос. Способ работы ICMP заключается в том, что он будет использовать IP для его передачи, а за фактическим заголовком ICMP будет заголовок IP и первые восемь байтов транспортного протокола, который фактически вызвал ошибку. Я понимаю, что это немного запутанно, но, пожалуйста, посмотрите на пакет выше. Я подчеркнул часть, которая показывает исходный пакет, который вызвал сообщение об ошибке ICMP. Тот, в свою очередь, возвращается своему владельцу через IP и заголовок пакета ICMP.
Таким образом, когда исходный компьютер получает это сообщение об ошибке ICMP, он просматривает переносимый IP-заголовок, а также транспортный протокол. Вспомните, что в первых четырех байтах транспортного протокола находятся номера портов. Есть и источник, и место назначения. Таким образом, исходный компьютер может определить, какой именно процесс должен быть уведомлен об ошибке, например: порт 1124, и это эфемерный порт, который был назначен Internet Explorer, если он был запущен пользователем.
Теперь мы также можем точно определить тип сообщения об ошибке ICMP по типу и коду. Это видно в части пакета, выделенной жирным шрифтом выше. Это стандартный заголовок ICMP. Теперь обратитесь к шпаргалке по TCP/IP, чтобы разбить поля.
0303
Первый 03 относится к типу сообщения об ошибке ICMP, и в этом случае на листе указано, что это тип «Пункт назначения недоступен». За этим следует еще один 03, и он относится к коду «Порт недоступен». Пока все хорошо, так как это именно то, что пакеты говорят нам в ascii в части заголовка.
01c9
Это значение является контрольной суммой заголовка ICMP. Если вы помните, у каждого основного протокола есть поле контрольной суммы. Это вычисляется исходным компьютером, а затем пересчитывается конечным компьютером. В основном он используется для того, чтобы убедиться, что сам заголовок протокола не был поврежден на пути к месту назначения. Единственным исключением является UDP, который не должен использовать значение контрольной суммы в своем заголовке. Последние четыре байта, как показано 0000 0000, просто обнуляются, так как в заголовке нет ничего конкретного для сообщения.
Это в значительной степени завершает сообщение об ошибке назначения недоступно. Последнее, что мы рассмотрим, — это сообщение об ошибке «Фильтр, запрещенный администратором».
00:00:13.953415 192.168.1.100 > 192.168.1.200: icmp: хост 192.168.1.200 недоступен — фильтр запрещен администратором (ttl 255, id 57951, длина 56)
0x0000 4500 0038 e25f 0000 ff01 81e6 c0a8 0164 E..8._………a
0x0010 c0a8 01c8 030d fcf2 0000 0000 4500 001c..Y………E…
0x0020 30f2 0000 3a01 6848 c0a8 0164 c0a8 01c8 0…:.hH..Y…1.
0x0030 0800 6f16 a8c3 e025..o….%
Этот тип сообщения, по всей вероятности, был сгенерирован маршрутизатором. По всей вероятности, маршрутизатор с исходным IP-адресом назначения, показанным выше. Эта конфигурация будет выполнена администратором маршрутизатора, который, возможно, установил ACL, запрещающий попытки связи с рассматриваемого исходного IP-адреса. Это часто делают некоторые компании, если обнаруживают рецидивистов, пытающихся проникнуть в их сети. Они просто настроят ACL, запрещающий доступ к рассматриваемому IP. Это, в свою очередь, сгенерирует сообщение выше.
Еще раз я выделил жирным шрифтом заголовок ICMP и подчеркнул IP-адрес и протокол, которые IP передавал, когда была создана исходная ошибка. Можете ли вы выяснить, какой протокол следовал за заголовком IP в этом пакете? Я выделил жирным шрифтом первые два байта протокола. На самом деле это был эхо-запрос ICMP, который привел к тому, что маршрутизатор ответил НЕТ! мы не разрешаем принимать эхо-запросы ICMP. Именно поэтому мы увидели сообщение «фильтр запрещен администратором». Администратор настроил маршрутизатор на отклонение любых входящих пакетов эхо-запросов ICMP.
Что ж, как вы теперь видите, в протоколе ICMP на самом деле много всего. Существует множество других сообщений об ошибках ICMP, которые можно сгенерировать. Я бы посоветовал вам попробовать свои силы в создании пакетов. Это позволит вам применить теорию на практике. Таким образом, вы можете смоделировать различные состояния пакетов, а затем изучить отвечающие пакеты. Это отличный способ узнать больше о TCP/IP. На этой ноте я искренне надеюсь, что вы нашли эту статью полезной для себя, и я приветствую ваши комментарии. До следующего раза!
Понимание протокола ICMP (часть 1)»