O traceroute usa UDP ou ICMP ou ambos?

24

Quando rastreio o domínio www.google.com no meu laptop, estou usando o icmp ou o udp?
Eu pensei que era o icmp tipo 11, mas enquanto procurava por outra coisa, me deparei com regras em que o icmp tipo 30 era usado e vi regras em que o udp era usado.
Alguém pode me explicar como isso funciona?
Estou trabalhando em um firewall (iptables) para um servidor virtual dedicado.

Kris
fonte

Respostas:

26

O tipo de pacote enviado difere dependendo da implementação. Por padrão, o Windows tracertusa ICMP e o Mac OS X e Linux tracerouteusam UDP. Não tenho máquinas BSD ou Solaris ou qualquer outro sistema operacional disponível para verificar, mas a página de manual da versão do Mac OS X menciona que sua origem é o BSD 4.3.

As versões para Mac e Linux oferecem a capacidade de escolher uma variedade de protocolos diferentes, incluindo pacotes ICMP, TCP, UDP e GRE. Outros protocolos podem ser especificados por seu nome ou número, mas o traceroute não sabe nada sobre como outros protocolos funcionam. Apenas os envia cegamente.

Eles também podem alterar a carga útil e as portas de origem e destino para evitar firewalls ou descobrir qual roteador ao longo do caminho está descartando pacotes de um determinado tamanho.

Todas as versões do traceroute se baseiam nas respostas do ICMP tipo 11 (tempo excedido) de cada salto ao longo da rota. Se as respostas do ICMP tipo 11 estiverem sendo bloqueadas pelo seu firewall, o traceroute não funcionará. Esses pacotes são de entrada, não de saída.

O ICMP tipo 30 é especificamente designado para traceroute e é rotulado como "Solicitação de informações". Não consegui encontrar nenhum lugar onde isso seja realmente usado. A página do manual para as versões do Mac OS X e Linux diz que -Io ICMP tipo 8 será enviado (solicitação de eco). A Wikipedia diz que o Windows tracerttambém usa solicitações de eco ICMP. O ICMP tipo 30 ou tipo 8 são pacotes de saída, não de entrada.

O ICMP tipo 0 (resposta de eco) pode voltar como o último pacote quando o TTL é exatamente igual ao número de saltos. O Traceroute saberá que terminou quando receber um deles. Este é um pacote de entrada.

Pacotes TCP SYN causarão um RSTpacote ou um SYN ACKpacote em resposta quando chegarem ao seu destino. Se você receber um SYN ACKpacote, é educado acompanhá- RSTlo para não deixar uma conexão semiaberta no servidor.

É possível obter as respostas do código 4 do tipo 3 do ICMP, em vez das respostas do tipo 11 do ICMP, se você enviar um pacote grande com o sinalizador "Não fragmentar" definido, no entanto, isso provavelmente só permitirá encontrar o salto com a menor MTU . Normalmente, você obterá esse tipo de resposta apenas de um salto ao longo da rota. Nem todos eles.

Ladadadada
fonte
8

O traceroute tradicional usa UDP no incremento de portas para cada salto.

Você pode usar qualquer tipo de pacote para implementá-lo - ICMP, TCP SYN, etc. Basta o pacote IP expirar e você fica com o ouro.

Várias implementações, como o MacOS, oferecem suporte para vários tipos de traceroute, bem como modos que não incrementam portas, etc., para contornar as restrições de firewall.

Daniel Pittman
fonte
7
A porta UDP padrão na implementação do tipo unix é de 33434 a 33534. As implementações do ICMP usam uma "solicitação de eco" (tipo 8).
Ouki 28/03/12