Por que o traceroute mostra vários caminhos, mas o mtr não?

1

Eu sei que as redes usam vários caminhos; eles aparecem no traceroute, mas não no mtr. O mtr está de alguma forma se prendendo ao primeiro caminho? O que é dong?

$ traceroute google.com
traceroute to google.com (216.58.210.46), 30 hops max, 60 byte packets
 1  gateway (172.16.9.1)  1.303 ms  1.332 ms  1.421 ms
 2  host-92-31-0-1.as13285.net (92.31.0.1)  14.965 ms  15.810 ms  16.978 ms
 3  xe-11-2-0-bragg001.bre.as13285.net (78.151.225.39)  19.456 ms  20.785 ms  23.052 ms
 4  host-78-151-225-14.static.as13285.net (78.151.225.14)  24.255 ms host-78-151-229-20.as13285.net (78.151.229.20)  25.979 ms host-78-151-225-18.static.as13285.net (78.151.225.18)  27.059 ms
 5  host-78-144-8-57.as13285.net (78.144.8.57)  33.513 ms host-78-144-12-213.as13285.net (78.144.12.213)  35.825 ms host-78-144-10-37.as13285.net (78.144.10.37)  35.374 ms
 6  72.14.214.222 (72.14.214.222)  38.005 ms 72.14.242.127 (72.14.242.127)  35.820 ms 72.14.214.222 (72.14.214.222)  34.968 ms
 7  216.239.54.251 (216.239.54.251)  37.260 ms 64.233.174.83 (64.233.174.83)  22.876 ms 216.239.54.251 (216.239.54.251)  25.085 ms
 8  108.170.232.105 (108.170.232.105)  25.606 ms 108.170.232.103 (108.170.232.103)  27.050 ms  28.886 ms
 9  lhr25s11-in-f46.1e100.net (216.58.210.46)  29.601 ms  30.552 ms  31.896 ms
$ mtr --report google.com
Start: Wed Oct 26 11:07:33 2016
HOST: localhost.localdomain       Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- gateway                    0.0%    10    1.2   1.6   1.1   2.7   0.5
  2.|-- host-92-31-0-1.as13285.ne  0.0%    10   16.8  15.3  14.0  18.3   1.2
  3.|-- xe-11-2-0-bragg001.bre.as  0.0%    10   19.2  16.5  14.9  19.2   1.1
  4.|-- host-78-151-225-30.static  0.0%    10   16.3  16.2  15.7  16.6   0.0
  5.|-- host-78-144-12-147.as1328  0.0%    10   23.1  23.1  22.3  25.2   0.7
  6.|-- 72.14.242.127              0.0%    10   23.3  23.9  23.0  26.1   1.0
  7.|-- 216.239.54.251             0.0%    10   22.5  22.8  21.9  25.3   0.8
  8.|-- 108.170.232.105            0.0%    10   22.1  22.5  22.0  23.2   0.0
  9.|-- lhr25s11-in-f46.1e100.net  0.0%    10   23.3  23.4  22.7  24.3   0.0
    
por sourcejedi 26.10.2016 / 14:34

1 resposta

1

Na verdade, o traceroute no Linux moderno tem opções que combinam com o comportamento mtr (e vice-versa). Podemos ver que isso é apenas uma questão de padrões.

traceroute foi o original. Os detalhes do método original podem ser inferidos do documentação , mas não foi considerado necessário explicá-lo. Como o traceroute do Linux adicionou várias opções, as diferenças são descritas.

default

The traditional, ancient method of tracerouting. Used by default.

Probe packets are udp datagrams with so-called "unlikely" destination ports. The "unlikely" port of the first probe is 33434, then for each next probe it is incremented by one.

icmp

Most usual method for now, which uses icmp echo packets for probes. If you can ping(8) the destination host, icmp tracerouting is applicable as well.

O padrão de

mtr parece ser icmp, o "método mais comum para agora".

Conclusão

Espera-se que o roteamento de vários caminhos

mantenha os pacotes da mesma conexão no mesmo caminho. Isso evita a entrega fora de ordem, o que pode ser bastante indesejável. Ele faz isso olhando o endereço e a porta da origem e do destino. (Juntamente com o protocolo. Esses valores são descritos como "5-tupla").

O padrão de% p_de% do

% altera a porta UDP de cada teste, então eles alteram os caminhos.

O padrão

traceroute usa o eco ICMP, que não possui um número de porta e, portanto, seus testes seguirão o mesmo caminho.

Se você solicitar o traceroute UDP ou TCP em mtr , os diferentes caminhos serão exibidos. Pode haver outras diferenças em comparação com mtr , mas a esse respeito acontece de se comportar de maneira semelhante.

Sidetrack: por que o icmp não foi usado?

Portanto, o Linux traceroute permanece fiel ao original, incluindo sua opção de modo padrão. Mas a razão para a escolha original não está totalmente clara.

Lembrei-me de ler traceroute :

commercial [IPv4] routers do not return enough information in icmp error messages. Probably, it will change, when they will be updated. For now [tracepath] uses Van Jacobson's trick, sweeping a range of UDP ports to maintain trace history.

no entanto, o ponto é que man tracepath usa recursos mais novos para evitar a necessidade de privilégios de root. O problema mencionado é que as respostas de erro ICMP não incluiriam a carga útil de um pacote UDP . A carga de um pacote de eco ICMP seria incluída (mas a geração desses testes requer raiz).

Traceroute varies (increments) the UDP destination port number for each probe sent out, in order to reliably match ICMP TTL Exceeded messages to individual probes. Because the UDP ports occur right after the IP header, they can be relied on to be included in the "original packet" portion of the ICMP TTL Exceeded messages, even though the ICMP standards only mandate that the first eight octets following the IP header of the original packet be included in ICMP messages (it is allowed to send more though).

When ICMP ECHO requests are used, the probes can be disambiguated by using the sequence number field, which also happens to be located just before that 8-octet boundary.

PERT prossegue sugerindo

It is believed that this is because at that time, some gateways (as routers were called then) refused to send ICMP (TTL exceeded) messages in response to ICMP messages, as specified in the introduction of RFC 792, "Internet Control Message Protocol". Therefore the UDP variant was more robust.

Os comentários do código fonte explicar o uso da porta UDP também, mas não o uso de UDP sobre o eco ICMP. Uma leitura estrita sugere uma outra possibilidade

since icmp's aren't sent for icmp's

No contexto, o ponto é que os erros icmp nunca são enviados em resposta a uma resposta icmp , a fim de evitar um ciclo infinito de respostas. É certamente plausível que as implementações apliquem isso a todos os pacotes icmp, em vez de apenas respostas. Os comentários também mencionam vários bugs de implementação, que os usuários tinham que ter em mente para interpretar o resultado do traceroute.

No entanto, também é possível que Van Jacobson tenha confundido o ponto. Pode-se simplesmente ter assumido que os erros icmp não seriam retornados para qualquer pacote icmp, com vista a que isso não se aplicasse necessariamente às solicitações icmp echo.

Don't use this as a coding example. I was trying to find a routing problem and this code sort-of popped out after 48 hours without sleep. I was amazed it ever compiled, much less ran.

    
por 26.10.2016 / 14:34