Насколько я понял, Tracert работает, отправляя 3 эхо-сообщения ICMP. Начиная со значения TTL, равного 1. Для каждого маршрутизатора, с которым встречается пакет, значение TTL будет уменьшено. Для 1-го маршрутизатора 1-1 = 0, поэтому сообщение ICMP «время истекло» будет отправлено обратно на машину отправителя. Затем значение TTL будет увеличено до 2 машиной-отправителем, и цикл будет повторяться для 2-го маршрутизатора (2 -> 1 -> 0) и так далее.
Пожалуйста, поправьте меня, если мое понимание ошибочно.
Мне любопытно, почему сообщение ICMP «Превышено время» не отображается Tracert в командной строке, поскольку на самом деле это сообщение об ошибке? Цикл просто продолжается.
Спасибо.
«Сообщение об ошибке» (которое на самом деле не является ошибкой, а представляет собой вежливую информацию) не отображается, потому что оно не отправляется на stderr через tracert
. Я не вижу, какую возможную ценность может извлечь программа, отправляющая посторонние сообщения об ошибках, когда она ожидает и правильно обрабатывает данные.
Остальная часть вашего объяснения верна.
Сообщение «time exceeded» «error», как вы выразились, отображается tracert как количество мсек, которое потребовалось для возврата этой ошибки. Эта ошибка является доказательством того, что 1-й, 2-й, 3-й и т. Д. Маршрутизатор получил пакет и имеет на нем адрес этого маршрутизатора, поэтому tracert знает путь, по которому проходят пакеты. Это когда они не вернись, ты получишь *
напечатаны и Request timed out
как адрес этого маршрутизатора.