Назад | Перейти на главную страницу

ICMP - TTL - Трассировка маршрута

Я задал этот вопрос на сайте Stack Overflow, а потом подумал, что это лучшее место для ответа.

Учитывая следующую ситуацию:

ПК --- | aa RTR1 bb | --- | aa RTR2 bb | --- | aa RTR3 bb | и т.д

Каждый из | aa rtr bb | предназначен для маршрутизатора с двумя портами aa и bb.

У меня такой вопрос. Когда вы выполняете трассировку маршрута с ПК, какой адрес порта маршрутизатора должен ответить сообщением о превышении времени жизни при передаче?

Я, кажется, помню, как меня учили думать о маршрутизаторе, как о том, что он находится в таком же количестве частей, как и порты, поэтому в моем сценарии, когда aa пересылает пакет на bb и уменьшает ttl до 0, это будет адрес порта aa в сообщение об ошибке. Я пытаюсь найти однозначный ответ.

Спасибо.

Не заходя слишком далеко как работает маршрутизация. Вы будете видеть ответы только от интерфейса, который «обращен» к вашей машине.

Итак, в вашем примере сообщение TTL Exceeded всегда будет приходить с одного из интерфейсов «aa». В основном логика, обрабатывающая пакет, происходит между двумя интерфейсами, и затем любой ответ или пересылка отправляется правильному интерфейсу. В вашем случае сообщение о превышении TTL будет отправлено из «aa», потому что это единственный способ вернуться на вашу машину.

Окончательный ответ, может быть, и нет, но он присутствует во всех тестах, которые я проводил. Я думаю, что маршрутизатор не может маршрутизировать, поскольку TTL равен нулю, поэтому перед маршрутизацией отправляется пакет ICMP. Итак, это первый IP-адрес, найденный на пути.

«Ответит ли RTR1 адрес порта aa или адрес порта bb»

Это совершенно произвольный и несколько глупый вопрос.

Рассмотрим случай, когда ICMP поступает через порт «aa», но на самом деле нацелен на адрес порта «bb»: какой из них должен быть адресом отправителя в ответе ICM? 'аа'? 'BB'? или какой другой адрес у роутера?

»Представьте, что маршрутизатор состоит из множества частей и портов»

Узлы (туристические или компьютеры) не имеют адресов в проекте TCP, только интерфейсы имеют адреса, но ICMP выполняется узлами, а не интерфейсами. Это открывает множество двусмысленностей. На самом деле они преднамеренные. Обратите внимание, что стек TCP / IP Linux имеет несколько иной дизайн, но он отклоняется.

Как указывали другие, большую часть времени маршрутизаторы будут отвечать через интерфейс «aa». Поскольку я пока не могу оставлять комментарии, я дополню предыдущие ответы здесь. Также возможно иметь ненумерованные интерфейсы на двухточечных соединениях между маршрутизаторами, если вы хотите сохранить некоторые IP-адреса, и вас не интересует проверка интерфейсов отдельно. В этом случае вы можете получить доступ к маршрутизатору по IP-адресу, назначенному интерфейсу обратной связи, и этот адрес будет тем адресом, который вы также увидите в traceroutes.

Однако это исключительный случай, а не особенно хорошая эксплуатационная практика.