Como o traceroute e o tracepath executam uma função semelhante, diferentemente?
Ambos os programas basicamente fazem uma coisa: enviar e receber certos pacotes IP.
Você pode usar a API normal de soquetes para fazer isso ou manipular os pacotes brutos da interface. A API sockets não requer privilégios de root, porque é bastante segura. Existem mecanismos embutidos para impedir que um programa acesse pacotes IP que outro programa fez.
O Tracepath usa a API sockets para toda a sua funcionalidade. O traceroute manipula pacotes brutos para algumas de suas funcionalidades.
O que o traceroute faz, que requer privilégios de root, que o tracepath não faz?
Ele manipula pacotes brutos.
Para manipular pacotes brutos, você precisa de privilégios de root, pois, ao fazer isso, você ignora os mecanismos de segurança da API de sockets. Você ganha acesso a comunicações de todos os outros processos e usuários que usam essa interface. Basta pensar sobre o que um vírus poderia fazer se pudesse manipular pacotes brutos.
Existem cenários em que se deve preferir o tracepath ao traceroute, ou vice-versa?
Um comando avançado disponível no Traceroute é a capacidade de executar rastreamento de rede usando o protocolo IPv4 ou IPv6. Também é possível escolha entre os formatos de dados ICMP, TCP ou UDP para uma análise. Traceroute pode escolher roteiros de origem específicos para o probe e escolher qual porta para enviar de. Pode definir limites no TTL mínimo e máximo para aceitar de um probe de saída. Além disso, o Traceroute pode mostrar a tempo de espera para pings de resposta, bem como definir quantos pacotes são enviados em cada teste e quantas probes enviar. Alguns desses comandos podem não suportado pelo hardware de rede ao longo do caminho, o que poderia terminar a sonda antes que ela chegue ao seu destino.