Почему traceroute ожидает "Destination Unreachable" на последнем прыжке, а не "Echo Reply", когда он работает по UDP? - PullRequest
0 голосов
/ 04 марта 2019

Выдержка из раздела реализации на странице wikipedia для traceroute:

"... до тех пор, пока не будет достигнут пункт назначения и не вернет сообщение ICMP Destination Unreachable, если используются пакеты UDP, или сообщение ICMP Echo Reply, если ICMP Echoиспользуются сообщения. "

Это говорит о том, что на последнем прыжке traceroute ожидает ICMP" Destination Unreachable ", когда я ожидал использовать ICMP" Echo Reply ".

Я виделистория страницы, и она была изменена человеком по имени «Гай Харрис».Он говорит: «... Если вы используете пакеты UDP, как traceroute делает по умолчанию, последний переход возвращает ICMP Destination Unreachable (если вам не повезло отправить пакет UDP на порт с прослушивателем), а не ICMP EchoОтвет. "

Может кто-нибудь пролить свет на это?

Источник: https://en.wikipedia.org/wiki/Traceroute

1 Ответ

0 голосов
/ 05 марта 2019

Поскольку traceroute необходимо получить сообщение, когда дейтаграмма UDP достигла места назначения.

Traceroute работает следующим образом:

  1. Отправляет дейтаграмму UDP с TTLкак 1 к хосту назначения. Маршрутизатор считывает дейтаграмму, уменьшает TTL и отправляет обратно сообщение об превышении времени ICMP.
  2. Traceroute получает вышеуказанное сообщение и отправляет другую дейтаграмму UDP с TTL как 2. Маршрутизаторы в Интернете читаютэта датаграмма, каждый уменьшает TTL и, наконец, отправляет обратно сообщение об превышении времени ICMP.
  3. Вышеприведенные шаги продолжаются и, наконец, с TTL, равным N, UDP-датаграмма достигла хоста назначения.Тогда что должен вернуть хост?Он не может отправить обратно сообщение об превышении времени ICMP, как раньше - TTL не превышен.

Проект трассировки для отправки дейтаграммы UDP на порт хоста, и почти невозможно, чтобы порт прослушивался (например, 33435).Хост назначения получает дейтаграмму UDP, находит, что целевой порт дейтаграммы не прослушивается, а затем возвращает сообщение «Destination Unreachable» - точнее, «Port Unreachable».

Вот почему traceroute ожидает «Destination Unreachable»сообщение в последнем прыжке, чтобы определить, что дейтаграмма UDP уже достигла пункта назначения.

Кстати, если целевой порт случайно прослушивается на хосте назначения, это всего лишь сценарий, описанный Ги Харрисом: «если вы недостаточно неудачно, чтобы отправить пакет UDP на порт с прослушивателем "

...