Книга: TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security)
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 на каждом шаге.
Если можно достичь точки назначения, то в итоге можно получить полный путь до него.