Шрифт:
7.2.3 Входящие сообщения ICMP
Что происходит при получении хостом сообщения ICMP? Рассмотрим пример, когда производится попытка обращения по зарезервированному (и, следовательно, недостижимому) адресу сети:
Произошло то, что и должно было произойти,— в сообщении указано на недостижимость хоста (Host is unreachable).
Чтобы определить, какой из маршрутизаторов послал сообщение ICMP, можно использовать команду traceroute:
Маршрутизатор New York послал сообщение Destination Unreachable, которое отображается на экране как !Н.
Функции traceroute основаны на ICMP-сообщении Time Expired и формируются следующим образом:
■ Создается короткое сообщение UDP, которое имеет заголовок IP с установленным в 1 полем TTL.
■ Трижды отправляется датаграмма.
■ Первый маршрутизатор (в примере — nomad-gateway) устанавливает значение Time-to-Live (время жизни) в 0, отбрасывает датаграмму и отправляет источнику ICMP-сообщение Time Expired.
■ Функция traceroute идентифицирует пославший сообщение маршрутизатор и трижды выводит само сообщение.
■ Значение Time-to-Live устанавливается в 2, и сообщение посылается дальше.
■ Процесс повторяется с увеличением Time-to-Live на каждом шаге.
Если можно достичь точки назначения, то в итоге можно получить полный путь до него.
7.3 Когда не нужно посылать сообщение ICMP
Напомним, что ICMP-сообщение об ошибке посылается, когда в сети не все благополучно. Важно обеспечить, чтобы трафик ICMP не перегружал сети, делая ситуацию еще хуже. Для этого протокола, требуется ввести несколько очевидных ограничений. ICMP не должен формировать сообщения о:
■ Маршрутизации и доставке ICMP-сообщений messages
■ Широковещательных и многоадресных датаграммах
■ Фрагментах датаграмм, кроме первых
■ Сообщениях, чей адрес источника не идентифицирует уникальный хост (например, IP-адреса источников 127.0.0.1 или 0.0.0.0)
7.4 Формат сообщения ICMP
Сообщение ICMP переносится в части данных датаграммы IP. Каждое сообщение ICMP начинается тремя одинаковыми полями: полем типа (Type), полем кода (Code), обеспечивающим более подробное описание ошибки, и полем контрольной суммы (Checksum). Формат оставшейся части сообщения определяется типом сообщения.
Сообщение об ошибке ICMP обрамляется заголовком IP. Добавляются первые 8 октетов датаграммы, которая привела к ошибке. Эти сведения позволяют проанализировать причину ошибки, поскольку содержат информацию о предполагаемом назначении датаграммы и целевом протоколе четвертого уровня. Дополнительные 8 байт позволяют определить коммуникационный элемент приложения (более подробно об этом см. в разделе о протоколах TCP и UDP).
В сообщение включается и контрольная сумма ICMP, начиная от поля Type.
7.4.1 Сообщение Destination Unreachable
Существует много причин прекращения доставки датаграммы. Разорванная связь физически не позволит маршрутизатору достичь подсети назначения или выполнить пересылку в точку следующего попадания. Хост назначения может стать недоступным при отключении его для проведения профилактики.
Как уже отмечалось в главе 6, современные маршрутизаторы имеют хорошие средства обеспечения безопасности. Они могут быть сконфигурированы для просмотра входящего в сеть трафика. При запрещении сетевым администратором доступа к точке назначения датаграмма также не может быть доставлена.
Рис. 7.4. Формат ICMP-сообщения Destination Unreachable
Формат сообщения Destination Unreachable показан на рис. 7.4. Поле Type (в нашем случае 3) идентифицирует именно этот тип сообщения. Поле Code отражает причину отправки сообщения. Полный список кодов этого поля представлен в таблице 7.2.
Таблица 7.2 Коды ошибок сообщения Destination Unreachable