Traceroute: Почему промежуточные узлы показывают более высокую задержку
Узнайте, почему traceroute показывает более высокую задержку на промежуточных узлах, чем на конечных пунктах. Изучите измерение времени кругового пути, асимметричную маршрутизацию и различия в сетевых путях.
Почему задержка до 17-го прыжка (hop) больше, чем задержка до конечного пункта назначения при трассировке маршрута?
Я выполнял трассировку маршрута до моего сервера в GCP, но результаты меня запутали. Как может общая задержка с моего ПК до сервера быть меньше, чем задержка до 17-го прыжка?
17-й прыжок показал задержки примерно 210мс, 220мс и 200мс, в то время как конечный пункт назначения показал задержки около 85мс, 80мс и 90мс.
Может кто-нибудь объяснить, почему происходит это явление и как это возможно?
Когда вы наблюдаете более высокую задержку на промежуточном хопе (17-й хоп с задержкой 210 мс) по сравнению с конечным пунктом назначения (85 мс), это распространенное и часто нормальное явление, вызванное тем, как traceroute измеряет время кругового пути (round-trip time) в сочетании с асимметричными маршрутами. Ключевое объяснение заключается в том, что traceroute измеряет полное время кругового пути до каждого хопа - включая как путь к этому маршрутизатору, так и обратный путь для сообщения ICMP “Time Exceeded” обратно к источнику. Эти пути могут быть совершенно разными, особенно когда существует асимметричная маршрутизация между прямым и обратным путями.
Содержание
- Как traceroute на самом деле измеряет задержку
- Асимметричная маршрутизация и её влияние
- Обработка сообщений ICMP и обратные пути
- Эффекты сетевой инфраструктуры
- Когда это нормально, а когда вызывает беспокойство
- Устранение этого явления
Как traceroute на самом деле измеряет задержку
Traceroute измеряет не только одностороннюю задержку - он измеряет полное время кругового пути (RTT) до каждого хопа на пути. Это фундаментальное понятие, которое объясняет кажущееся парадоксом явление, с которым вы столкнулись.
Вот как работает этот процесс:
- Увеличение TTL: Traceroute отправляет пакеты с возрастающими значениями TTL (Time To Live), начиная с TTL=1
- Превышение TTL: Когда маршрутизатор получает пакет с TTL=1, он уменьшает TTL до 0, отбрасывает пакет и отправляет обратно сообщение ICMP “Time Exceeded”
- Измерение кругового пути: Задержка, которую вы видите, включает в себя:
- Время для достижения этим маршрутизатором пакета-зонда
- Время для возврата сообщения ICMP “Time Exceeded” к вашему источнику
Как объясняет SanchitGurukul, “Увеличивая значение TTL пакетов и записывая ответы ICMP Time Exceeded от каждого маршрутизатора на пути, traceroute предоставляет подробную карту сетевого пути и измеряет время кругового пути для каждого хопа.”
Это означает, что когда вы видите 210 мс на 17-м хопе, вы измеряете:
- Время для вашего пакета, чтобы достичь маршрутизатора №17
- ПЛЮС время для ответа ICMP от маршрутизатора №17, чтобы вернуться к вам
Но когда вы видите 85 мс до конечного пункта назначения, вы измеряете:
- Время для вашего пакета, чтобы достичь сервера GCP
- ПЛЮС время для ответа от сервера GCP, чтобы вернуться к вам
Асимметричная маршрутизация и её влияние
Асимметричная маршрутизация является основной причиной этого явления. Она возникает, когда путь от источника к пункту назначения отличается от пути от пункта назначения обратно к источнику.
Согласно технической документации Lumen, “В обратном пути сообщения о превышении TTL могут следовать по другим путям, чем зонды в средах с асимметричной маршрутизацией (например, в интернете).”
Вот что это означает в вашем сценарии:
- Прямой путь к хопу №17: Ваши пакеты могут следовать относительно прямым или быстрым маршрутом
- Обратный путь от хопа №17: Сообщения ICMP “Time Exceeded” могут следовать совершенно другим, более длинным маршрутом обратно к вам
- Прямой путь к конечному пункту назначения: Ваши пакеты к GCP могут следовать одному оптимальному маршруту
- Обратный путь от конечного пункта назначения: Ответы от GCP могут следовать другому, но все еще эффективному маршруту обратно
Руководство NANOG подчеркивает этот момент: “Не только обратный путь скрыт, но он может быть совершенно другим на каждом хопе в прямом пути.”
Обработка сообщений ICMP и обратные пути
Сообщения ICMP “Time Exceeded” сами по себе могут испытывать задержки, которые не влияют на ваш фактический трафик данных:
-
Приоритетная обработка: Некоторые маршрутизаторы понижают приоритет ICMP-трафика по сравнению с обычными пакетами данных, как отмечено в обсуждении Reddit HomeNetworking
-
Затраты на обработку: Генерация и отправка ICMP-сообщений добавляет время обработки на каждом маршрутизаторе
-
Задержки в очередях: ICMP-сообщения могут испытывать разные задержки очередей, чем ваши фактические пакеты данных
Согласно Baeldung on Computer Science, “Когда первый маршрутизатор получает его, TTL достигает 0, и маршрутизатор отбрасывает пакет и отправляет обратно сообщение ICMP ‘Time Exceeded’ источнику.”
Эта обработка происходит на каждом хопе, и обратный путь для этих сообщений может значительно отличаться от вашего фактического пути данных.
Эффекты сетевой инфраструктуры
Несколько компонентов сетевой инфраструктуры могут создавать эти различия в задержке:
MPLS и туннелирование
MPLS-сети часто создают неожиданное поведение traceroute, потому что:
- Пакеты могут быть туннелированы через сеть
- ICMP-ответы могут приходить с дальнего конца туннелей, а не с промежуточных маршрутизаторов
- Это может создать впечатление, что задержка “скачет” через несколько хопов
Как объясняется в блоге School SysAdmin, “Маршрутизаторы MPLS-туннелей (P LSR) с настроенным ICMP-туннелированием в итоге будут ‘сообщать’ о многих RTT с дальнего конца туннеля.”
Балансировка нагрузки и мультипутевая маршрутизация
Когда сети используют балансировку нагрузки или мультипутевую маршрутизацию:
- Разные traceroute-зонды могут следовать по разным путям
- В документации Lumen отмечается, что “для traceroute возможно, что каждый пакет, будь то зонды или сообщение о превышении TTL, следует по пути, уникальному для других traceroute-пакетов”
Это изменение пути может вызывать непоследовательные показания задержки на разных хопах.
Различия в конфигурации маршрутизаторов
Разные маршрутизаторы могут иметь:
- Различные возможности обработки ICMP
- Разные политики управления очередями
- Асимметричное распределение пропускной способности в разных направлениях
Когда это нормально, а когда вызывает беспокойство
Не все случаи высокой задержки на промежуточных хопах указывают на проблемы. Вот как отличить нормальные ситуации от вызывающих беспокойство:
Нормальные ситуации
- Асимметричная маршрутизация распространена в интернете и облачных средах
- Периодическая высокая задержка на определенных хопах, которая не влияет на фактическую производительность приложений
- Последовательные паттерны, где одни и те же хопы показывают высокую задержку при множественных тестах
- Задержка до конечного пункта назначения остается низкой и стабильной
Ситуации, вызывающие беспокойство
- Последовательно высокая задержка на одном и том же хопе при множественных traceroute
- Потеря пакетов appearing на промежуточных хопах
- Паттерны нарастания задержки, которые указывают на перегрузку
- Деградация фактической производительности приложений несмотря на “хорошую” задержку до конечного пункта назначения
Согласно TelcoNotes, “если в этом звене не обнаружено проблем, то это может быть сложный случай асимметричной маршрутизации, где путь маршрутизации от источника к пункту назначения отличается от обратного пути (от пункта назначения обратно к источнику).”
Устранение этого явления
Если вы хотите провести дальнейшее расследование или подтвердить, влияет ли эта асимметричная маршрутизация на ваш фактический трафик:
Альтернативные методы тестирования
- Тесты ping: Запустите
pingкак к промежуточным хопам, так и к конечному пункту назначения для сравнения односторонней задержки - MTR (My TraceRoute): Используйте
mtr, который обеспечивает непрерывное тестирование и лучший статистический анализ - Двунаправленное тестирование: Выполните traceroute с обоих концов соединения
Анализ сети
- Проверка на асимметрию: Сравните прямые и обратные traceroute
- Мониторинг производительности приложений: Если ваши фактические приложения работают нормально, аномалия traceroute, вероятно, является лишь артефактом измерения
- Использование нескольких путей: Тестируйте в разное время и из разных мест
Как предлагается на ServerFault, “Инструменты вроде mtr и traceroute измеряют только (обратную) задержку для конкретного зонда, который был отправлен к каждому промежуточному хопу в момент отправки - они не могут дать точную задержку для каждого такого пути.”
Заключение
Явление, которое вы наблюдаете - более высокая задержка на промежуточном хопе по сравнению с конечным пунктом назначения - обычно вызывается:
- Круговой природой traceroute: Он измеряет как прямой, так и обратный пути, которые могут быть совершенно разными
- Асимметричной маршрутизацией: Путь к промежуточным хопам может значительно отличаться от обратного пути
- Обработкой сообщений ICMP: Ответы ICMP “Time Exceeded” могут следовать по разным маршрутам и испытывать разные задержки
- Эффектами сетевой инфраструктуры: MPLS-туннели, балансировка нагрузки и конфигурации маршрутизаторов могут создавать эти различия
В большинстве случаев, особенно когда фактическая производительность вашего приложения к серверу GCP хороша, это является нормальным артефактом измерения, а не проблемой сети. Ключевым является сосредоточение на метриках фактической производительности вашего приложения, а не слишком беспокоиться о задержках на промежуточных хопах в выводе traceroute.
Источники
- How traceroute works | Lumen
- A Practical Guide to (Correctly) Troubleshooting with Traceroute | NANOG
- How to Troubleshoot High Latency with Traceroute Command | TelcoNotes
- Traceroute Operation: A Detailed Analysis of Path and Transit Delays | SanchitGurukul
- The Limitations of Traceroute/Tracert | Baeldung on Computer Science
- MPLS causes some weird effects - aka Why is traceroute so much slower than ping for some hops? | School SysAdmin
- Can someone help me in understanding traceroute hops and why some routers in the middle have longer ms than the destination? | Reddit r/HomeNetworking
- Does traceroute/MTR results in the same overall latency from src and dest direction and vice versa? | Server Fault