7.2.3 Входящие сообщения ICMP

7.2.3 Входящие сообщения ICMP

Что происходит при получении хостом сообщения ICMP? Рассмотрим пример, когда производится попытка обращения по зарезервированному (и, следовательно, недостижимому) адресу сети:

> telnet 10.1.1.1

Trying 10.1.1.1 ...

telnet: connect: Host is unreachable

Произошло то, что и должно было произойти,— в сообщении указано на недостижимость хоста (Host is unreachable).

Чтобы определить, какой из маршрутизаторов послал сообщение ICMP, можно использовать команду traceroute:

> traceroute 10.1.1.1

traceroute to 10.1.1.1 (10.1.1.1), 30 hops max, 40 byte packets

> nomad-gateway (128.121.50.50) 2 ms 2 ms 2 ms

> liberty-gateway (130.94.40.250) 91 ms 11 ms 78 ms

> border2-hssi2-0.NewYork.mci.net (204.70.45.9) !H !H !H

Маршрутизатор 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 на каждом шаге.

Если можно достичь точки назначения, то в итоге можно получить полный путь до него.