Traceroute - cada pacote possui TTL == 1

17

Estou trabalhando no Wireshark lab-IP em redes de computadores - uma abordagem de cima para baixo e não entendo por que todos os pacotes que normalmente expiram têm um TTL de 1.

Aqui está o meu arquivo de captura do Wireshark. https://www.dropbox.com/s/rr5wgze9j20gzvu/traceroute-56.pcapng?dl=0

Capturei a execução do tracerouteprograma no Linux (com a opção de 56 bytes), conforme executada com o seguinte comando:

traceroute http://gaia.cs.umass.edu 56

Você pode ver que a maioria dos TTL do pacote == 1 e não sei por que, desde que soube que todo salto subsequente tem um TTL de +1 (ou mais).

PS:

  • Estou usando o Lubuntu no VMware com rede em ponte para o host.
  • Eu o capturei com o wireshark na máquina host (Windows)
  • Estou conectado a um ponto de acesso sem fio usando seu próprio servidor DHCP em cima do protocolo NAT
ksp0422
fonte

Respostas:

14

Deixe-me tentar responder a isso, porque é um pouco mais complicado que possa parecer inicialmente.

Parece que você já conhece a operação básica, traceroutemas antes de qualquer outra coisa, aqui está uma pequena recapitulação:

traceroutetenta determinar todas as etapas intermediárias do host para um host de destino ou apenas a distância, ou seja, o número de saltos, do host para um host de destino. Para fazer isso, ele começa a enviar pacotes para o host de destino com um número de porta de destino "aleatório" e um TTL que começa em 1 e continua aumentando.
A idéia é que cada roteador no meio diminua o TTL em 1. Portanto, se o TTL atingir 0 (na realidade, nunca o faz, já que o roteador que está prestes a diminuí-lo para 0 produz um erro antes disso), o roteador retornará um ICMP Mensagem de erro " Tempo de vida excedido ", por exemplo, número do pacote 24 no seu arquivo de captura. O que você obtém disso é que seu destino está mais distante e é por isso que você continua aumentando o TTL.
Quando o seu pacote possui um TTL grande o suficiente para chegar ao destino, você receberá uma mensagem de erro ICMP diferente: " Destino inacessível (porta inacessível) ", por exemplo, pacote número 208 no seu arquivo de captura. O que você obtém disso é que o último TTL usado é realmente o número de saltos entre você e o nó de destino. A razão pela qual você recebe um erro é simplesmente porque você está enviando uma mensagem para uma porta "aleatória" que o nó de destino (espero) não está ouvindo.

Agora entrando em detalhes para o seu arquivo de captura:
Na página do manual traceroute, podemos ver que cada TTL é usado 3 vezes (opção '-q') e o protocolo padrão usado é UDP (opção '-P'). Examinando os três primeiros pacotes UDP, ou seja, os pacotes 8-9-10 , podemos ver de fato que o TTL é 1 . Os próximos 3, ou seja, 11-12-13 , têm um TTL 2 e assim por diante. Então, da perspectiva da fonte, tudo parece correr bem.

Depois de algum tempo dependente do atraso da rede, começamos a receber as mensagens de erro previstas. Assim, podemos ver que os pacotes 24-25-26 são pacotes de erro " Tempo de vida excedido " e, portanto, significam que o destino está mais distante.

Essa troca de tentativas e erros continua até que, finalmente, o pacote 208 e depois você pode ver as mensagens de erro " Porta inacessível ", significando que seu destino foi alcançado.

Contando os pacotes que você envia e as respostas, você pode descobrir até pelo rastreio que o TTL realmente funcionou, mas é uma tarefa tediosa :)

Espero que tenha ajudado

George
fonte
super explicação
ksp0422
14

Seu cliente está enviando apenas os três primeiros pacotes com um TTL de 1. Os próximos três são enviados com um TTL de 2. Os próximos três são enviados com um TTL de 3. E assim por diante.

Uma maneira mais fácil de visualizar isso é definir o campo TTL IP como sua própria coluna no Wireshark. Simplesmente clique com o botão direito do mouse no valor TTL em qualquer pacote e selecione "Aplicar como coluna": Definir TTL como uma coluna no Wireshark

A partir daí, você pode ver que os pacotes 8,9,10 têm um TTL de 1. E os pacotes 11,12,13 têm um TTL de 2. E assim por diante. TTL em um Traceroute

Isso está acontecendo porque é assim que o Traceroute funciona. Ele tira proveito do que um roteador faz quando diminui um TTL para 0. Em vez de continuar encaminhando o pacote, ele envia de volta ao cliente original uma "mensagem ICMP TTL expirada em trânsito" (consulte o pacote nº 24 em sua captura) .

Portanto, como cliente, quando você envia o primeiro conjunto de pacotes com um TTL de 1, o primeiro roteador no caminho responde com a mensagem TTL expirada. Você mede o tempo que levou para receber a mensagem TTL expirada contra o envio das mensagens iniciais, e isso fornece os três primeiros valores na saída do Traceroute.

Em seguida, você envia outro conjunto de três pacotes com um TTL de 2. O primeiro roteador no caminho o decrementa para 1 e depois o encaminha para o próximo roteador no caminho. Na recepção, quando o segundo roteador o obtém, ele diminui o TTL para 0, o que solicita que ele descarte o pacote e envie o TTL expirado em trânsito.

O processo continua até que seu cliente receba (bem, três) mensagens TTL expiradas de cada roteador em trânsito entre você e o destino final contra o qual você está executando o seu traceroute.

Eddie
fonte
melhor explicado visualmente
ksp0422 17/10
@ Eddie, isso pode não ser relevante para esta questão, mas isso é muito pouco detalhe que eu pensei em perguntar no comentário. Você pode especificar o que acontece se o host (não o roteador) receber datagrama com o campo TTL 1?
Vimal Patel 10/12
1
@VimalPatel Se o pacote foi destinado ao host, ele simplesmente aceita o pacote. Descartar pacotes se o TTL atingir 0 é uma função do roteador.
Eddie