En informática , traceroute
y tracert
son comandos de interfaz de línea de comandos de diagnóstico para mostrar posibles rutas (caminos) y retrasos de tránsito de paquetes a través de una red de Protocolo de Internet (IP) .
El comando informa los tiempos de ida y vuelta de los paquetes recibidos desde cada host sucesivo (nodo remoto) a lo largo de la ruta hacia un destino. La suma de los tiempos medios en cada salto es una medida del tiempo total empleado para establecer la conexión. El comando se interrumpe si todos los paquetes enviados (normalmente tres) se pierden más de dos veces.
Ping , por otro lado, sólo calcula los tiempos finales de ida y vuelta desde el punto de destino.
Para el Protocolo de Internet versión 6 (IPv6), la herramienta a veces tiene el nombre [1] y [2] .traceroute6
tracert6
Un comando está disponible en muchos sistemas operativos modernos , generalmente nombrados traceroute
en sistemas tipo Unix como FreeBSD , macOS y Linux y nombrados tracert
en Windows y ReactOS .
La funcionalidad estaba disponible gráficamente en macOS, pero quedó obsoleta desde el lanzamiento de macOS Big Sur . [3]
Los sistemas operativos basados en Windows NT también proporcionan PathPing , que combina la funcionalidad de ping con la de tracert.
La versión de ReactOS fue desarrollada por Ged Murphy y tiene licencia GPL . [4]
En sistemas operativos tipo Unix , traceroute envía, de manera predeterminada, una secuencia de paquetes de Protocolo de datagramas de usuario (UDP), con números de puerto de destino que van desde 33434 a 33534; las implementaciones de traceroute enviadas con Linux , [5] FreeBSD , [6] NetBSD , [7] OpenBSD , [8] DragonFly BSD , [9] y macOS incluyen una opción para usar paquetes de solicitud de eco ICMP ( -I ), o cualquier protocolo arbitrario ( -P ) como UDP, TCP usando paquetes TCP SYN o ICMP. [10]
En Windows, tracert envía paquetes de solicitud de eco ICMP, en lugar de los paquetes UDP que traceroute envía de manera predeterminada. [11]
El valor de tiempo de vida (TTL), también conocido como límite de salto , se utiliza para determinar los enrutadores intermedios que se atraviesan hacia el destino. Traceroute envía paquetes con valores TTL que aumentan gradualmente de paquete a paquete, comenzando con un valor TTL de uno. Los enrutadores disminuyen los valores TTL de los paquetes en uno al enrutar y descartan paquetes cuyo valor TTL ha llegado a cero, devolviendo el mensaje de error ICMP ICMP Time Exceeded . [10] Para el primer conjunto de paquetes, el primer enrutador recibe el paquete, disminuye el valor TTL y descarta el paquete porque entonces tiene un valor TTL cero. El enrutador envía un mensaje ICMP Time Exceeded de vuelta a la fuente. El siguiente conjunto de paquetes recibe un valor TTL de dos, por lo que el primer enrutador reenvía los paquetes, pero el segundo enrutador los descarta y responde con ICMP Time Exceeded. Al proceder de esta manera, traceroute utiliza los mensajes ICMP Time Exceeded devueltos para crear una lista de enrutadores que atraviesan los paquetes hasta llegar al destino y devuelve un mensaje ICMP Destination Unreachable si se están utilizando paquetes UDP o un mensaje ICMP Echo Reply si se están utilizando mensajes ICMP Echo. [10]
Los valores de marca de tiempo devueltos para cada enrutador a lo largo de la ruta son los valores de retraso ( latencia ), normalmente medidos en milisegundos para cada paquete.
El remitente espera una respuesta en un número de segundos configurado. Si no se confirma el envío de un paquete en el intervalo previsto, se muestra un asterisco.
El Protocolo de Internet no exige que los paquetes sigan la misma ruta hacia un destino en particular, por lo que los hosts enumerados pueden ser hosts que otros paquetes han atravesado. Si el host en el salto n.° N no responde, el salto se omite en la salida.
Si una red tiene un firewall y opera con sistemas Windows y similares a Unix, se debe habilitar más de un protocolo entrante a través del firewall para que traceroute funcione y reciba respuestas.
Algunas implementaciones de traceroute utilizan paquetes TCP, como tcptraceroute y traceroute de capa cuatro (lft). PathPing es una utilidad introducida con Windows NT que combina la funcionalidad de ping y traceroute. MTR es una versión mejorada de traceroute ICMP disponible para sistemas tipo Unix y Windows. Las diversas implementaciones de traceroute dependen todas de que se envíen paquetes ICMP Time Exceeded (tipo 11) a la fuente.
En Linux, tracepath es una utilidad similar a traceroute, con la principal diferencia de que no requiere privilegios de superusuario . [12]
La implementación de traceroute de Cisco también utiliza una secuencia de datagramas UDP , cada uno con valores TTL crecientes , a un número de puerto no válido en el host remoto; de manera predeterminada, se utiliza el puerto UDP 33434. Una versión extendida de este comando (conocida como el comando traceroute extendido ) puede cambiar el número de puerto de destino utilizado por los mensajes de sondeo UDP. [13]
La mayoría de las implementaciones incluyen opciones para especificar la cantidad de consultas que se enviarán por salto, el tiempo de espera para una respuesta, el límite de saltos y el puerto que se utilizará. Si se invoca traceroute sin opciones, se muestra la lista de opciones disponibles.
Para Linux, man traceroute presenta más detalles, incluidos los indicadores de error mostrados.
Por ejemplo:
$ traceroute -w 3 -q 1 -m 16 ejemplo.com traceroute a ejemplo.com (93.184.216.34), 16 saltos máximo, paquetes de 52 bytes 1 192.xxx (192.xxx) 5,152 ms 2 10.xxx (10.xxx) 12,767 ms 3 172.xxx (172.xxx) 11,638 ms 4 172.xxx (172.xxx) 13,193 ms 5 xxx.xxxcox.net (68.xxx) 20,624 ms 6 xxx.xxx.xxx.edgecastcdn.net (192.xxx) 56,205 ms 7 xxx.xxx.xxx.edgecastcdn.net (192.xxx) 24,573 ms 8 * 9 * 10 93.xxx (93.xxx) 22,810 ms 11 93.xxx (93.xxx) 20,235 ms
En el ejemplo anterior, las opciones seleccionadas son esperar tres segundos (en lugar de cinco), enviar solo una consulta a cada salto (en lugar de tres), limitar la cantidad máxima de saltos a 16 antes de darse por vencido (en lugar de 30), con example.com como el host final. En las líneas 8 y 9 (TTL 8 y 9) se muestran asteriscos donde el enrutador no respondió dentro del tiempo de espera.
Traceroute puede ayudar a identificar definiciones de tablas de enrutamiento incorrectas o firewalls que pueden estar bloqueando el tráfico ICMP o el ping UDP de puerto alto en Unix a un sitio. [ aclarar ] Una respuesta de traceroute correcta no garantiza la conectividad para las aplicaciones, ya que un firewall puede permitir paquetes ICMP pero no permitir paquetes de otros protocolos.
Los evaluadores de penetración utilizan Traceroute para recopilar información sobre la infraestructura de red y los rangos de direcciones IP alrededor de un host determinado.
Traceroute se puede utilizar para optimizar la descarga de datos. Si hay varios espejos disponibles para el mismo recurso, se puede rastrear cada uno de ellos para encontrar el más rápido.
La página del manual de traceroute afirma que el programa traceroute original fue escrito por Van Jacobson en 1987 a partir de una sugerencia de Steve Deering , y que Guy Almes y Matt Mathis también tuvieron la idea al mismo tiempo que Deering. [14] El autor del programa ping , Mike Muuss , afirma en su sitio web que traceroute se escribió utilizando el soporte ICMP del núcleo que había codificado anteriormente para habilitar sockets ICMP sin procesar cuando escribió por primera vez el programa ping. [15]
Traceroute tiene múltiples limitaciones. [16] Traceroute no descubre rutas a nivel de enrutador, sino a nivel de interfaz. Otra limitación aparece cuando los enrutadores no responden a las sondas o cuando los enrutadores tienen un límite de respuestas ICMP. [17] En presencia de balanceo de carga de tráfico , traceroute puede indicar una ruta que en realidad no existe; para minimizar este problema existe una modificación de traceroute llamada Paris-traceroute, [18] que mantiene el identificador de flujo de las sondas para evitar el balanceo de carga.