url image

Как правильно интерпретировать результаты traceroute или MTR

Чтобы определить, через какие маршрутизаторы прошёл пакет, следуя от вас к заданному IP-адресу, можно использовать инструменты traceroute и My Traceroute (MTR) помогут определить.

Traceroute — достаточно простой инструмент, который позволяет выполнить одну проверку за раз, в то время как MTR может запускать и агрегировать результаты нескольких traceroute. Если вам просто нужно найти маршрутизаторы, через которые проходит пакет, достаточно traceroute. Если же нужно диагностировать потерю пакетов — используйте MTR.

В этой статье мы рассмотрим трассировку на примере вывода MTR, поскольку данный инструмент более универсален.

Типы трассировки

Traceroute и MTR поддерживают разные типы трассировки. Два основных: 

  • протокол пользовательских датаграмм (UDP)  
  • и протокол межсетевых управляющих сообщений (ICMP).

Оба типа отправляют серию пакетов с постепенно увеличивающимся значением Time to Live (TTL). Идея заключается в том, что если отправить пакет с TTL=1, то он будет отклонён на первом маршрутизаторе в сети и вы получите сообщение об ошибке ICMP «Time-to-live exceeded». Затем отправляем пакет с TTL=2, и он отклоняется на втором маршрутизаторе — и так далее. Таким образом, мы используем исходный IP-адрес и тайминги сообщений о превышении времени TTL для построения нашего списка путей.

Некоторые маршрутизаторы не будут отправлять сообщения о превышении времени TTL для UDP, ICMP или обоих. По опыту автора, ICMP — более надёжный тип трассировки, поэтому лучше начать с него. Чтобы воспользоваться ICMP, вызовите команду traceroute с ключом traceroute -I. Для MTR ICMP обычно используется по умолчанию, поэтому ключ не требуется.

Поля MTR

Вывод команды MTR выглядит примерно так:

My traceroute  [v0.92]

home (62.3.100.24)                                  2022-03-17T18:20:20+0000

Keys:  Help   Display mode   Restart statistics   Order of fields   quit

                                       Packets               Pings

 Host                                Loss%   Snt   Last  Avg  Best  Wrst StDev

 1. 62-3-100-30.dsl.in-addr.zen.co.u  0.0%    5    0.6   0.6   0.5   0.6   0.0

 2. ???

 3. lag-8.p2.thn-lon.zen.net.uk       0.0%    5   12.3  12.3  12.2  12.5   0.1

 4. lag-2.br1.thn-lon.zen.net.uk      0.0%    5   12.3  12.3  12.0  12.5   0.2

 5. 72.14.223.28                      0.0%    5   12.9  12.8  12.4  12.9   0.2

 6. 209.85.249.149                    0.0%    5   13.4  13.7  13.3  14.2   0.4

 7. 142.251.54.27                     0.0%    5   12.0  11.8  11.4  12.0   0.2

 8. dns.google                        0.0%    4   12.1  11.8  11.6  12.1   0.2

 

Вы увидите:

  • Имя хоста или IP-адрес конкретного прыжка в сети (запустите mtr -n, если вы не хотите, чтобы он преобразовывал IP-адрес в имя хоста).
  • Процент пакетов, потерянных этим прыжком.
  • Количество пакетов, отправленных во время прыжка.
  • Время в пути туда и обратно (то есть сколько времени потребовалось, чтобы получить ответ).
  • Среднее, лучшее, худшее и стандартное отклонение времени с момента запуска MTR.

MTR прыжки

В приведенном выше выводе MTR вы видите восемь прыжков. Второй прыжок отображает хост как «???». Это потому что он не отправил сообщение о превышении времени TTL в ответ.

Это не редкость, и не о чем беспокоиться, если недостающие прыжки находятся в середине пути. Так как трассировка продолжилась после этого прыжка, это не проблема.

Если все хосты находятся в конце, это может указывать на проблему (то есть на 100% потерю пакетов с этой точки). Либо может просто означать, что ни один из последних прыжков не отправляет сообщения с превышенным временем TTL. Трудно сказать.

DNS-имена MTR прыжков

DNS-имена, отображаемые MTR, могут быть очень информативными. Многие крупные провайдеры помещают информацию о своих маршрутизаторах в DNS-имя. В приведенном выше примере вы увидите lag-2.br1.thn-lon.zen.net.uk. Скорее всего, это интерфейс агрегации каналов 2 на маршрутизаторе br1 в центре обработки данных Telehouse North в Лондоне, Великобритания. Таким образом, мы начинаем понимать, какой физический путь по всему миру проходит пакет.

Посмотрите на приведенный ниже вывод MTR:

                             My traceroute  [v0.92]

home (62.3.100.24)                                   2022-03-17T18:32:05+0000

Keys:  Help   Display mode   Restart statistics   Order of fields   quit

                                       Packets               Pings

 Host                                Loss%   Snt  Last  Avg  Best  Wrst  StDev

 1. 62-3-100-30.dsl.in-addr.zen.co.u  0.0%   18   0.5   0.5   0.4   0.9   0.1

 2. ???

 3. lag-8.p2.thn-lon.zen.net.uk       0.0%   18  12.1  12.3  11.9  12.7   0.2

 4. lag-2.br1.thn-lon.zen.net.uk      0.0%   18  12.1  12.6  11.9  15.5   1.0

 5. ge-3-3-0.mpr1.lhr3.uk.above.net   0.0%   18  11.9  12.3  11.7  13.7   0.6

 6. ae10.cs3.lhr11.uk.zip.zayo.com   88.2%   18  83.5  83.7  83.5  83.9   0.3

 7. ae5.cs1.lga5.us.eth.zayo.com      0.0%   18  82.9  83.8  82.7  90.4   1.8

 8. ae8.mpr3.bos2.us.zip.zayo.com     0.0%   18  87.3  83.6  82.6  87.3   1.5

 9. ???

10. ???

11. http-lb-02.us.cloudcall.com       0.0%   17  88.8  90.0  88.3  92.1   1.2

Мы видим, что пакет проходит через:

  • Zen in London Telehouse North
  • Zayo / AboveNet в Лондоне (многие провайдеры любят использовать коды аэропортов для определения местоположения маршрутизатора: LHR — Лондон Хитроу)
  • Zayo в Нью-Йорке
  • Zayo в Бостоне

Это также означает, что пункт назначения, вероятно, является клиентом Zayo, но мы не можем сказать наверняка, так как прыжки 9 и 10 пусты.

Потеря пакетов и время в пути

В приведенном выше примере вы видите, что у восьмого прыжка (ae10.cs3.lhr11.uk.zip.zayo.com ) показатель потери пакетов — 88,2%. Это плохо, правда? На самом деле нет. Потеря пакетов и увеличение времени в пути (RTT) на одном прыжке ожидаемы, если этот прыжок ограничивает скорость, с которой  отправляет сообщения ICMP о превышении времени TTL.

Ключевая вещь, которую многие люди не понимают в MTR или traceroute, заключается в следующем: если потеря пакетов или увеличение RTT не наблюдаются при каждом прыжке между данным прыжком и концом пути — это не проблема.

Возьмем, к примеру, такой маршрут трассировки:

ХОСТ: localhost Loss% Snt Last Avg Best Wrst StDev

 1. 63.247.74.43 0.0% 10 0.3 0.6 0.3 1.2 0.3

 2. 63.247.64.157 0.0% 10 0.4 1.0 0.4 6.1 1.8

 3. 209.51.130.213 60.0% 10 0.8 2.7 0.8 19.0 5.7

 4. aix.pr1.atl.google.com 60,0% 10 6,7 6,8 6,7 6,9 0,1

 5. 72.14.233.56 50.0% 10 7.2 8.3 7.1 16.4 2.9

 6. 209.85.254.247 40.0% 10 39.1 39.4 39.1 39.7 0.2

 7. 64.233.174.46 40.0% 10 39.6 40.4 39.4 46.9 2.3

 8. gw-in-f147.1e100.net 40,0% 10 39,6 40,5 39,5 46,7 2,2

Мы видим, что на 3-м прыжке происходит 60% потери пакетов, и эта потеря сохраняется до конца пути и в итоге составляет 40%. Это означает, что прыжок 3, возможно (см. раздел ниже о прямом и обратном пути), приводит к потере пакетов, а общая потеря между вами и пунктом назначения составляет 40%. Остальные 20% можно игнорировать.

Чему мы можем научиться у RTT

RTT каждого прыжка — полезная метрика, потому что говорит нам, сколько времени потребовалось пакету, чтобы добраться до этого прыжка и обратно. Возьмём такой вывод MTR:

                                      My traceroute  [v0.92]

home (62.3.100.24)                                                2022-03-17T18:57:17+0000

Keys:  Help   Display mode   Restart statistics   Order of fields   quit

                                                         Packets               Pings

 Host                                                  Loss%   Snt   Last   Avg  Best  Wrst StDev

 1. 62-3-100-30.dsl.in-addr.zen.co.uk                   0.0%     7    0.5   0.6   0.5   0.8   0.1

 2. ???

 3. lag-8.p1.thn-lon.zen.net.uk                         0.0%     7   12.2  15.8  12.2  25.2   6.2

 4. lag-1.br1.thn-lon.zen.net.uk                        0.0%     7   12.3  12.9  12.1  16.4   1.6

 5. ldn-b3-link.ip.twelve99.net                         0.0%     6   12.1  12.7  12.0  15.6   1.4

 6. ldn-bb4-link.ip.twelve99.net                        0.0%     6   12.2  12.3  11.9  12.9   0.4

 7. nyk-bb1-link.ip.twelve99.net                        0.0%     6   84.5  84.5  84.3  84.7   0.2

 8. nyk-b2-link.ip.twelve99.net                         0.0%     6   81.7  81.7  81.6  81.9   0.1

 9. choopa-svc071182-lag000971.ip.twelve99-cust.net     0.0%     6   88.5  86.9  81.3  95.9   6.5

10. ???

Мы видим, что RTT резко возрастает между прыжками 6 и 7. По DNS-именам мы видим, что 6-й узел находится в Лондоне, Великобритания, тогда как 7-й — в Нью-Йорке, США. Таким образом, можно ожидать значительного увеличения RTT в этот момент, которое, как мы предполагаем, будет продолжаться до конца пути.

Помните: если потеря пакетов или увеличение RTT не наблюдаются при каждом прыжке между данным прыжком и концом пути — это не проблема.

Это полезно, потому что если бы не было очевидно, что узел 6 находится в Великобритании, а 7 — в США, то мы не смогли бы ясно увидеть, где пакет пересёк Атлантику.

Если мы знаем, что и источник, и пункт назначения находятся в Великобритании, и видим значительное увеличение RTT между данным прыжком и концом пути — значит, что-то не так. Возможно, это действительно долгий путь (например, в США и обратно) или какой-то конкретный прыжок приводит к задержке.

Примечание о MPLS

Вы можете посмотреть на трассировку между Великобританией и Австралией и увидеть, что пакет покидает Великобританию на 5-м пряжке, а затем прибывает в Австралию на 6-м. На самом деле, это почти наверняка не происходит непосредственно между этими двумя точками. В середине — многопротокольная сеть переключения меток (MPLS), которая в некоторой степени скрывает путь. Это не имеет значения, как если бы вы были уверены, что узел Zayo создает проблемы — неважно, находится ли он в Лондоне или Лас-Вегасе, это все равно проблема Zayo.

Забавный совет: вы можете нажать e во время работы MTR, чтобы увидеть метки MPLS из некоторых прыжков:

                                      My traceroute  [v0.92]

home (62.3.100.24)                                                       2022-03-17T19:08:05+0000
Keys:  Help   Display mode   Restart statistics   Order of fields   quit

                                                         Packets               Pings

 Host                                                  Loss%   Snt   Last   Avg  Best  Wrst StDev

 1. 62-3-100-30.dsl.in-addr.zen.co.uk                   0.0%    74    0.4   0.5   0.4   0.8   0.1
 2. ???
 3. lag-8.p2.thn-lon.zen.net.uk                         0.0%    74   12.6  13.7  12.0  32.0   3.4
    [MPLS: Lbl 24012 Exp 0 S 1 TTL 1]
 4. lag-2.br1.thn-lon.zen.net.uk                        0.0%    74   17.7  14.2  11.8  35.4   4.4
 5. bbr02.lon01.networklayer.com                        0.0%    74   12.1  13.5  11.7  30.0   3.2
 6. ae5.cbs01.tg01.lon01.networklayer.com              64.4%    74   12.8  15.1  12.6  21.3   2.9
    [MPLS: Lbl 205039 Exp 0 S 1 TTL 1]
 7. ae0.cbs01.xn01.fra01.networklayer.com              41.1%    74   26.7  25.3  23.4  43.4   3.4
    [MPLS: Lbl 126402 Exp 0 S 1 TTL 1]
 8. ae0.cbs02.ic01.mil02.networklayer.com               1.4%    74   32.5  35.7  32.5  61.2   5.4
    [MPLS: Lbl 809963 Exp 0 S 1 TTL 1]
 9. ae7.cbs01.ic01.mil02.networklayer.com              21.9%    73   34.9  35.4  32.6  65.7   5.4
    [MPLS: Lbl 288384 Exp 0 S 1 TTL 1]
10. 61.13.2da9.ip4.static.sl-reverse.com               30.1%    73  242.4 244.3 242.3 254.7   2.6
    [MPLS: Lbl 423005 Exp 0 S 1 TTL 1]
11. af.13.2da9.ip4.static.sl-reverse.com                0.0%    73  242.3 244.1 241.8 257.6   3.7
    [MPLS: Lbl 499542 Exp 0 S 1 TTL 1]
12. cb.12.6132.ip4.static.sl-reverse.com                0.0%    73  242.8 244.1 242.5 254.5   2.5
13. po2.fcr01.sr03.sng01.networklayer.com              30.1%    73  261.2 277.6 260.8 547.7  52.5
14. sip3.nexmo.com                                      0.0%    73  242.4 243.4 242.1 258.0   2.5

Понимание прямого и обратного пути

Путь, по которому пакет проходит между A и B, часто не совпадает с путем, по которому он проходит между B и A. Таким образом, если вы пингуете определенный IP-адрес, то ваш ping (echo request), скорее всего, будет идти по другому пути, нежели ответ (echo reply).

Это означает, что когда вы используете MTR или traceroute и видите потерю пакетов, начиная с конкретного прыжка — это не обязательно тот прыжок, который привёл к проблеме. Представьте себе путь, который выглядит следующим образом:

Вы (Zen ISP) -> Zayo (крупный транзитный провайдер) -> Amazon Web Services

В вашей трассировке вы видите 40%-ную потерю пакетов где-то на краю сети AWS. Вы не видите никаких потерь в Zen или Zayo ... Так что проблема должна быть в AWS, верно?

Нет. AWS может использовать другой путь, чтобы связаться с вами из своей сети. Может быть, это:

AWS -> NTT (другой крупный транзитный провайдер) -> You (Zen ISP).

Возможно, ваш пинг-пакет попал в AWS и это были, по сути, ответные пакеты, которые теряются где-то внутри NTT.

Единственный способ узнать наверняка — пройти трассировку с обоих концов (то есть трассировать от вас до пункта назначения и снова от пункта назначения до вашего IP-адреса). Это не всегда возможно, если целью является чужой веб-сайт.

На самом деле, в приведенном выше случае проблема все еще в AWS. У них есть контракт с NTT, NTT не работает, AWS должен поговорить с NTT. В некоторых других случаях, когда используется «settlement-free» (то есть бесплатный) пиринг, например, в точках обмена трафиком, это может быть политически сложно, поскольку ни у кого нет контракта или соглашения о поддержке, к которому можно было бы прибегнуть, когда что-то не работает.

 

Перевод статьи How to properly interpret a traceroute or MTR

Этот материал был полезен?