O tipo de pacote enviado difere dependendo da implementação. Por padrão, o Windows tracert
usa o ICMP e o Mac OS X e o Linux traceroute
usam o UDP. Eu não tenho máquinas BSD ou Solaris ou qualquer outro SO disponível para checar, mas a página de manual para a versão do Mac OS X menciona sua origem é o BSD 4.3.
As versões Mac e Linux oferecem a possibilidade 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 contam com 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 um "Pedido de Informações". Não consegui encontrar nenhum lugar onde isso seja realmente usado. A página man das versões para Mac OS X e Linux diz que -I
enviará ICMP tipo 8 (solicitação de eco). A Wikipedia diz que o Windows tracert
também usa solicitações de eco ICMP. Tipo ICMP 30 ou tipo 8 são pacotes de saída, não de entrada.
O ICMP tipo 0 (resposta de eco) pode retornar 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.
Os pacotes TCP SYN causarão um pacoteRST
ou SYN ACK
em resposta quando chegarem ao destino. Se você receber um pacote SYN ACK
, é educado acompanhar com um pacote RST
para não deixar uma conexão semiaberta no servidor.
É possível obter respostas do código 4 do tipo 3 do ICMP em vez de respostas do tipo 11 do ICMP se você enviar um pacote grande com o sinalizador "Não fragmentar", mas é provável que permite que você encontre o salto com o menor MTU. Você normalmente só receberá esse tipo de resposta de um salto ao longo do percurso. Nem todos eles.