Por que algumas implementações comuns de traceroute usam como padrão as análises UDP?

18

Recentemente, eu estava solucionando um meta-problema de conectividade de rede, pois sabia que um determinado destino era acessível, mas não consegui demonstrar isso tracerouteporque o caminho ficou frio após um certo número de saltos. Dado que o último salto observado estava a montante do nó de interesse, cheirei o tráfego, esperando confirmar que as sondas estavam chegando e aprendendo qual regra de filtro os estava bloqueando. Com certeza, aprendi que os probes eram datagramas UDP destinados a uma porta alta (e variável) que eu tinha, é claro, bloqueado para o tráfego de entrada.

Isso me surpreende, porque eu assumi que todas as tracerouteanálises teriam como padrão o ICMP, pois as respostas são ICMP. Fiz uma pesquisa de documentação e constatei que implementações diferentes fazem escolhas diferentes, e algumas não permitem que o usuário faça uma seleção não padrão.

O resumo do método do probe Traceroute e a inferência do caminho IP de encaminhamento suportam minha intuição de que os probes do ICMP terão mais sucesso em alcançar o destino.

Permitir diferentes métodos de análise parece ser uma ótima ideia, mas o padrão para algo diferente do ICMP parece uma má idéia. Alguém poderia descrever a lógica por que é melhor usar o UDP por padrão?

neirbowj
fonte

Respostas:

20

A primeira versão traceroutefoi escrita por Van Jacobson e usou o ICMP, mas não funcionou muito bem. A interpretação do ICMP pelo fornecedor no RFC792 era que os roteadores não deveriam enviar uma mensagem de erro do ICMP em resposta a um pacote ICMP (consulte as notas de edição abaixo). Portanto, a maioria dos roteadores não enviava uma mensagem de "tempo excedido" em resposta a uma solicitação de eco com um TTL de 1 ou 0. Portanto, ele a alterou para usar UDP e eis que ele funcionou muito bem e houve muita alegria (e adoção). A tracerouteferramenta no Linux e no FreeBSD (e presumo a Cisco) é baseada no trabalho de Van Jacobson.

A especificação foi posteriormente alterada para "em resposta a um pacote de erros ICMP ". O mundo progrediu, os fornecedores fizeram alterações em suas pilhas, permitindo mensagens de erro do ICMP em resposta a solicitações de eco, e com o aumento de firewalls e ACLs, os pacotes UDP perdidos às vezes são bloqueados, mas a solicitação de eco do ICMP pode passar. É claro que seu sucesso hoje varia muito. Eu esperaria que as tracertoutras ferramentas fossem escritas em um momento em que o uso de respostas de eco do ICMP não fosse tão problemático.

Atualmente, você não pode realmente dizer que o UDP é melhor que o ICMP. Ou que qualquer um desses é melhor que o TCP. Depende completamente do caminho que você está percorrendo e das políticas de segurança em vigor. Pode ser necessário tentar uma, ambas ou as três implementações.

Fontes:

http://ftp.arl.army.mil/~mike/ping.html http://www.inetdaemon.com/tutorials/trou Troubleshooting / tools / traceroute / definition.shtml

Editar :

RFC alterado de IP (RFC791) para ICMP (RFC792) que diz na introdução:

Para evitar a regressão infinita de mensagens sobre mensagens etc., nenhuma mensagem ICMP é enviada sobre mensagens ICMP.

Foi o que levou os fornecedores a não enviarem erros de "tempo excedido" para solicitações de eco.

RFC1122, Requisitos para hosts da Internet, na seção 3.2.2. é a atualização que indica que os hosts não devem responder às mensagens de erro do ICMP .

karyhead
fonte
FYI, agora você tem reputação suficiente para deixar comentários sobre a pergunta que você me enviaram sobre
Mike Pennington
Bem feito. Eu gostei especialmente da história no primeiro link sobre o computador gritando "Ping! Ping! Ping!" no topo de seus pulmões.
Neirbowj
Mike, sim, eu estou começando a pegar o jeito de como este site funciona :-)
karyhead