El comando traceroute se usa en Linux para mapear el viaje que un paquete de información emprende desde su origen hasta su destino. Un uso de traceroute es localizar cuándo ocurre la pérdida de datos en una red, lo que podría significar que un nodo está inactivo.
Debido a que cada salto en el registro refleja un nuevo servidor o enrutador entre la PC de origen y el objetivo deseado, la revisión de los resultados de un escaneo de traceroute también le permite identificar puntos lentos que pueden afectar de manera adversa el tráfico de su red.
Cómo funciona
La evaluación de la ruta específica que sigue el tráfico de la red (o la búsqueda de la puerta de enlace miscreant que descarta sus paquetes) presenta varios problemas de solución de problemas. Traceroute utiliza el protocolo IP tiempo para vivir para solicitar una respuesta ICMP TIME_EXCEEDED de cada puerta de enlace a lo largo de la ruta a un host de destino.
El único parámetro que debe incluir cuando ejecuta el comando traceroute es el nombre de host o la dirección IP del destino.
Traceroute Sintaxis y Switches
traceroute -dFInrvx -F first_ttl -sol puerta -yo Yo afronto -metro max_ttl -pag Puerto -q Nqueries -s src_addr -t tos -w tiempo de espera -z pausemsecs anfitrión empacar
Si bien lo anterior es cómo debe escribirse el comando traceroute para trabajar en la línea de comandos, el rendimiento o la salida del comando se pueden cambiar especificando uno o más interruptores opcionales.
- -F: Establezca el tiempo de vida inicial utilizado en el primer paquete de sonda saliente.
- -F: Establezca el bit "no fragmentar".
- -re: Habilitar la depuración a nivel de socket.
- -sol: Especifique una puerta de enlace de ruta de origen suelto (8 como máximo).
- -yo: Especifique una interfaz de red para obtener la dirección IP de origen para los paquetes de sonda salientes. Esto normalmente solo es útil en un host multi-homed. (Ver el-s bandera para otra forma de hacer esto.)
- -YO: Utilice ICMP ECHO en lugar de datagramas UDP.
- -metro: Establezca el tiempo de vida máximo (número máximo de saltos) utilizado en los paquetes de sondas salientes. El valor predeterminado es 30 saltos (el mismo valor predeterminado que se utiliza para las conexiones TCP).
- -norte: Imprima las direcciones de los saltos numéricamente en lugar de simbólicamente y numéricamente (guarda una búsqueda de nombre a nombre del servidor de nombres para cada puerta de enlace que se encuentra en la ruta).
- -pag: Establezca el número de puerto UDP base utilizado en las sondas (el valor predeterminado es 33434). Traceroute espera que nada esté escuchando en los puertos UDP. base a base + nhops - 1 en el host de destino (por lo tanto, se devolverá un mensaje ICMP PORT_UNREACHABLE para finalizar el rastreo de ruta). Si algo está escuchando en un puerto en el rango predeterminado, esta opción se puede usar para elegir un rango de puerto no utilizado.
- -r: Omita las tablas de enrutamiento normales y envíelas directamente a un host en una red conectada. Si el host no está en una red conectada directamente, se devuelve un error. Esta opción se puede usar para hacer ping a un host local a través de una interfaz que no tiene una ruta a través de ella (por ejemplo, después de que la interfaz fue eliminada por encaminado (8C)).
- -s: Utilice la siguiente dirección IP (que generalmente se proporciona como un número de IP, no como un nombre de host) como la dirección de origen en los paquetes de sonda salientes. En hosts múltiples (aquellos con más de una dirección IP), esta opción se puede usar para forzar que la dirección de origen sea algo diferente a la dirección IP de la interfaz a la que se envía el paquete de la sonda. Si la dirección IP no es una de las direcciones de interfaz de esta máquina, se devuelve un error y no se envía nada. (Ver el-yo bandera para otra forma de hacer esto.)
- -t: Selecciona el tipo de servicio en paquetes de sondeo al siguiente valor (cero predeterminado). El valor debe ser un entero decimal en el rango de 0 a 255. Esta opción se puede usar para ver si los diferentes tipos de servicio resultan en diferentes rutas. (Si no está ejecutando 4.4bsd, esto puede ser académico, ya que los servicios de red normales como telnet y ftp no le permiten controlar los TOS). No todos los valores de TOS son legales o significativos; consulte las especificaciones de IP para las definiciones. Los valores útiles son probablemente-t 16 '(bajo retraso) y `-t 8 '(alto rendimiento).
- -v: Salida detallada. Se enumeran los paquetes ICMP recibidos distintos de TIME_EXCEEDED y UNREACHABLE.
- -w: Establezca el tiempo (en segundos) para esperar una respuesta a una sonda (valor predeterminado 5 segundos).
- -X: Alternar sumas de comprobación de IP. Normalmente, esto evita que traceroute calcule las sumas de comprobación de IP. En algunos casos, el sistema operativo puede sobrescribir partes del paquete saliente pero no recalcular la suma de comprobación; por lo tanto, en algunos casos, el valor predeterminado es no calcular sumas de comprobación y usar-X hace que se calculen. Tenga en cuenta que, por lo general, se requieren sumas de comprobación para el último salto cuando se usan sondas ICMP ECHO (-YO), por lo que siempre se calculan cuando se usa ICMP.
- -z Establezca el tiempo (en milisegundos) para hacer una pausa entre las sondas (valor predeterminado 0). Algunos sistemas, como Solaris y enrutadores de Cisco, limitan la frecuencia de los mensajes icmp. Un buen valor para usar con esto es 500 (por ejemplo, 1/2 segundo).
Interpretando los resultados
Traceroute describe la ruta que sigue un paquete IP a un servidor de Internet al lanzar paquetes de sondas UDP con un pequeño TTL (tiempo de vida) y luego escuchar una respuesta de ICMP "tiempo excedido" desde una puerta de enlace. Comenzamos nuestras sondas con un TTL de uno y aumentamos en uno hasta que obtenemos un "puerto inalcanzable" de ICMP (lo que significa que el paquete llegó a su destino) o alcanzamos un valor máximo de intentos, que de forma predeterminada son 30 saltos y se pueden cambiar con la-metro bandera.
Cuando se ejecuta traceroute, envía tres sondas en cada configuración de TTL y luego imprime una línea en la consola que muestra la TTL, la dirección de la puerta de enlace y el tiempo de ida y vuelta de cada sonda. Si las respuestas de la sonda provienen de puertas de enlace diferentes, se imprime la dirección de cada sistema que responde. Si no hay respuesta dentro de un intervalo de tiempo de espera de cinco segundos (cambiado con el-w bandera), se imprime un asterisco para esa sonda.
Para evitar que el host de destino se vea abrumado por el procesamiento de paquetes de sondas UDP, el puerto de destino se establece en un valor que probablemente no utilice ese dispositivo. Si una red o servicio en el destino usa ese puerto, cambie el valor usando la-pag bandera.
Una muestra de uso y salida devolverá resultados similares a este ejemplo:
yak 71% traceroute nis.nsf.net. traceroute a nis.nsf.net (35.1.1.48), 30 saltos máx., paquete de 38 bytes 1 helios.ee.lbl.gov (128.3.112.1) 19 ms 19 ms 0 ms 2 lilac-dmc.Berkeley.EDU (128.32. 216.1) 39 ms 39 ms 19 ms 3 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 39 ms 19 ms 4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 39 ms 40 ms 39 ms 5 ccn -nerif22.Berkeley.EDU (128.32.168.22) 39 ms 39 ms 39 ms 6 128.32.197.4 (128.32.197.4) 40 ms 59 ms 59 ms 7 131.119.2.5 (131.119.2.5) 59 ms 59 ms 59 ms 8 129.140. 70.13 (129.140.70.13) 99 ms 99 ms 80 ms 9 129.140.71.6 (129.140.71.6) 139 ms 239 ms 319 ms 10 129.140.81.7 (129.140.81.7) 220 ms 199 ms 199 ms 11 nic.merit.edu (35.1 .1.48) 239 ms 239 ms 239 ms
Tenga en cuenta que la segunda y tercera líneas son las mismas. Este resultado se relaciona con un núcleo defectuoso en el sistema del segundo salto, lbl-csam.arpa, que reenvía paquetes con un TTL cero (un error en la versión distribuida de 4.3 BSD). Debe adivinar qué ruta están tomando los paquetes en todo el país, ya que la NSFNet (129.140) no proporciona traducciones de dirección a nombre para sus NSS.
Un ejemplo más interesante es:
yak 72% traceroute allspice.lcs.mit.edu. traceroute a allspice.lcs.mit.edu (18.26.0.115), 30 saltos máx 1 helios.ee.lbl.gov (128.3.112.1) 0 ms 0 ms 0 ms 2 lilac-dmc.Berkeley.EDU (128.32.216.1) 19 ms 19 ms 19 ms 3 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 19 ms 19 ms 4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 19 ms 39 ms 39 ms 5 ccn-nerif22 .Berkeley.EDU (128.32.168.22) 20 ms 39 ms 39 ms 6 128.32.197.4 (128.32.197.4) 59 ms 119 ms 39 ms 7 131.119.2.5 (131.119.2.5) 59 ms 59 ms 39 ms 8 129.140.70.13 ( 129.140.70.13) 80 ms 79 ms 99 ms 9 129.140.71.6 (129.140.71.6) 139 ms 139 ms 159 ms 10 129.140.81.7 (129.140.81.7) 199 ms 180 ms 300 ms 11 129.140.72.17 (129.140.72.17) 300 ms 239 ms 239 ms 12 * * * 13 128.121.54.72 (128.121.54.72) 259 ms 499 ms 279 ms 14 * * * 15 * * * 16 * * * 17 * * * 18 ALLSPICE.LCS.MIT.EDU (18.26 .0.115) 339 ms 279 ms 279 ms
Tenga en cuenta que las puertas de enlace a 12, 14, 15, 16 y 17 saltos no envían mensajes de "tiempo excedido" de ICMP o los envían con un TTL demasiado pequeño para que nos llegue. Las líneas 14 a 17 ejecutan el código MIT C Gateway que no envía mensajes de "tiempo excedido".
La puerta de enlace silenciosa 12 en el ejemplo anterior puede ser el resultado de un error en el código de red BSD 4. 23 y sus derivados: Las máquinas que ejecutan código 4.3 y anteriores envían un mensaje inalcanzable utilizando cualquier TTL que quede en el datagrama original. Dado que, para los gateways, el TTL restante es cero, se garantiza que el "tiempo excedido" de ICMP no nos lo devolverá. El comportamiento de este error es ligeramente más interesante cuando aparece en el sistema de destino:
1 helios.ee.lbl.gov (128.3.112.1) 0 ms 0 ms 0 ms 2 lilac-dmc.Berkeley.EDU (128.32.216.1) 39 ms 19 ms 39 ms 3 lilac-dmc.Berkeley.EDU (128.32.216.1 ) 19 ms 39 ms 19 ms 4 ccngw-ner-cc.Berkeley.EDU (128.32.136.23) 39 ms 40 ms 19 ms 5 ccn-nerif35.Berkeley.EDU (128.32.168.35) 39 ms 39 ms 39 ms 6 csgw. Berkeley.EDU (128.32.133.254) 39 ms 59 ms 39 ms 7 * * * 8 * * * * * 10 * * 11 * * 12 * * * 13 rip.Berkeley.EDU (128.32.131.22) 59 Sra ! 39 ms! 39 ms!
Observe que hay 12 "puertas de enlace" (13 es el destino final), y la última mitad de ellas faltan. Lo que realmente está sucediendo es que el servidor nombrado Dep (un Sun-3 con Sun OS 3.5) está utilizando el TTL de nuestro datagrama que llega como el TTL en su respuesta ICMP. Por lo tanto, la respuesta expirará en la ruta de retorno (sin que se envíe ningún aviso a nadie, ya que las ICMP no se envían para las ICMP) hasta que probemos con un TTL que sea al menos el doble de la longitud de la ruta. salta lejos
Una respuesta que devuelve con un TTL de 1 es una pista de que este problema existe. Traceroute imprime un "!" después del tiempo si el TTL es menor o igual a 1. Dado que los proveedores envían una gran cantidad de software obsoleto (Ultrix de DEC, Sun 3.x) o no estándar (HPUX), espere ver este problema con frecuencia y tenga cuidado al seleccionar el host de destino de sus sondas.
Otras posibles anotaciones posteriores al tiempo son:! H, !NORTEo!PAG (host, red o protocolo inalcanzable),! S (la ruta de origen falló),!F- (fragmentación necesaria: se muestra el valor de descubrimiento de MTU de ruta RFC1191),!X (comunicación prohibida administrativamente),! V (Violación de precedencia de host),!DO (corte de precedencia vigente), o! (Código ICMP inalcanzable). Estos códigos están definidos por RFC1812, que reemplaza a RFC1716. Si casi todas las sondas dan como resultado un tipo de host inalcanzable, traceroute se rendirá y saldrá.
Este programa está diseñado para su uso en pruebas, medición y administración de redes. Debe utilizarse principalmente para el aislamiento manual de fallas. Debido a la carga que podría imponer en la red, no es aconsejable utilizar traceroute durante las operaciones normales o desde scripts automatizados.